Akihiko Odaki <akihiko.od...@daynix.com> writes:
> gdb_find_feature() and gdb_find_feature_register() find registers. > gdb_read_register() actually reads registers. > > Signed-off-by: Akihiko Odaki <akihiko.od...@daynix.com> > --- > include/exec/gdbstub.h | 5 +++++ > gdbstub/gdbstub.c | 31 ++++++++++++++++++++++++++++++- > 2 files changed, 35 insertions(+), 1 deletion(-) > > diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h > index 346151d0f2..308b5c266a 100644 > --- a/include/exec/gdbstub.h > +++ b/include/exec/gdbstub.h > @@ -74,6 +74,11 @@ void gdb_feature_builder_end(const GDBFeatureBuilder > *builder); > > const GDBFeature *gdb_find_static_feature(const char *xmlname); > > +int gdb_find_feature(CPUState *cpu, const char *name); > +int gdb_find_feature_register(CPUState *cpu, int feature, const char *name); > + > +int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg); > + Can we try to add kdoc comments to the new external facing APIs please. I should have mentioned that for previous cases as well. > void gdb_set_stop_cpu(CPUState *cpu); > > /* in gdbstub-xml.c, generated by scripts/feature_to_c.py */ > diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c > index fade023559..0b64b93960 100644 > --- a/gdbstub/gdbstub.c > +++ b/gdbstub/gdbstub.c > @@ -490,7 +490,36 @@ const GDBFeature *gdb_find_static_feature(const char > *xmlname) > g_assert_not_reached(); > } > > -static int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg) > +int gdb_find_feature(CPUState *cpu, const char *name) > +{ > + GDBRegisterState *r; > + > + for (guint i = 0; i < cpu->gdb_regs->len; i++) { > + r = &g_array_index(cpu->gdb_regs, GDBRegisterState, i); > + if (!strcmp(name, r->feature->name)) { > + return i; > + } > + } > + > + return -1; > +} > + > +int gdb_find_feature_register(CPUState *cpu, int feature, const char *name) > +{ > + GDBRegisterState *r; > + > + r = &g_array_index(cpu->gdb_regs, GDBRegisterState, feature); > + > + for (int i = 0; i < r->feature->num_regs; i++) { > + if (r->feature->regs[i] && !strcmp(name, r->feature->regs[i])) { > + return r->base_reg + i; > + } > + } > + > + return -1; > +} > + > +int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg) > { > CPUClass *cc = CPU_GET_CLASS(cpu); > GDBRegisterState *r; -- Alex Bennée Virtualisation Tech Lead @ Linaro