aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/doc/ChangeLog5
-rw-r--r--gdb/doc/gdb.texinfo3
-rw-r--r--gdb/gdbserver/ChangeLog5
-rw-r--r--gdb/gdbserver/server.c25
-rw-r--r--gdb/remote.c19
6 files changed, 54 insertions, 9 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b58f04a..7f4b457 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2015-05-12 Gary Benson <gbenson@redhat.com>
+
+ * 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.
+
2015-05-09 Siva Chandra Reddy <sivachandra@google.com>
* NEWS (Python Scripting): Mention the new gdb.Value methods.
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index 727d0ad..05aeab7 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,3 +1,8 @@
+2015-05-12 Gary Benson <gbenson@redhat.com>
+
+ * gdb.texinfo (General Query Packets): Document
+ qXfer:exec-file:read with empty annex.
+
2015-05-09 Siva Chandra Reddy <sivachandra@google.com>
* python.texi (Values From Inferior): Add descriptions of new
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 19d8bb3..5461356 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -36558,7 +36558,8 @@ by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
Return the full absolute name of the file that was executed to create
a process running on the remote system. The annex specifies the
numeric process ID of the process to query, encoded as a hexadecimal
-number.
+number. If the annex part is empty the remote stub should return the
+filename corresponding to the currently executing process.
This packet is not probed by default; the remote stub must request it,
by supplying an appropriate @samp{qSupported} response (@pxref{qSupported}).
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index c33f90a..94146b8 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,8 @@
+2015-05-12 Gary Benson <gbenson@redhat.com>
+
+ * server.c (handle_qxfer_exec_file): Use current process
+ if annex is empty.
+
2015-05-08 Sandra Loosemore <sandra@codesourcery.com>
* linux-nios2-low.c: Include elf/common.h. Adjust comments.
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
index 3f9bb89..174ab39 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -1146,17 +1146,32 @@ handle_qxfer_exec_file (const char *const_annex,
gdb_byte *readbuf, const gdb_byte *writebuf,
ULONGEST offset, LONGEST len)
{
- char *annex, *file;
+ char *file;
ULONGEST pid;
int total_len;
if (the_target->pid_to_exec_file == NULL || writebuf != NULL)
return -2;
- annex = alloca (strlen (const_annex) + 1);
- strcpy (annex, const_annex);
- annex = unpack_varlen_hex (annex, &pid);
- if (annex[0] != '\0' || pid == 0)
+ if (const_annex[0] == '\0')
+ {
+ if (current_thread == NULL)
+ return -1;
+
+ pid = pid_of (current_thread);
+ }
+ else
+ {
+ char *annex = alloca (strlen (const_annex) + 1);
+
+ strcpy (annex, const_annex);
+ annex = unpack_varlen_hex (annex, &pid);
+
+ if (annex[0] != '\0')
+ return -1;
+ }
+
+ if (pid <= 0)
return -1;
file = (*the_target->pid_to_exec_file) (pid);
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);