Skip to contentSkip to conversation

target/xtensa fixes for 3.1

PATCH New Max Filippov 1 participant 3 messages Nov 20, 2018

lore
Share & tools
lore
#0 lore raw

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
#1 lore raw

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
index c9450914c72d..d43bb190c614 100644
@@ -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
#2 lore raw

PATCH 2/2 target/xtensa: drop num_[core_]regs from dc232b/dc233c configs

In reply to Max Filippov

Now 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
index 71313378409e..7851bcb63687 100644
@@ -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
index 13aba5edecd6..d87168628be8 100644
@@ -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
index d701e3f5de07..8853bfd4d08f 100644
@@ -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
index b632341b28ec..7e8963227fc0 100644
@@ -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