qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] gdbstub: Support AUXV packet for debugging PIE executables.
@ 2014-11-23 13:28 Wei-cheng, Wang
  2014-11-27 16:57 ` Paolo Bonzini
  0 siblings, 1 reply; 3+ messages in thread
From: Wei-cheng, Wang @ 2014-11-23 13:28 UTC (permalink / raw)
  To: qemu-devel

Hi,

This patch adds support for sending AUXV packet.
This is required for debugging Linux position independent executables.
Otherwise, gdb client cannot find out where the executable is loaded.

Signed-off-by: Wei-cheng, Wang <cole945@gmail.com>
---
  gdbstub.c | 41 +++++++++++++++++++++++++++++++++++++++++
  1 file changed, 41 insertions(+)

diff --git a/gdbstub.c b/gdbstub.c
index d1b5afd..30f3bbc 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -1127,6 +1127,7 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf)
              if (cc->gdb_core_xml_file != NULL) {
                  pstrcat(buf, sizeof(buf), ";qXfer:features:read+");
              }
+            pstrcat(buf, sizeof(buf), ";qXfer:auxv:read+");
              put_packet(s, buf);
              break;
          }
@@ -1173,6 +1174,46 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf)
              put_packet_binary(s, buf, len + 1);
              break;
          }
+#ifdef CONFIG_USER_ONLY
+        if (strncmp(p, "Xfer:auxv:read:", 15) == 0) {
+            TaskState *ts = s->c_cpu->opaque;
+            target_ulong auxv = ts->info->saved_auxv;
+            target_ulong auxv_len = ts->info->auxv_len;
+            char *ptr;
+
+            p += 15;
+            while (*p && *p != ':')
+                p++;
+            p++;
+
+            addr = strtoul(p, (char **)&p, 16);
+            if (*p == ',')
+                p++;
+            len = strtoul(p, (char **)&p, 16);
+
+            ptr = lock_user(VERIFY_READ, auxv, auxv_len, 0);
+            if (ptr == NULL) {
+                break;
+            }
+
+            if (addr > len) {
+                snprintf(buf, sizeof(buf), "E00");
+                put_packet(s, buf);
+                break;
+            }
+            if (len > (MAX_PACKET_LENGTH - 5) / 2)
+                len = (MAX_PACKET_LENGTH - 5) / 2;
+            if (len < auxv_len - addr) {
+                buf[0] = 'm';
+                len = memtox(buf + 1, ptr + addr, len);
+            } else {
+                buf[0] = 'l';
+                len = memtox(buf + 1, ptr + addr, auxv_len - addr);
+            }
+            put_packet_binary(s, buf, len + 1);
+            unlock_user(ptr, auxv, len);
+        }
+#endif /* !CONFIG_USER_ONLY */
          /* Unrecognised 'q' command.  */
          goto unknown_command;

-- 
1.9.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-12-25 17:31 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-23 13:28 [Qemu-devel] [PATCH] gdbstub: Support AUXV packet for debugging PIE executables Wei-cheng, Wang
2014-11-27 16:57 ` Paolo Bonzini
2014-12-25 17:31   ` Wei-cheng Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).