qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] gdbstub: add support to Xfer:auxv:read: packet


From: Lirong Yuan
Subject: Re: [PATCH] gdbstub: add support to Xfer:auxv:read: packet
Date: Fri, 20 Mar 2020 16:56:52 -0700


On Fri, Mar 20, 2020 at 2:17 AM Alex Bennée <address@hidden> wrote:

Lirong Yuan <address@hidden> writes:

> On Fri, Mar 6, 2020 at 5:01 PM Lirong Yuan <address@hidden> wrote:
>
>> This allows gdb to access the target’s auxiliary vector,
>> which can be helpful for telling system libraries important details
>> about the hardware, operating system, and process.
>>
>> Signed-off-by: Lirong Yuan <address@hidden>
>> ---
>>  gdbstub.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 55 insertions(+)
>>
>> diff --git a/gdbstub.c b/gdbstub.c
>> index 22a2d630cd..a946af7007 100644
>> --- a/gdbstub.c
>> +++ b/gdbstub.c
>> @@ -2105,6 +2105,12 @@ static void handle_query_supported(GdbCmdContext
>> *gdb_ctx, void *user_ctx)
>>          pstrcat(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf),
>>                  ";qXfer:features:read+");
>>      }
>> +#ifdef CONFIG_USER_ONLY
>> +    if (gdb_ctx->s->c_cpu->opaque) {
>> +        pstrcat(gdb_ctx->str_buf, sizeof(gdb_ctx->str_buf),
>> +                ";qXfer:auxv:read+");
>> +    }
>> +#endif
>>
>>      if (gdb_ctx->num_params &&
>>          strstr(gdb_ctx->params[0].data, "multiprocess+")) {
>> @@ -2166,6 +2172,47 @@ static void
>> handle_query_xfer_features(GdbCmdContext *gdb_ctx, void *user_ctx)
>>      put_packet_binary(gdb_ctx->s, gdb_ctx->str_buf, len + 1, true);
>>  }
>>
>> +#ifdef CONFIG_USER_ONLY
>> +static void handle_query_xfer_auxv(GdbCmdContext *gdb_ctx, void *user_ctx)
>> +{
>> +    TaskState *ts;
>> +    unsigned long offset, len, saved_auxv, auxv_len;
>> +    const char *mem;
>> +
>> +    if (gdb_ctx->num_params < 2) {
>> +        put_packet(gdb_ctx->s, "E22");
>> +        return;
>> +    }
>> +
>> +    offset = gdb_ctx->params[0].val_ul;
>> +    len = gdb_ctx->params[1].val_ul;
>> +
>> +    ts = gdb_ctx->s->c_cpu->opaque;
>> +    saved_auxv = ts->info->saved_auxv;
>> +    auxv_len = ts->info->auxv_len;
>> +    mem = (const char *)(saved_auxv + offset);
>> +
>> +    if (offset >= auxv_len) {
>> +        put_packet(gdb_ctx->s, "E22");
>> +        return;
>> +    }
>> +
>> +    if (len > (MAX_PACKET_LENGTH - 5) / 2) {
>> +        len = (MAX_PACKET_LENGTH - 5) / 2;
>> +    }
>> +
>> +    if (len < auxv_len - offset) {
>> +        gdb_ctx->str_buf[0] = 'm';
>> +        len = memtox(gdb_ctx->str_buf + 1, mem, len);
>> +    } else {
>> +        gdb_ctx->str_buf[0] = 'l';
>> +        len = memtox(gdb_ctx->str_buf + 1, mem, auxv_len - offset);
>> +    }
>> +
>> +    put_packet_binary(gdb_ctx->s, gdb_ctx->str_buf, len + 1, true);
>> +}
>> +#endif
>> +
>>  static void handle_query_attached(GdbCmdContext *gdb_ctx, void *user_ctx)
>>  {
>>      put_packet(gdb_ctx->s, GDB_ATTACHED);
>> @@ -2271,6 +2318,14 @@ static GdbCmdParseEntry gdb_gen_query_table[] = {
>>          .cmd_startswith = 1,
>>          .schema = "s:l,l0"
>>      },
>> +#ifdef CONFIG_USER_ONLY
>> +    {
>> +        .handler = handle_query_xfer_auxv,
>> +        .cmd = "Xfer:auxv:read:",
>> +        .cmd_startswith = 1,
>> +        .schema = "l,l0"
>> +    },
>> +#endif
>>      {
>>          .handler = handle_query_attached,
>>          .cmd = "Attached:",
>> --
>> 2.25.1.481.gfbce0eb801-goog
>>
>>
> Friendly ping~

Sorry I missed this on my radar. There was a minor re-factor of gdbstub
that was just merged which will mean this patch needs a re-base to use
g_string_* functions to expand stings.

Also we have some simple gdbstub tests now - could we come up with a
multiarch gdbstub test to verify this is working properly?

>
> Link to the patchwork page:
> http://patchwork.ozlabs.org/patch/1250727/


--
Alex Bennée

Hi Alex,

For sure, I will re-base this patch to use g_string_* functions.

Currently we are using qemu aarch64. I am not sure how to do this yet, but I could try to add something to 
https://github.com/qemu/qemu/tree/master/tests/tcg/aarch64/gdbstub

Does this sound good?

Thanks!
Lirong


reply via email to

[Prev in Thread] Current Thread [Next in Thread]