target/xtensa fixes for 3.1
cover target/xtensa fixes for 3.1
Hello,
the following two patches fix gdbserver register counting for xtensa-softmmu and xtensa-linux and drops explicit register counters from DC232B and DC233C core configurations.
Max Filippov (2):
target/xtensa: gdbstub fix register counting target/xtensa: drop num_[core_]regs from dc232b/dc233c configs
target/xtensa/core-dc232b.c | 2 -- target/xtensa/core-dc232b/gdb-config.inc.c | 1 + target/xtensa/core-dc233c.c | 2 -- target/xtensa/core-dc233c/gdb-config.inc.c | 1 + target/xtensa/gdbstub.c | 11 ++++++++--- 5 files changed, 10 insertions(+), 7 deletions(-)
Signature · 1 line
2.11.0
PATCH 1/2 target/xtensa: gdbstub fix register counting
In order to communicate correctly with gdb xtensa gdbstub must provide expected number of registers in 'g' packet response. xtensa-elf-gdb expects both nonprivileged and privileged registers. xtensa-linux-gdb only expects nonprivileged registers. gdb only counts one contiguous stretch of registers, do the same for the core registers in the xtensa_count_regs.
With this change qemu-system-xtensa is able to communicate with all xtensa-elf-gdb versions (versions prior to 8.2 require overlay fixup), and qemu-xtensa is able to communicate with all xtensa-linux-gdb versions, except 8.2.
--- target/xtensa/gdbstub.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
target/xtensa/gdbstub.c +8 -3
@@ -45,15 +45,20 @@ void xtensa_count_regs(const XtensaConfig *config, unsigned *n_regs, unsigned *n_core_regs) { unsigned i; +bool count_core_regs = true;for (i =0 ; config->gdb_regmap.reg[i].targno >=0 ; ++i) {if (config->gdb_regmap.reg[i].type != xtRegisterTypeTieState && config->gdb_regmap.reg[i].type != xtRegisterTypeMapped && config->gdb_regmap.reg[i].type != xtRegisterTypeUnmapped) { ++*n_regs; -if ((config->gdb_regmap.reg[i].flags & -XTENSA_REGISTER_FLAGS_PRIVILEGED ) ==0 ) { - ++*n_core_regs; +if (count_core_regs) { +if ((config->gdb_regmap.reg[i].flags & +XTENSA_REGISTER_FLAGS_PRIVILEGED ) ==0 ) { + ++*n_core_regs; + }else { + count_core_regs = false; + } } } }
Signature · 1 line
2.11.0
PATCH 2/2 target/xtensa: drop num_[core_]regs from dc232b/dc233c configs
In reply to Max FilippovNow that xtensa_count_regs does the right thing, remove manual initialization of these fields from the affected configurations and let xtensa_finalize_config initialize them. Add XTREG_END to terminate register lists.
--- target/xtensa/core-dc232b.c | 2 -- target/xtensa/core-dc232b/gdb-config.inc.c | 1 + target/xtensa/core-dc233c.c | 2 -- target/xtensa/core-dc233c/gdb-config.inc.c | 1 + 4 files changed, 2 insertions(+), 4 deletions(-)
target/xtensa/core-dc232b.c +0 -2
@@ -40,8 +40,6 @@ static XtensaConfig dc232b __attribute__((unused)) = { .name = "dc232b", .gdb_regmap = { - .num_regs = 120, - .num_core_regs = 52, .reg = { #include "core-dc232b/gdb-config.inc.c" }
target/xtensa/core-dc232b/gdb-config.inc.c +1 -0
@@ -259,3 +259,4 @@ 0, 0, 0, 0, 0, 0) XTREG(119, 476, 32, 4, 4, 0x000f, 0x0006, -2, 8, 0x0100, a15, 0, 0, 0, 0, 0, 0) +XTREG_END
target/xtensa/core-dc233c.c +0 -2
@@ -40,8 +40,6 @@ static XtensaConfig dc233c __attribute__((unused)) = { .name = "dc233c", .gdb_regmap = { - .num_regs = 121, - .num_core_regs = 52, .reg = { #include "core-dc233c/gdb-config.inc.c" }
target/xtensa/core-dc233c/gdb-config.inc.c +1 -0
@@ -143,3 +143,4 @@ XTREG(117, 468, 32, 4, 4, 0x000c, 0x0006, -2, 8, 0x0100, a12, 0, 0, 0, 0 XTREG(118, 472, 32, 4, 4, 0x000d, 0x0006, -2, 8, 0x0100, a13, 0, 0, 0, 0, 0, 0) XTREG(119, 476, 32, 4, 4, 0x000e, 0x0006, -2, 8, 0x0100, a14, 0, 0, 0, 0, 0, 0)XTREG (120 ,480 ,32 ,4 ,4 ,0x000f ,0x0006 ,-2 ,8 ,0x0100 , a15,0 ,0 ,0 ,0 ,0 ,0 ) +XTREG_END
Signature · 1 line
2.11.0