Jon Doron <ari...@gmail.com> writes:
> Signed-off-by: Jon Doron <ari...@gmail.com> > --- > gdbstub.c | 31 +++++++++++++++++++++++-------- > 1 file changed, 23 insertions(+), 8 deletions(-) > > diff --git a/gdbstub.c b/gdbstub.c > index adfe39b3a3..3478ac778d 100644 > --- a/gdbstub.c > +++ b/gdbstub.c > @@ -1757,6 +1757,21 @@ static void handle_write_all_regs(GdbCmdContext > *gdb_ctx, void *user_ctx) > put_packet(gdb_ctx->s, "OK"); > } > > +static void handle_read_all_regs(GdbCmdContext *gdb_ctx, void *user_ctx) > +{ > + target_ulong addr, len; > + > + cpu_synchronize_state(gdb_ctx->s->g_cpu); > + len = 0; > + for (addr = 0; addr < gdb_ctx->s->g_cpu->gdb_num_g_regs; addr++) { > + len += gdb_read_register(gdb_ctx->s->g_cpu, gdb_ctx->mem_buf + len, > + addr); > + } Again no bounds checking - we get away with it because for hppa: (* 8 128 2) = 2048 Anyway: Reviewed-by: Alex Bennée <alex.ben...@linaro.org> > + > + memtohex(gdb_ctx->str_buf, gdb_ctx->mem_buf, len); > + put_packet(gdb_ctx->s, gdb_ctx->str_buf); > +} > + > static int gdb_handle_packet(GDBState *s, const char *line_buf) > { > CPUState *cpu; > @@ -1764,7 +1779,7 @@ static int gdb_handle_packet(GDBState *s, const char > *line_buf) > CPUClass *cc; > const char *p; > uint32_t pid, tid; > - int ch, reg_size, type, res; > + int ch, type, res; > uint8_t mem_buf[MAX_PACKET_LENGTH]; > char buf[sizeof(mem_buf) + 1 /* trailing NUL */]; > char thread_id[16]; > @@ -1923,14 +1938,14 @@ static int gdb_handle_packet(GDBState *s, const char > *line_buf) > } > break; > case 'g': > - cpu_synchronize_state(s->g_cpu); > - len = 0; > - for (addr = 0; addr < s->g_cpu->gdb_num_g_regs; addr++) { > - reg_size = gdb_read_register(s->g_cpu, mem_buf + len, addr); > - len += reg_size; > + { > + static const GdbCmdParseEntry read_all_regs_cmd_desc = { > + .handler = handle_read_all_regs, > + .cmd = "g", > + .cmd_startswith = 1 > + }; > + cmd_parser = &read_all_regs_cmd_desc; > } > - memtohex(buf, mem_buf, len); > - put_packet(s, buf); > break; > case 'G': > { -- Alex Bennée