[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 16/28] target/arm: explicitly encode regnum in our XML
From: |
Alex Bennée |
Subject: |
[PULL 16/28] target/arm: explicitly encode regnum in our XML |
Date: |
Tue, 17 Mar 2020 17:50:41 +0000 |
This is described as optional but I'm not convinced of the numbering
when multiple target fragments are sent.
Signed-off-by: Alex Bennée <address@hidden>
Reviewed-by: Richard Henderson <address@hidden>
Message-Id: <address@hidden>
diff --git a/target/arm/cpu.h b/target/arm/cpu.h
index 0ab82c987c3..fbfd73a7b5b 100644
--- a/target/arm/cpu.h
+++ b/target/arm/cpu.h
@@ -980,7 +980,7 @@ int arm_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf,
int reg);
/* Dynamically generates for gdb stub an XML description of the sysregs from
* the cp_regs hashtable. Returns the registered sysregs number.
*/
-int arm_gen_dynamic_sysreg_xml(CPUState *cpu);
+int arm_gen_dynamic_sysreg_xml(CPUState *cpu, int base_reg);
/* Returns the dynamically generated XML for the gdb stub.
* Returns a pointer to the XML contents for the specified XML file or NULL
diff --git a/target/arm/gdbstub.c b/target/arm/gdbstub.c
index 1f68ab98c3b..69c35462a63 100644
--- a/target/arm/gdbstub.c
+++ b/target/arm/gdbstub.c
@@ -24,6 +24,7 @@
typedef struct RegisterSysregXmlParam {
CPUState *cs;
GString *s;
+ int n;
} RegisterSysregXmlParam;
/* Old gdb always expect FPA registers. Newer (xml-aware) gdb only expect
@@ -108,10 +109,11 @@ int arm_cpu_gdb_write_register(CPUState *cs, uint8_t
*mem_buf, int n)
static void arm_gen_one_xml_sysreg_tag(GString *s, DynamicGDBXMLInfo *dyn_xml,
ARMCPRegInfo *ri, uint32_t ri_key,
- int bitsize)
+ int bitsize, int regnum)
{
g_string_append_printf(s, "<reg name=\"%s\"", ri->name);
g_string_append_printf(s, " bitsize=\"%d\"", bitsize);
+ g_string_append_printf(s, " regnum=\"%d\"", regnum);
g_string_append_printf(s, " group=\"cp_regs\"/>");
dyn_xml->data.cpregs.keys[dyn_xml->num] = ri_key;
dyn_xml->num++;
@@ -131,7 +133,8 @@ static void arm_register_sysreg_for_xml(gpointer key,
gpointer value,
if (!(ri->type & (ARM_CP_NO_RAW | ARM_CP_NO_GDB))) {
if (arm_feature(env, ARM_FEATURE_AARCH64)) {
if (ri->state == ARM_CP_STATE_AA64) {
- arm_gen_one_xml_sysreg_tag(s , dyn_xml, ri, ri_key, 64);
+ arm_gen_one_xml_sysreg_tag(s , dyn_xml, ri, ri_key, 64,
+ param->n++);
}
} else {
if (ri->state == ARM_CP_STATE_AA32) {
@@ -140,20 +143,22 @@ static void arm_register_sysreg_for_xml(gpointer key,
gpointer value,
return;
}
if (ri->type & ARM_CP_64BIT) {
- arm_gen_one_xml_sysreg_tag(s , dyn_xml, ri, ri_key, 64);
+ arm_gen_one_xml_sysreg_tag(s , dyn_xml, ri, ri_key, 64,
+ param->n++);
} else {
- arm_gen_one_xml_sysreg_tag(s , dyn_xml, ri, ri_key, 32);
+ arm_gen_one_xml_sysreg_tag(s , dyn_xml, ri, ri_key, 32,
+ param->n++);
}
}
}
}
}
-int arm_gen_dynamic_sysreg_xml(CPUState *cs)
+int arm_gen_dynamic_sysreg_xml(CPUState *cs, int base_reg)
{
ARMCPU *cpu = ARM_CPU(cs);
GString *s = g_string_new(NULL);
- RegisterSysregXmlParam param = {cs, s};
+ RegisterSysregXmlParam param = {cs, s, base_reg};
cpu->dyn_sysreg_xml.num = 0;
cpu->dyn_sysreg_xml.data.cpregs.keys = g_new(uint32_t,
g_hash_table_size(cpu->cp_regs));
diff --git a/target/arm/helper.c b/target/arm/helper.c
index b0e2a85b005..90135731353 100644
--- a/target/arm/helper.c
+++ b/target/arm/helper.c
@@ -7973,7 +7973,7 @@ void arm_cpu_register_gdb_regs_for_features(ARMCPU *cpu)
19, "arm-vfp.xml", 0);
}
gdb_register_coprocessor(cs, arm_gdb_get_sysreg, arm_gdb_set_sysreg,
- arm_gen_dynamic_sysreg_xml(cs),
+ arm_gen_dynamic_sysreg_xml(cs, cs->gdb_num_regs),
"system-registers.xml", 0);
}
--
2.20.1
- [PULL 04/28] tests/docker: Update VirGL to v0.8.0, (continued)
- [PULL 04/28] tests/docker: Update VirGL to v0.8.0, Alex Bennée, 2020/03/17
- [PULL 03/28] tests/docker: Remove obsolete VirGL --with-glx configure option, Alex Bennée, 2020/03/17
- [PULL 08/28] gdbstub: move str_buf to GDBState and use GString, Alex Bennée, 2020/03/17
- [PULL 09/28] gdbstub: move mem_buf to GDBState and use GByteArray, Alex Bennée, 2020/03/17
- [PULL 10/28] gdbstub: add helper for 128 bit registers, Alex Bennée, 2020/03/17
- [PULL 06/28] gdbstub: make GDBState static and have common init function, Alex Bennée, 2020/03/17
- [PULL 11/28] target/arm: use gdb_get_reg helpers, Alex Bennée, 2020/03/17
- [PULL 12/28] target/m68k: use gdb_get_reg helpers, Alex Bennée, 2020/03/17
- [PULL 15/28] target/arm: prepare for multiple dynamic XMLs, Alex Bennée, 2020/03/17
- [PULL 25/28] tests/tcg/aarch64: add test-sve-ioctl guest-debug test, Alex Bennée, 2020/03/17
- [PULL 16/28] target/arm: explicitly encode regnum in our XML,
Alex Bennée <=
- [PULL 13/28] target/i386: use gdb_get_reg helpers, Alex Bennée, 2020/03/17
- [PULL 07/28] gdbstub: stop passing GDBState * around and use global, Alex Bennée, 2020/03/17
- [PULL 14/28] gdbstub: extend GByteArray to read register helpers, Alex Bennée, 2020/03/17
- [PULL 23/28] tests/tcg/aarch64: add a gdbstub testcase for SVE registers, Alex Bennée, 2020/03/17
- [PULL 19/28] target/arm: don't bother with id_aa64pfr0_read for USER_ONLY, Alex Bennée, 2020/03/17
- [PULL 27/28] gdbstub: do not split gdb_monitor_write payload, Alex Bennée, 2020/03/17
- [PULL 20/28] tests/tcg/aarch64: userspace system register test, Alex Bennée, 2020/03/17
- [PULL 26/28] gdbstub: change GDBState.last_packet to GByteArray, Alex Bennée, 2020/03/17
- [PULL 18/28] target/arm: generate xml description of our SVE registers, Alex Bennée, 2020/03/17
- [PULL 24/28] tests/tcg/aarch64: add SVE iotcl test, Alex Bennée, 2020/03/17