qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Richard Henderson" <richard.henderson@linaro.org>,
	qemu-arm@nongnu.org, "Alex Bennée" <alex.bennee@linaro.org>,
	"Peter Maydell" <peter.maydell@linaro.org>
Subject: [PATCH  v1 15/28] target/arm: prepare for multiple dynamic XMLs
Date: Mon, 16 Mar 2020 17:21:42 +0000	[thread overview]
Message-ID: <20200316172155.971-16-alex.bennee@linaro.org> (raw)
In-Reply-To: <20200316172155.971-1-alex.bennee@linaro.org>

We will want to generate similar dynamic XML for gdbstub support of
SVE registers (the upstream doesn't use XML). To that end lightly
rename a few things to make the distinction.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/arm/cpu.h     | 20 +++++++++++++-------
 target/arm/gdbstub.c | 30 +++++++++++++++---------------
 target/arm/helper.c  |  4 ++--
 3 files changed, 30 insertions(+), 24 deletions(-)

diff --git a/target/arm/cpu.h b/target/arm/cpu.h
index 4ab2cbfd417..0ab82c987c3 100644
--- a/target/arm/cpu.h
+++ b/target/arm/cpu.h
@@ -128,14 +128,20 @@ enum {
 /**
  * DynamicGDBXMLInfo:
  * @desc: Contains the XML descriptions.
- * @num_cpregs: Number of the Coprocessor registers seen by GDB.
- * @cpregs_keys: Array that contains the corresponding Key of
- * a given cpreg with the same order of the cpreg in the XML description.
+ * @num: Number of the registers in this XML seen by GDB.
+ * @data: A union with data specific to the set of registers
+ *    @cpregs_keys: Array that contains the corresponding Key of
+ *                  a given cpreg with the same order of the cpreg
+ *                  in the XML description.
  */
 typedef struct DynamicGDBXMLInfo {
     char *desc;
-    int num_cpregs;
-    uint32_t *cpregs_keys;
+    int num;
+    union {
+        struct {
+            uint32_t *keys;
+        } cpregs;
+    } data;
 } DynamicGDBXMLInfo;
 
 /* CPU state for each instance of a generic timer (in cp15 c14) */
@@ -749,7 +755,7 @@ struct ARMCPU {
     uint64_t *cpreg_vmstate_values;
     int32_t cpreg_vmstate_array_len;
 
-    DynamicGDBXMLInfo dyn_xml;
+    DynamicGDBXMLInfo dyn_sysreg_xml;
 
     /* Timers used by the generic (architected) timer */
     QEMUTimer *gt_timer[NUM_GTIMERS];
@@ -974,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_xml(CPUState *cpu);
+int arm_gen_dynamic_sysreg_xml(CPUState *cpu);
 
 /* 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 4557775d245..1f68ab98c3b 100644
--- a/target/arm/gdbstub.c
+++ b/target/arm/gdbstub.c
@@ -106,15 +106,15 @@ int arm_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
     return 0;
 }
 
-static void arm_gen_one_xml_reg_tag(GString *s, DynamicGDBXMLInfo *dyn_xml,
-                                    ARMCPRegInfo *ri, uint32_t ri_key,
-                                    int bitsize)
+static void arm_gen_one_xml_sysreg_tag(GString *s, DynamicGDBXMLInfo *dyn_xml,
+                                       ARMCPRegInfo *ri, uint32_t ri_key,
+                                       int bitsize)
 {
     g_string_append_printf(s, "<reg name=\"%s\"", ri->name);
     g_string_append_printf(s, " bitsize=\"%d\"", bitsize);
     g_string_append_printf(s, " group=\"cp_regs\"/>");
-    dyn_xml->num_cpregs++;
-    dyn_xml->cpregs_keys[dyn_xml->num_cpregs - 1] = ri_key;
+    dyn_xml->data.cpregs.keys[dyn_xml->num] = ri_key;
+    dyn_xml->num++;
 }
 
 static void arm_register_sysreg_for_xml(gpointer key, gpointer value,
@@ -126,12 +126,12 @@ static void arm_register_sysreg_for_xml(gpointer key, gpointer value,
     GString *s = param->s;
     ARMCPU *cpu = ARM_CPU(param->cs);
     CPUARMState *env = &cpu->env;
-    DynamicGDBXMLInfo *dyn_xml = &cpu->dyn_xml;
+    DynamicGDBXMLInfo *dyn_xml = &cpu->dyn_sysreg_xml;
 
     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_reg_tag(s , dyn_xml, ri, ri_key, 64);
+                arm_gen_one_xml_sysreg_tag(s , dyn_xml, ri, ri_key, 64);
             }
         } else {
             if (ri->state == ARM_CP_STATE_AA32) {
@@ -140,30 +140,30 @@ static void arm_register_sysreg_for_xml(gpointer key, gpointer value,
                     return;
                 }
                 if (ri->type & ARM_CP_64BIT) {
-                    arm_gen_one_xml_reg_tag(s , dyn_xml, ri, ri_key, 64);
+                    arm_gen_one_xml_sysreg_tag(s , dyn_xml, ri, ri_key, 64);
                 } else {
-                    arm_gen_one_xml_reg_tag(s , dyn_xml, ri, ri_key, 32);
+                    arm_gen_one_xml_sysreg_tag(s , dyn_xml, ri, ri_key, 32);
                 }
             }
         }
     }
 }
 
-int arm_gen_dynamic_xml(CPUState *cs)
+int arm_gen_dynamic_sysreg_xml(CPUState *cs)
 {
     ARMCPU *cpu = ARM_CPU(cs);
     GString *s = g_string_new(NULL);
     RegisterSysregXmlParam param = {cs, s};
 
-    cpu->dyn_xml.num_cpregs = 0;
-    cpu->dyn_xml.cpregs_keys = g_new(uint32_t, g_hash_table_size(cpu->cp_regs));
+    cpu->dyn_sysreg_xml.num = 0;
+    cpu->dyn_sysreg_xml.data.cpregs.keys = g_new(uint32_t, g_hash_table_size(cpu->cp_regs));
     g_string_printf(s, "<?xml version=\"1.0\"?>");
     g_string_append_printf(s, "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">");
     g_string_append_printf(s, "<feature name=\"org.qemu.gdb.arm.sys.regs\">");
     g_hash_table_foreach(cpu->cp_regs, arm_register_sysreg_for_xml, &param);
     g_string_append_printf(s, "</feature>");
-    cpu->dyn_xml.desc = g_string_free(s, false);
-    return cpu->dyn_xml.num_cpregs;
+    cpu->dyn_sysreg_xml.desc = g_string_free(s, false);
+    return cpu->dyn_sysreg_xml.num;
 }
 
 const char *arm_gdb_get_dynamic_xml(CPUState *cs, const char *xmlname)
@@ -171,7 +171,7 @@ const char *arm_gdb_get_dynamic_xml(CPUState *cs, const char *xmlname)
     ARMCPU *cpu = ARM_CPU(cs);
 
     if (strcmp(xmlname, "system-registers.xml") == 0) {
-        return cpu->dyn_xml.desc;
+        return cpu->dyn_sysreg_xml.desc;
     }
     return NULL;
 }
diff --git a/target/arm/helper.c b/target/arm/helper.c
index c0e1ba17272..b0e2a85b005 100644
--- a/target/arm/helper.c
+++ b/target/arm/helper.c
@@ -208,7 +208,7 @@ static int arm_gdb_get_sysreg(CPUARMState *env, GByteArray *buf, int reg)
     const ARMCPRegInfo *ri;
     uint32_t key;
 
-    key = cpu->dyn_xml.cpregs_keys[reg];
+    key = cpu->dyn_sysreg_xml.data.cpregs.keys[reg];
     ri = get_arm_cp_reginfo(cpu->cp_regs, key);
     if (ri) {
         if (cpreg_field_is_64bit(ri)) {
@@ -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_xml(cs),
+                             arm_gen_dynamic_sysreg_xml(cs),
                              "system-registers.xml", 0);
 }
 
-- 
2.20.1



  parent reply	other threads:[~2020-03-16 18:14 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-16 17:21 [PATCH v1 00/28 for 5.0] testing and gdbstub Alex Bennée
2020-03-16 17:21 ` [PATCH v1 01/28] tests/docker: Install tools to cross-debug and build Linux kernels Alex Bennée
2020-03-16 17:21 ` [PATCH v1 02/28] tests/docker: Update VirGL git repository URL Alex Bennée
2020-03-16 17:21 ` [PATCH v1 03/28] tests/docker: Remove obsolete VirGL --with-glx configure option Alex Bennée
2020-03-16 17:21 ` [PATCH v1 04/28] tests/docker: Update VirGL to v0.8.0 Alex Bennée
2020-03-16 17:21 ` [PATCH v1 05/28] travis.yml: Set G_MESSAGES_DEBUG do report GLib errors Alex Bennée
2020-03-16 17:21 ` [PATCH v1 06/28] gdbstub: make GDBState static and have common init function Alex Bennée
2020-03-16 17:21 ` [PATCH v1 07/28] gdbstub: stop passing GDBState * around and use global Alex Bennée
2020-03-16 17:21 ` [PATCH v1 08/28] gdbstub: move str_buf to GDBState and use GString Alex Bennée
2020-03-16 17:21 ` [PATCH v1 09/28] gdbstub: move mem_buf to GDBState and use GByteArray Alex Bennée
2020-03-16 17:21 ` [PATCH v1 10/28] gdbstub: add helper for 128 bit registers Alex Bennée
2020-03-16 17:21 ` [PATCH v1 11/28] target/arm: use gdb_get_reg helpers Alex Bennée
2020-03-16 17:21 ` [PATCH v1 12/28] target/m68k: " Alex Bennée
2020-03-17  9:48   ` Philippe Mathieu-Daudé
2020-03-16 17:21 ` [PATCH v1 13/28] target/i386: " Alex Bennée
2020-03-17  9:53   ` Philippe Mathieu-Daudé
2020-03-17 10:05     ` Philippe Mathieu-Daudé
2020-03-16 17:21 ` [PATCH v1 14/28] gdbstub: extend GByteArray to read register helpers Alex Bennée
2020-03-16 17:21 ` Alex Bennée [this message]
2020-03-16 17:21 ` [PATCH v1 16/28] target/arm: explicitly encode regnum in our XML Alex Bennée
2020-03-16 17:21 ` [PATCH v1 17/28] target/arm: default SVE length to 64 bytes for linux-user Alex Bennée
2020-03-16 17:21 ` [PATCH v1 18/28] target/arm: generate xml description of our SVE registers Alex Bennée
2020-03-16 17:21 ` [PATCH v1 19/28] target/arm: don't bother with id_aa64pfr0_read for USER_ONLY Alex Bennée
2020-03-17  9:56   ` Philippe Mathieu-Daudé
2020-03-16 17:21 ` [PATCH v1 20/28] tests/tcg/aarch64: userspace system register test Alex Bennée
2020-03-17 10:24   ` Philippe Mathieu-Daudé
2020-03-17 11:03     ` Alex Bennée
2020-03-17 11:43       ` Philippe Mathieu-Daudé
2020-03-16 17:21 ` [PATCH v1 21/28] configure: allow user to specify what gdb to use Alex Bennée
2020-03-16 18:27   ` Peter Maydell
2020-03-17  9:46     ` Alex Bennée
2020-03-16 17:21 ` [PATCH v1 22/28] tests/guest-debug: add a simple test runner Alex Bennée
2020-03-17 10:30   ` Philippe Mathieu-Daudé
2020-03-16 17:21 ` [PATCH v1 23/28] tests/tcg/aarch64: add a gdbstub testcase for SVE registers Alex Bennée
2020-03-17 10:30   ` Philippe Mathieu-Daudé
2020-03-16 17:21 ` [PATCH v1 24/28] tests/tcg/aarch64: add SVE iotcl test Alex Bennée
2020-03-17 10:29   ` Philippe Mathieu-Daudé
2020-03-17 10:45     ` Aleksandar Markovic
2020-03-17 10:49       ` Peter Maydell
2020-03-17 13:57         ` Alex Bennée
2020-03-17 13:40     ` Aleksandar Markovic
2020-03-16 17:21 ` [PATCH v1 25/28] tests/tcg/aarch64: add test-sve-ioctl guest-debug test Alex Bennée
2020-03-16 17:21 ` [PATCH v1 26/28] gdbstub: change GDBState.last_packet to GByteArray Alex Bennée
2020-03-16 17:21 ` [PATCH v1 27/28] gdbstub: do not split gdb_monitor_write payload Alex Bennée
2020-03-16 17:21 ` [PATCH v1 28/28] gdbstub: Fix single-step issue by confirming 'vContSupported+' feature to gdb Alex Bennée
2020-03-16 21:26 ` [PATCH v1 00/28 for 5.0] testing and gdbstub no-reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200316172155.971-16-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).