aboutsummaryrefslogtreecommitdiff
path: root/gdb/remote.c
diff options
context:
space:
mode:
authorGary Benson <gbenson@redhat.com>2015-05-12 11:57:52 +0100
committerGary Benson <gbenson@redhat.com>2015-05-12 11:57:52 +0100
commit835205d078aa3b78180da1512f8019ab064032e7 (patch)
tree61bf26b5330e9cd64d7aa6cb8281feb03f9e6948 /gdb/remote.c
parent5b155b955ab0f4b6db3a5edb049f8e4d5a712f4a (diff)
downloadgdb-835205d078aa3b78180da1512f8019ab064032e7.zip
gdb-835205d078aa3b78180da1512f8019ab064032e7.tar.gz
gdb-835205d078aa3b78180da1512f8019ab064032e7.tar.bz2
Locate executables on remote stubs without multiprocess extensions
This commit allows GDB to determine filenames of main executables when debugging using remote stubs without multiprocess extensions. The qXfer:exec-file:read packet is extended to allow an empty annex, with the meaning that the remote stub should supply the filename of whatever it thinks is the current process. gdb/ChangeLog: * remote.c (remote_add_inferior): Call exec_file_locate_attach for fake PIDs as well as real ones. (remote_pid_to_exec_file): Send empty annex if PID is fake. gdb/doc/ChangeLog: * gdb.texinfo (General Query Packets): Document qXfer:exec-file:read with empty annex. gdb/gdbserver/ChangeLog: * server.c (handle_qxfer_exec_file): Use current process if annex is empty.
Diffstat (limited to 'gdb/remote.c')
-rw-r--r--gdb/remote.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/gdb/remote.c b/gdb/remote.c
index 3b2325f..02c8371 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -1558,7 +1558,7 @@ remote_add_inferior (int fake_pid_p, int pid, int attached,
/* 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)
+ if (try_open_exec && get_exec_file (0) == NULL)
exec_file_locate_attach (pid, 1);
return inf;
@@ -11666,7 +11666,8 @@ static char *
remote_pid_to_exec_file (struct target_ops *self, int pid)
{
static char *filename = NULL;
- char annex[9];
+ struct inferior *inf;
+ char *annex = NULL;
if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
return NULL;
@@ -11674,7 +11675,19 @@ remote_pid_to_exec_file (struct target_ops *self, int pid)
if (filename != NULL)
xfree (filename);
- xsnprintf (annex, sizeof (annex), "%x", pid);
+ inf = find_inferior_pid (pid);
+ if (inf == NULL)
+ internal_error (__FILE__, __LINE__,
+ _("not currently attached to process %d"), pid);
+
+ if (!inf->fake_pid_p)
+ {
+ const int annex_size = 9;
+
+ annex = alloca (annex_size);
+ xsnprintf (annex, annex_size, "%x", pid);
+ }
+
filename = target_read_stralloc (&current_target,
TARGET_OBJECT_EXEC_FILE, annex);