diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8f4c86ae34..4478d81965 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2015-04-17 Gary Benson + + * 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. + * NEWS: Mention that GDB now supports automatic location and + retrieval of executable + files from remote targets. + 2015-04-17 Gary Benson * target.h (TARGET_OBJECT_EXEC_FILE): New enum value. diff --git a/gdb/NEWS b/gdb/NEWS index b11a6fc287..62cbdcb944 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -36,6 +36,12 @@ the operating system) when starting processes remotely, and when attaching to already-running local or remote processes. +* GDB now supports automatic location and retrieval of executable + files from remote targets. Remote debugging can now be initiated + using only a "target remote" or "target extended-remote" command + (no "set sysroot" or "file" commands are required). See "New remote + packets" below. + * Python Scripting ** gdb.Objfile objects have a new attribute "username", diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 1bb7f41988..2335bc1f33 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,9 @@ +2015-04-17 Gary Benson + + * gdb.texinfo (Connecting to a Remote Target): Mention that + GDB can access program files from remote targets that support + qXfer:exec-file:read and Host I/O packets. + 2015-04-17 Gary Benson * gdb.texinfo (Remote Configuration): Document the "set/show diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 964f9c4893..0410702632 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -18952,10 +18952,15 @@ configuration of @value{GDBN}; use @code{help target} to list them. @node Connecting @section Connecting to a Remote Target -On the @value{GDBN} host machine, you will need an unstripped copy of -your program, since @value{GDBN} needs symbol and debugging information. -Start up @value{GDBN} as usual, using the name of the local copy of your -program as the first argument. +@value{GDBN} needs an unstripped copy of your program to access symbol +and debugging information. Some remote targets (@pxref{qXfer +executable filename read}, and @pxref{Host I/O Packets}) allow +@value{GDBN} to access program files over the same connection used to +communicate with @value{GDBN}. With such a target, if the remote +program is unstripped, the only command you need is @code{target +remote}. Otherwise, start up @value{GDBN} using the name of the local +unstripped copy of your program as the first argument, or use the +@code{file} command. @cindex @code{target remote} @value{GDBN} can communicate with the target over a serial line, or diff --git a/gdb/remote.c b/gdb/remote.c index a4b82e8a44..3b2325f861 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -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); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 2000dbed2c..500a77409b 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-04-17 Gary Benson + + * gdb.server/server-exec-info.exp: Inhibit GDB from accessing + the main executable over the remote protocol. + 2015-04-16 Pedro Alves * boards/native-extended-gdbserver.exp (mi_gdb_start): Don't start diff --git a/gdb/testsuite/gdb.server/server-exec-info.exp b/gdb/testsuite/gdb.server/server-exec-info.exp index ca5f5caaa3..c12554afe8 100644 --- a/gdb/testsuite/gdb.server/server-exec-info.exp +++ b/gdb/testsuite/gdb.server/server-exec-info.exp @@ -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 ""