Access executable from remote system when first inferior appears

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.

With this commit, remote debugging can now be initiated using only a
"target remote" or "target extended-remote" command; no "set sysroot"
or "file" commands are required, e.g.

  bash$ gdb -q
  (gdb) target remote | gdbserver - /bin/sh
  Remote debugging using | gdbserver - /bin/sh
  Process /bin/sh created; pid = 32166
  stdin/stdout redirected
  Remote debugging using stdio
  Reading symbols from target:/bin/bash...

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.
	* NEWS: Mention that GDB now supports automatic location and
	retrieval of executable + files from remote targets.

gdb/doc/ChangeLog:

	* 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.

gdb/testsuite/ChangeLog:

	* gdb.server/server-exec-info.exp: Inhibit GDB from accessing
	the main executable over the remote protocol.
This commit is contained in:
Gary Benson 2015-04-17 09:47:30 +01:00
parent e57f1de3b3
commit 1b6e6f5c7f
7 changed files with 49 additions and 9 deletions

View File

@ -1,3 +1,12 @@
2015-04-17 Gary Benson <gbenson@redhat.com>
* 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 <gbenson@redhat.com>
* target.h (TARGET_OBJECT_EXEC_FILE): New enum value.

View File

@ -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",

View File

@ -1,3 +1,9 @@
2015-04-17 Gary Benson <gbenson@redhat.com>
* 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 <gbenson@redhat.com>
* gdb.texinfo (Remote Configuration): Document the "set/show

View File

@ -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

View File

@ -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);

View File

@ -1,3 +1,8 @@
2015-04-17 Gary Benson <gbenson@redhat.com>
* gdb.server/server-exec-info.exp: Inhibit GDB from accessing
the main executable over the remote protocol.
2015-04-16 Pedro Alves <palves@redhat.com>
* boards/native-extended-gdbserver.exp (mi_gdb_start): Don't start

View File

@ -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 ""