Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Gary Benson <gbenson@redhat.com>
To: gdb-patches@sourceware.org
Subject: [PATCH 6/7] Implement qXfer:exec-file:read in gdbserver
Date: Wed, 01 Apr 2015 11:30:00 -0000	[thread overview]
Message-ID: <1427887341-31819-7-git-send-email-gbenson@redhat.com> (raw)
In-Reply-To: <1427887341-31819-1-git-send-email-gbenson@redhat.com>

This commit implements the "qXfer:exec-file:read" packet in gdbserver.

gdb/gdbserver/ChangeLog:

	* target.h (struct target_ops) <pid_to_exec_file>: New field.
	* linux-low.c (linux_target_ops): Initialize pid_to_exec_file.
	* server.c (handle_qxfer_exec_file): New function.
	(qxfer_packets): Add exec-file entry.
	(handle_query): Report qXfer:exec-file:read as supported packet.
---
 gdb/gdbserver/ChangeLog   |    8 ++++++++
 gdb/gdbserver/linux-low.c |    1 +
 gdb/gdbserver/server.c    |   40 ++++++++++++++++++++++++++++++++++++++++
 gdb/gdbserver/target.h    |    8 ++++++++
 4 files changed, 57 insertions(+), 0 deletions(-)

diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index e4c5420..5ce39fb 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -6429,6 +6429,7 @@ static struct target_ops linux_target_ops = {
   NULL,
 #endif
   linux_supports_range_stepping,
+  linux_pid_to_exec_file,
 };
 
 static void
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
index 96b31b8..31a2c04 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -1137,6 +1137,42 @@ handle_qxfer_auxv (const char *annex,
   return (*the_target->read_auxv) (offset, readbuf, len);
 }
 
+/* Handle qXfer:exec-file:read.  */
+
+static int
+handle_qxfer_exec_file (const char *const_annex,
+			gdb_byte *readbuf, const gdb_byte *writebuf,
+			ULONGEST offset, LONGEST len)
+{
+  char *annex, *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)
+    return -1;
+
+  file = (*the_target->pid_to_exec_file) (pid);
+  if (file == NULL)
+    return -1;
+
+  total_len = strlen (file);
+
+  if (offset > total_len)
+    return -1;
+
+  if (offset + len > total_len)
+    len = total_len - offset;
+
+  memcpy (readbuf, file + offset, len);
+  return len;
+}
+
 /* Handle qXfer:features:read.  */
 
 static int
@@ -1638,6 +1674,7 @@ static const struct qxfer qxfer_packets[] =
     { "auxv", handle_qxfer_auxv },
     { "btrace", handle_qxfer_btrace },
     { "btrace-conf", handle_qxfer_btrace_conf },
+    { "exec-file", handle_qxfer_exec_file},
     { "fdpic", handle_qxfer_fdpic},
     { "features", handle_qxfer_features },
     { "libraries", handle_qxfer_libraries },
@@ -2082,6 +2119,9 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
       if (target_supports_stopped_by_hw_breakpoint ())
 	strcat (own_buf, ";hwbreak+");
 
+      if (the_target->pid_to_exec_file != NULL)
+	strcat (own_buf, ";qXfer:exec-file:read+");
+
       return;
     }
 
diff --git a/gdb/gdbserver/target.h b/gdb/gdbserver/target.h
index 126c861..dc7802d 100644
--- a/gdb/gdbserver/target.h
+++ b/gdb/gdbserver/target.h
@@ -394,6 +394,14 @@ struct target_ops
 
   /* Return true if target supports range stepping.  */
   int (*supports_range_stepping) (void);
+
+  /* Return the pathname of the executable file that was run to
+     create the process PID.  If the executable file cannot be
+     determined, NULL is returned.  Otherwise, a pointer to a
+     character string containing the pathname is returned.  This
+     string should be copied into a buffer by the client if the
+     string will not be immediately used, or if it must persist.  */
+  char *(*pid_to_exec_file) (int pid);
 };
 
 extern struct target_ops *the_target;
