On Fri, Mar 20, 2020 at 2:17 AM Alex Bennée <alex.ben...@linaro.org> wrote:

>
> Lirong Yuan <yua...@google.com> writes:
>
> > On Fri, Mar 6, 2020 at 5:01 PM Lirong Yuan <yua...@google.com> 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 <yua...@google.com>
> >> ---
> >>  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