[7/7] Access executable from remote system when first inferior appears
Commit Message
This commit modifies remote_add_inferior to take an extra argument
try_open_exec. If this is nonzero, remote_add_inferior will attempt
to open this inferior's executable as the main executable if no main
executable is open already. Callers are updated appropriately.
One testcase required updating as a result of this commit. The test
checked that GDB's "info files" command does not crash if no main
executable is open, and relied on GDB's inability to access the main
executable over the remote protocol. The test was updated to inhibit
this new behavior.
gdb/ChangeLog:
* remote.c (remote_add_inferior): New argument try_open_exec.
If nonzero, attempt to open the inferior's executable file as
the main executable if no main executable is open already.
All callers updated.
gdb/testsuite/ChangeLog:
* gdb.server/server-exec-info.exp: Inhibit GDB from accessing
the main executable over the remote protocol.
---
gdb/ChangeLog | 7 +++++++
gdb/remote.c | 18 +++++++++++++-----
gdb/testsuite/ChangeLog | 5 +++++
gdb/testsuite/gdb.server/server-exec-info.exp | 1 +
4 files changed, 26 insertions(+), 5 deletions(-)
Comments
On 04/01/2015 12:22 PM, Gary Benson wrote:
> This commit modifies remote_add_inferior to take an extra argument
> try_open_exec. If this is nonzero, remote_add_inferior will attempt
> to open this inferior's executable as the main executable if no main
> executable is open already. Callers are updated appropriately.
>
> One testcase required updating as a result of this commit. The test
> checked that GDB's "info files" command does not crash if no main
> executable is open, and relied on GDB's inability to access the main
> executable over the remote protocol. The test was updated to inhibit
> this new behavior.
So this is significant user-visible change too. I think it deserves
an example in the commit log, and a NEWS entry. The manual should
probably be updated to explain/mention this too. We already mention
something like this in the "attach" docs:
"When you use @code{attach}, the debugger finds the program running in
the process first (...)"
Otherwise looks good.
Thanks,
Pedro Alves
@@ -1516,10 +1516,13 @@ remote_query_attached (int pid)
inferior. If ATTACHED is 1, then we had just attached to this
inferior. If it is 0, then we just created this inferior. If it
is -1, then try querying the remote stub to find out if it had
- attached to the inferior or not. */
+ attached to the inferior or not. If TRY_OPEN_EXEC is true then
+ attempt to open this inferior's executable as the main executable
+ if no main executable is open already. */
static struct inferior *
-remote_add_inferior (int fake_pid_p, int pid, int attached)
+remote_add_inferior (int fake_pid_p, int pid, int attached,
+ int try_open_exec)
{
struct inferior *inf;
@@ -1553,6 +1556,11 @@ remote_add_inferior (int fake_pid_p, int pid, int attached)
inf->attach_flag = attached;
inf->fake_pid_p = fake_pid_p;
+ /* If no main executable is currently open then attempt to
+ open the file that was executed to create this inferior. */
+ if (try_open_exec && !fake_pid_p && get_exec_file (0) == NULL)
+ exec_file_locate_attach (pid, 1);
+
return inf;
}
@@ -1643,7 +1651,7 @@ remote_notice_new_inferior (ptid_t currthread, int running)
int fake_pid_p = !remote_multi_process_p (rs);
inf = remote_add_inferior (fake_pid_p,
- ptid_get_pid (currthread), -1);
+ ptid_get_pid (currthread), -1, 1);
}
/* This is really a new thread. Add it. */
@@ -3413,7 +3421,7 @@ add_current_inferior_and_thread (char *wait_status)
fake_pid_p = 1;
}
- remote_add_inferior (fake_pid_p, ptid_get_pid (inferior_ptid), -1);
+ remote_add_inferior (fake_pid_p, ptid_get_pid (inferior_ptid), -1, 1);
/* Add the main thread. */
add_thread_silent (inferior_ptid);
@@ -4539,7 +4547,7 @@ extended_remote_attach (struct target_ops *target, const char *args,
target_pid_to_str (pid_to_ptid (pid)));
}
- set_current_inferior (remote_add_inferior (0, pid, 1));
+ set_current_inferior (remote_add_inferior (0, pid, 1, 0));
inferior_ptid = pid_to_ptid (pid);
@@ -27,6 +27,7 @@ if [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] {
return -1
}
+gdb_test_no_output "set remote pid-to-exec-file-packet off"
gdb_test "file" ".*" "file" \
{Discard symbol table from `.*'\? \(y or n\) } "y"
gdbserver_run ""