[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v8 14/19] gdbstub: Expose functions to read registers
From: |
Akihiko Odaki |
Subject: |
[PATCH v8 14/19] gdbstub: Expose functions to read registers |
Date: |
Sat, 16 Sep 2023 17:01:31 +0900 |
gdb_find_feature() and gdb_find_feature_register() find registers.
gdb_read_register() actually reads registers.
Signed-off-by: Akihiko Odaki <akihiko.odaki@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 b2b2675f6f..d73abfbd44 100644
--- a/include/exec/gdbstub.h
+++ b/include/exec/gdbstub.h
@@ -71,6 +71,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);
+
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 c6dd5fcd51..8667f44fc6 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -484,7 +484,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;
--
2.42.0
- [PATCH v8 04/19] target/arm: Use GDBFeature for dynamic XML, (continued)
- [PATCH v8 04/19] target/arm: Use GDBFeature for dynamic XML, Akihiko Odaki, 2023/09/16
- [PATCH v8 05/19] target/ppc: Use GDBFeature for dynamic XML, Akihiko Odaki, 2023/09/16
- [PATCH v8 06/19] target/riscv: Use GDBFeature for dynamic XML, Akihiko Odaki, 2023/09/16
- [PATCH v8 07/19] gdbstub: Use GDBFeature for gdb_register_coprocessor, Akihiko Odaki, 2023/09/16
- [PATCH v8 08/19] gdbstub: Use GDBFeature for GDBRegisterState, Akihiko Odaki, 2023/09/16
- [PATCH v8 10/19] gdbstub: Simplify XML lookup, Akihiko Odaki, 2023/09/16
- [PATCH v8 11/19] gdbstub: Infer number of core registers from XML, Akihiko Odaki, 2023/09/16
- [PATCH v8 09/19] gdbstub: Change gdb_get_reg_cb and gdb_set_reg_cb, Akihiko Odaki, 2023/09/16
- [PATCH v8 12/19] hw/core/cpu: Remove gdb_get_dynamic_xml member, Akihiko Odaki, 2023/09/16
- [PATCH v8 13/19] gdbstub: Add members to identify registers to GDBFeature, Akihiko Odaki, 2023/09/16
- [PATCH v8 14/19] gdbstub: Expose functions to read registers,
Akihiko Odaki <=
- [PATCH v8 15/19] cpu: Call plugin hooks only when ready, Akihiko Odaki, 2023/09/16
- [PATCH v8 17/19] contrib/plugins: Allow to log registers, Akihiko Odaki, 2023/09/16
- [PATCH v8 18/19] plugins: Support C++, Akihiko Odaki, 2023/09/16
- [PATCH v8 19/19] contrib/plugins: Add cc plugin, Akihiko Odaki, 2023/09/16
- [PATCH v8 16/19] plugins: Allow to read registers, Akihiko Odaki, 2023/09/16