diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 3 | ||||
-rw-r--r-- | gdb/gdbserver/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/gdbserver/server.c | 25 | ||||
-rw-r--r-- | gdb/remote.c | 19 |
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 (¤t_target, TARGET_OBJECT_EXEC_FILE, annex); |