-- 
1.7.1


  parent reply	other threads:[~2015-04-01 11:30 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-01 11:22 [PATCH 0/7] Do not require "file" commands for remote targets Gary Benson
2015-04-01 11:22 ` [PATCH 3/7] Use gdb_sysroot for main executable on attach Gary Benson
2015-04-01 14:53   ` Eli Zaretskii
2015-04-15 12:45     ` Gary Benson
2015-04-15 10:43   ` Pedro Alves
2015-04-01 11:22 ` [PATCH 1/7] Introduce exec_file_locate_attach Gary Benson
2015-04-01 11:22 ` [PATCH 2/7] Introduce exec_file_find Gary Benson
2015-04-01 11:27 ` [PATCH 4/7] Introduce linux_pid_to_exec_file Gary Benson
2015-04-06 16:41   ` Doug Evans
2015-04-07  9:07     ` Gary Benson
2015-04-08  3:15       ` Doug Evans
2015-04-08  8:06         ` Gary Benson
2015-04-15  9:37   ` Pedro Alves
2015-04-15 13:14     ` [PATCH 4/7 v2] Introduce linux_proc_pid_to_exec_file Gary Benson
2015-04-15 16:01       ` Pedro Alves
2015-04-01 11:29 ` [PATCH 5/7] Implement remote_pid_to_exec_file using qXfer:exec-file:read Gary Benson
2015-04-01 14:55   ` Eli Zaretskii
2015-04-06 17:00     ` Doug Evans
2015-04-06 17:21       ` Eli Zaretskii
2015-04-06 21:57         ` Doug Evans
2015-04-07  6:09           ` Eli Zaretskii
2015-04-07  9:08         ` Gary Benson
2015-04-08  1:57           ` Doug Evans
2015-04-08  6:00             ` Eli Zaretskii
2015-04-01 11:30 ` Gary Benson [this message]
2015-04-06 17:11   ` [PATCH 6/7] Implement qXfer:exec-file:read in gdbserver Doug Evans
2015-04-07  9:19     ` Gary Benson
2015-04-17 23:43   ` Possible regression on gdb.base/attach.exp when using native-extended-gdbserver (was: Re: [PATCH 6/7] Implement qXfer:exec-file:read in gdbserver) Sergio Durigan Junior
2015-04-20  9:13     ` Gary Benson
2015-04-20 10:41     ` [OB PATCH] Fix three test failures with extended remote targets Gary Benson
2015-04-01 11:39 ` [PATCH 7/7] Access executable from remote system when first inferior appears Gary Benson
2015-04-15 10:24   ` Pedro Alves
2015-04-15 13:56     ` Gary Benson
2015-04-15 14:06       ` Gary Benson
2015-04-15 16:15         ` Pedro Alves
2015-04-15 16:09       ` Pedro Alves
2015-04-16  8:23         ` Gary Benson
2015-04-15 16:13       ` Pedro Alves
2015-04-16  9:30         ` Gary Benson
2015-04-16  9:53           ` Pedro Alves
2015-04-16 11:47             ` Gary Benson
2015-04-16 15:06             ` Eli Zaretskii
2015-04-16 15:23               ` Pedro Alves
2015-04-16 15:05           ` Eli Zaretskii
2015-04-16 19:34             ` Gary Benson
2015-04-15 16:21       ` Eli Zaretskii
2015-04-15 10:47 ` [PATCH 0/7] Do not require "file" commands for remote targets Pedro Alves
2015-04-15 12:02   ` Gary Benson
2015-04-15 12:16     ` Pedro Alves
2015-04-15 14:16   ` Gary Benson
2015-04-15 16:20     ` Pedro Alves
2015-04-17  9:01       ` Gary Benson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1427887341-31819-7-git-send-email-gbenson@redhat.com \
    --to=gbenson@redhat.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox