[PATCH v2 10/13] gdbstub: Remove GDBRegisterState::base_reg

Philippe Mathieu-Daudé posted 13 patches 4 weeks ago
Maintainers: Warner Losh <imp@bsdimp.com>, Kyle Evans <kevans@freebsd.org>, Laurent Vivier <laurent@vivier.eu>, Pierrick Bouvier <pierrick.bouvier@linaro.org>, Paolo Bonzini <pbonzini@redhat.com>, Zhao Liu <zhao1.liu@intel.com>, Song Gao <gaosong@loongson.cn>, Bibo Mao <maobibo@loongson.cn>, Jiaxun Yang <jiaxun.yang@flygoat.com>, Palmer Dabbelt <palmer@dabbelt.com>, Alistair Francis <alistair.francis@wdc.com>, Weiwei Li <liwei1518@gmail.com>, Daniel Henrique Barboza <dbarboza@ventanamicro.com>, Liu Zhiwei <zhiwei_liu@linux.alibaba.com>, Thomas Huth <thuth@redhat.com>, "Alex Bennée" <alex.bennee@linaro.org>, "Daniel P. Berrangé" <berrange@redhat.com>, Markus Armbruster <armbru@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, John Snow <jsnow@redhat.com>, Cleber Rosa <crosa@redhat.com>, Peter Maydell <peter.maydell@linaro.org>, Brian Cain <brian.cain@oss.qualcomm.com>, "Edgar E. Iglesias" <edgar.iglesias@gmail.com>, Nicholas Piggin <npiggin@gmail.com>, Chinmay Rath <rathc@linux.ibm.com>, Glenn Miles <milesg@linux.ibm.com>, Richard Henderson <richard.henderson@linaro.org>, Ilya Leoshkevich <iii@linux.ibm.com>, David Hildenbrand <david@kernel.org>, Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>, Artyom Tarasenko <atar4qemu@gmail.com>
There is a newer version of this series
[PATCH v2 10/13] gdbstub: Remove GDBRegisterState::base_reg
Posted by Philippe Mathieu-Daudé 4 weeks ago
@base_reg is always provided by GDBFeature, which
is referenced by GDBRegisterState. Deref and remove
GDBRegisterState::base_reg field.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 gdbstub/gdbstub.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
index 6976f31933f..6abc8a85eb3 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -50,7 +50,6 @@
 #include "internals.h"
 
 typedef struct GDBRegisterState {
-    int base_reg;
     gdb_get_reg_cb get_reg;
     gdb_set_reg_cb set_reg;
     const GDBFeature *feature;
@@ -511,7 +510,7 @@ GArray *gdb_get_register_list(CPUState *cpu)
         for (int i = 0; i < r->feature->num_regs; i++) {
             const char *name = r->feature->regs[i];
             GDBRegDesc desc = {
-                r->base_reg + i,
+                r->feature->base_reg + i,
                 name,
                 r->feature->name
             };
@@ -524,7 +523,8 @@ GArray *gdb_get_register_list(CPUState *cpu)
 
 int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg)
 {
-    GDBRegisterState *r;
+    const GDBRegisterState *r;
+    unsigned base_reg;
 
     if (reg < cpu->cc->gdb_num_core_regs) {
         return cpu->cc->gdb_read_register(cpu, buf, reg);
@@ -532,8 +532,9 @@ int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg)
 
     for (guint i = 0; i < cpu->gdb_regs->len; i++) {
         r = &g_array_index(cpu->gdb_regs, GDBRegisterState, i);
-        if (r->base_reg <= reg && reg < r->base_reg + r->feature->num_regs) {
-            return r->get_reg(cpu, buf, reg - r->base_reg);
+        base_reg = r->feature->base_reg;
+        if (base_reg <= reg && reg < base_reg + r->feature->num_regs) {
+            return r->get_reg(cpu, buf, reg - base_reg);
         }
     }
     return 0;
@@ -541,7 +542,8 @@ int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg)
 
 int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
 {
-    GDBRegisterState *r;
+    const GDBRegisterState *r;
+    unsigned base_reg;
 
     if (reg < cpu->cc->gdb_num_core_regs) {
         return cpu->cc->gdb_write_register(cpu, mem_buf, reg);
@@ -549,8 +551,9 @@ int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
 
     for (guint i = 0; i < cpu->gdb_regs->len; i++) {
         r =  &g_array_index(cpu->gdb_regs, GDBRegisterState, i);
-        if (r->base_reg <= reg && reg < r->base_reg + r->feature->num_regs) {
-            return r->set_reg(cpu, mem_buf, reg - r->base_reg);
+        base_reg = r->feature->base_reg;
+        if (base_reg <= reg && reg < base_reg + r->feature->num_regs) {
+            return r->set_reg(cpu, mem_buf, reg - base_reg);
         }
     }
     return 0;
@@ -561,7 +564,6 @@ static void gdb_register_feature(CPUState *cpu,
                                  const GDBFeature *feature)
 {
     GDBRegisterState s = {
-        .base_reg = feature->base_reg,
         .get_reg = get_reg,
         .set_reg = set_reg,
         .feature = feature
-- 
2.53.0