summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/NEWS6
-rw-r--r--gdb/doc/ChangeLog6
-rw-r--r--gdb/doc/gdb.texinfo13
-rw-r--r--gdb/remote.c18
-rw-r--r--gdb/testsuite/ChangeLog5
-rw-r--r--gdb/testsuite/gdb.server/server-exec-info.exp1
7 files changed, 49 insertions, 9 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 8f4c86ae341..4478d819658 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,14 @@
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.
* remote.c (PACKET_qXfer_exec_file): Likewise.
(remote_protocol_features): Register the
diff --git a/gdb/NEWS b/gdb/NEWS
index b11a6fc2879..62cbdcb9441 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 1bb7f41988c..2335bc1f339 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,5 +1,11 @@
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
remote pid-to-exec-file-packet" command.
(General Query Packets): Document the qXfer:exec-file:read
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 964f9c48932..04107026328 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 a4b82e8a447..3b2325f8615 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 2000dbed2c7..500a77409b6 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -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
diff --git a/gdb/testsuite/gdb.server/server-exec-info.exp b/gdb/testsuite/gdb.server/server-exec-info.exp
index ca5f5caaa33..c12554afe81 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 ""