From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43567) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y4CGS-00034H-TI for qemu-devel@nongnu.org; Thu, 25 Dec 2014 12:31:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Y4CGP-0000bE-Oe for qemu-devel@nongnu.org; Thu, 25 Dec 2014 12:31:56 -0500 Received: from mail-pd0-x235.google.com ([2607:f8b0:400e:c02::235]:49345) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y4CGP-0000b2-Go for qemu-devel@nongnu.org; Thu, 25 Dec 2014 12:31:53 -0500 Received: by mail-pd0-f181.google.com with SMTP id v10so11864638pde.40 for ; Thu, 25 Dec 2014 09:31:51 -0800 (PST) Message-ID: <549C4A06.4070607@gmail.com> Date: Fri, 26 Dec 2014 01:31:50 +0800 From: Wei-cheng Wang MIME-Version: 1.0 References: <5471E103.6080109@gmail.com> <547757ED.2080206@redhat.com> In-Reply-To: <547757ED.2080206@redhat.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] gdbstub: Support AUXV packet for debugging PIE executables. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini , riku.voipio@linaro.org, qemu-devel Ping :) Thanks, Wei-cheng On 11/28/2014 12:57 AM, Paolo Bonzini wrote: > CCing Riku Voipio for a review. > > Paolo > > On 23/11/2014 14:28, Wei-cheng, Wang wrote: >> 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 >> --- >> 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; >>