public inbox for qemu-devel@nongnu.org
 help / color / mirror / Atom feed
* [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML
@ 2026-03-10 15:53 Philippe Mathieu-Daudé
  2026-03-10 15:53 ` [PATCH v2 01/13] meson: Restrict gdbstub to user/system builds Philippe Mathieu-Daudé
                   ` (13 more replies)
  0 siblings, 14 replies; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

Generic fix for a latent bug reported by Florian:
https://lore.kernel.org/qemu-devel/e44df309-d40d-46f0-88a8-7ac55f9a3634@fhofhammer.de/

Use the 'regnum' XML tag for feature base register index
(after fixing the incorrect m68k FPU ones).

Include patches from "gdbstub: Generate a single gdbstub-xml.c /
gdb_static_features[]".

Philippe Mathieu-Daudé (13):
  meson: Restrict gdbstub to user/system builds
  target/i386/gdbstub: Remove stale comment
  gdbstub: Simplify gdb_init_cpu() logic
  gdbstub: Add trace events for around XML parsing / generation
  gdbstub: Have scripts/feature_to_c.py generate more verbose output
  gdbstub: Make base register explicit in m68k GDB XML files
  gdbstub: Remove @g_pos argument in gdb_register_coprocessor()
  gdbstub: Emit base_register index in GDBFeature entries
  gdbstub: Use GDBFeature::base_reg in gdb_register_feature()
  gdbstub: Remove GDBRegisterState::base_reg
  gdbstub: Remove 'gdb-xml/' directory prefix in TARGET_XML_FILES
  gdbstub: Move gdb-xml/ within gdbstub/
  gdbstub: Generate a single gdbstub-xml.c / gdb_static_features[]

 MAINTAINERS                                   | 19 +++---
 docs/devel/codebase.rst                       |  2 -
 configs/targets/aarch64-bsd-user.mak          |  2 +-
 configs/targets/aarch64-linux-user.mak        |  2 +-
 configs/targets/aarch64-softmmu.mak           |  2 +-
 configs/targets/aarch64_be-linux-user.mak     |  2 +-
 configs/targets/alpha-linux-user.mak          |  2 +-
 configs/targets/alpha-softmmu.mak             |  2 +-
 configs/targets/arm-bsd-user.mak              |  2 +-
 configs/targets/arm-linux-user.mak            |  2 +-
 configs/targets/arm-softmmu.mak               |  2 +-
 configs/targets/armeb-linux-user.mak          |  2 +-
 configs/targets/avr-softmmu.mak               |  2 +-
 configs/targets/hexagon-linux-user.mak        |  2 +-
 configs/targets/i386-bsd-user.mak             |  2 +-
 configs/targets/i386-linux-user.mak           |  2 +-
 configs/targets/i386-softmmu.mak              |  2 +-
 configs/targets/loongarch64-linux-user.mak    |  2 +-
 configs/targets/loongarch64-softmmu.mak       |  2 +-
 configs/targets/m68k-linux-user.mak           |  2 +-
 configs/targets/m68k-softmmu.mak              |  2 +-
 configs/targets/microblaze-linux-user.mak     |  2 +-
 configs/targets/microblaze-softmmu.mak        |  2 +-
 configs/targets/microblazeel-linux-user.mak   |  2 +-
 configs/targets/or1k-linux-user.mak           |  2 +-
 configs/targets/or1k-softmmu.mak              |  2 +-
 configs/targets/ppc-linux-user.mak            |  2 +-
 configs/targets/ppc-softmmu.mak               |  2 +-
 configs/targets/ppc64-linux-user.mak          |  2 +-
 configs/targets/ppc64-softmmu.mak             |  2 +-
 configs/targets/ppc64le-linux-user.mak        |  2 +-
 configs/targets/riscv32-linux-user.mak        |  2 +-
 configs/targets/riscv32-softmmu.mak           |  2 +-
 configs/targets/riscv64-bsd-user.mak          |  2 +-
 configs/targets/riscv64-linux-user.mak        |  2 +-
 configs/targets/riscv64-softmmu.mak           |  2 +-
 configs/targets/rx-softmmu.mak                |  2 +-
 configs/targets/s390x-linux-user.mak          |  2 +-
 configs/targets/s390x-softmmu.mak             |  2 +-
 configs/targets/sparc-linux-user.mak          |  2 +-
 configs/targets/sparc-softmmu.mak             |  2 +-
 configs/targets/sparc32plus-linux-user.mak    |  2 +-
 configs/targets/sparc64-linux-user.mak        |  2 +-
 configs/targets/sparc64-softmmu.mak           |  2 +-
 configs/targets/x86_64-bsd-user.mak           |  2 +-
 configs/targets/x86_64-linux-user.mak         |  2 +-
 configs/targets/x86_64-softmmu.mak            |  2 +-
 meson.build                                   | 12 +---
 include/exec/gdbstub.h                        |  4 +-
 stubs/gdbstub.c => gdbstub/gdb-xml-stub.c     |  0
 gdbstub/gdbstub.c                             | 61 +++++++++++--------
 target/arm/gdbstub.c                          | 21 +++----
 target/arm/gdbstub64.c                        | 19 +++---
 target/hexagon/cpu.c                          |  2 +-
 target/i386/gdbstub.c                         | 12 ++--
 target/loongarch/gdbstub.c                    |  6 +-
 target/m68k/helper.c                          |  4 +-
 target/microblaze/cpu.c                       |  3 +-
 target/ppc/gdbstub.c                          | 11 ++--
 target/riscv/gdbstub.c                        | 18 ++----
 target/s390x/gdbstub.c                        | 15 +++--
 target/sparc/gdbstub.c                        | 12 ++--
 {gdb-xml => gdbstub/gdb-xml}/aarch64-core.xml |  0
 {gdb-xml => gdbstub/gdb-xml}/aarch64-fpu.xml  |  0
 {gdb-xml => gdbstub/gdb-xml}/aarch64-mte.xml  |  0
 .../gdb-xml}/aarch64-pauth.xml                |  0
 {gdb-xml => gdbstub/gdb-xml}/aarch64-sme2.xml |  0
 {gdb-xml => gdbstub/gdb-xml}/alpha-core.xml   |  0
 {gdb-xml => gdbstub/gdb-xml}/arm-core.xml     |  0
 .../gdb-xml}/arm-m-profile-mve.xml            |  0
 .../gdb-xml}/arm-m-profile.xml                |  0
 {gdb-xml => gdbstub/gdb-xml}/arm-neon.xml     |  0
 .../gdb-xml}/arm-vfp-sysregs.xml              |  0
 {gdb-xml => gdbstub/gdb-xml}/arm-vfp.xml      |  0
 {gdb-xml => gdbstub/gdb-xml}/arm-vfp3.xml     |  0
 {gdb-xml => gdbstub/gdb-xml}/avr-cpu.xml      |  0
 {gdb-xml => gdbstub/gdb-xml}/cf-core.xml      |  0
 {gdb-xml => gdbstub/gdb-xml}/cf-fp.xml        |  2 +-
 {gdb-xml => gdbstub/gdb-xml}/hexagon-core.xml |  0
 {gdb-xml => gdbstub/gdb-xml}/hexagon-hvx.xml  |  0
 .../gdb-xml}/i386-32bit-linux.xml             |  0
 {gdb-xml => gdbstub/gdb-xml}/i386-32bit.xml   |  0
 .../gdb-xml}/i386-64bit-apx.xml               |  0
 .../gdb-xml}/i386-64bit-linux.xml             |  0
 {gdb-xml => gdbstub/gdb-xml}/i386-64bit.xml   |  0
 .../gdb-xml}/loongarch-base32.xml             |  0
 .../gdb-xml}/loongarch-base64.xml             |  0
 .../gdb-xml}/loongarch-fpu.xml                |  0
 .../gdb-xml}/loongarch-lasx.xml               |  0
 .../gdb-xml}/loongarch-lsx.xml                |  0
 {gdb-xml => gdbstub/gdb-xml}/m68k-core.xml    |  0
 {gdb-xml => gdbstub/gdb-xml}/m68k-fp.xml      |  2 +-
 .../gdb-xml}/microblaze-core.xml              |  0
 .../gdb-xml}/microblaze-stack-protect.xml     |  0
 {gdb-xml => gdbstub/gdb-xml}/or1k-core.xml    |  0
 .../gdb-xml}/power-altivec.xml                |  0
 {gdb-xml => gdbstub/gdb-xml}/power-core.xml   |  0
 {gdb-xml => gdbstub/gdb-xml}/power-fpu.xml    |  0
 {gdb-xml => gdbstub/gdb-xml}/power-spe.xml    |  0
 {gdb-xml => gdbstub/gdb-xml}/power-vsx.xml    |  0
 {gdb-xml => gdbstub/gdb-xml}/power64-core.xml |  0
 .../gdb-xml}/riscv-32bit-cpu.xml              |  0
 .../gdb-xml}/riscv-32bit-fpu.xml              |  0
 .../gdb-xml}/riscv-32bit-virtual.xml          |  0
 .../gdb-xml}/riscv-64bit-cpu.xml              |  0
 .../gdb-xml}/riscv-64bit-fpu.xml              |  0
 .../gdb-xml}/riscv-64bit-virtual.xml          |  0
 {gdb-xml => gdbstub/gdb-xml}/rx-core.xml      |  0
 {gdb-xml => gdbstub/gdb-xml}/s390-acr.xml     |  0
 {gdb-xml => gdbstub/gdb-xml}/s390-cr.xml      |  0
 {gdb-xml => gdbstub/gdb-xml}/s390-fpr.xml     |  0
 {gdb-xml => gdbstub/gdb-xml}/s390-gs.xml      |  0
 .../gdb-xml}/s390-virt-kvm.xml                |  0
 {gdb-xml => gdbstub/gdb-xml}/s390-virt.xml    |  0
 {gdb-xml => gdbstub/gdb-xml}/s390-vx.xml      |  0
 {gdb-xml => gdbstub/gdb-xml}/s390x-core64.xml |  0
 {gdb-xml => gdbstub/gdb-xml}/sparc32-cp0.xml  |  0
 {gdb-xml => gdbstub/gdb-xml}/sparc32-cpu.xml  |  0
 {gdb-xml => gdbstub/gdb-xml}/sparc32-fpu.xml  |  0
 {gdb-xml => gdbstub/gdb-xml}/sparc64-cp0.xml  |  0
 {gdb-xml => gdbstub/gdb-xml}/sparc64-cpu.xml  |  0
 {gdb-xml => gdbstub/gdb-xml}/sparc64-fpu.xml  |  0
 gdbstub/meson.build                           | 23 +++++++
 gdbstub/trace-events                          |  6 ++
 scripts/feature_to_c.py                       | 14 +++--
 stubs/meson.build                             |  2 -
 126 files changed, 179 insertions(+), 181 deletions(-)
 rename stubs/gdbstub.c => gdbstub/gdb-xml-stub.c (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/aarch64-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/aarch64-fpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/aarch64-mte.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/aarch64-pauth.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/aarch64-sme2.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/alpha-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-m-profile-mve.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-m-profile.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-neon.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-vfp-sysregs.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-vfp.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-vfp3.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/avr-cpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/cf-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/cf-fp.xml (93%)
 rename {gdb-xml => gdbstub/gdb-xml}/hexagon-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/hexagon-hvx.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/i386-32bit-linux.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/i386-32bit.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/i386-64bit-apx.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/i386-64bit-linux.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/i386-64bit.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/loongarch-base32.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/loongarch-base64.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/loongarch-fpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/loongarch-lasx.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/loongarch-lsx.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/m68k-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/m68k-fp.xml (93%)
 rename {gdb-xml => gdbstub/gdb-xml}/microblaze-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/microblaze-stack-protect.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/or1k-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/power-altivec.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/power-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/power-fpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/power-spe.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/power-vsx.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/power64-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/riscv-32bit-cpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/riscv-32bit-fpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/riscv-32bit-virtual.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/riscv-64bit-cpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/riscv-64bit-fpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/riscv-64bit-virtual.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/rx-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-acr.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-cr.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-fpr.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-gs.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-virt-kvm.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-virt.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-vx.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390x-core64.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/sparc32-cp0.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/sparc32-cpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/sparc32-fpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/sparc64-cp0.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/sparc64-cpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/sparc64-fpu.xml (100%)

-- 
2.53.0



^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v2 01/13] meson: Restrict gdbstub to user/system builds
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
@ 2026-03-10 15:53 ` Philippe Mathieu-Daudé
  2026-03-10 15:53 ` [PATCH v2 02/13] target/i386/gdbstub: Remove stale comment Philippe Mathieu-Daudé
                   ` (12 subsequent siblings)
  13 siblings, 0 replies; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

Limited builds (tools, documentation) don't need to generate /
build gdbstub files. Only process the gdbstub/ folder when
user / system emulation / acceleration is built.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Alex Bennée <alex.bennee@linaro.org>
Acked-by: Alex Bennée <alex.bennee@linaro.org>
---
 meson.build | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meson.build b/meson.build
index 1867560da63..db8918dd303 100644
--- a/meson.build
+++ b/meson.build
@@ -3754,7 +3754,6 @@ subdir('qom')
 subdir('authz')
 subdir('crypto')
 subdir('ui')
-subdir('gdbstub')
 subdir('semihosting')
 subdir('audio')
 subdir('io')
@@ -3805,6 +3804,7 @@ if have_system or have_user
                          output: 'decode-@BASENAME@.c.inc',
                          arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@'])
   subdir('libdecnumber')
+  subdir('gdbstub')
   subdir('target')
 endif
 
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 02/13] target/i386/gdbstub: Remove stale comment
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
  2026-03-10 15:53 ` [PATCH v2 01/13] meson: Restrict gdbstub to user/system builds Philippe Mathieu-Daudé
@ 2026-03-10 15:53 ` Philippe Mathieu-Daudé
  2026-03-10 19:50   ` Pierrick Bouvier
  2026-03-10 15:53 ` [PATCH v2 03/13] gdbstub: Simplify gdb_init_cpu() logic Philippe Mathieu-Daudé
                   ` (11 subsequent siblings)
  13 siblings, 1 reply; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

Since commit ecd6f6a8820 ("gdbstub: Infer number of core
registers from XML") gdb_num_core_regs is inferred for
the x86 targets. Remove a stale comment.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 target/i386/gdbstub.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/target/i386/gdbstub.c b/target/i386/gdbstub.c
index f1ce90a046e..b86520f8f9c 100644
--- a/target/i386/gdbstub.c
+++ b/target/i386/gdbstub.c
@@ -39,9 +39,7 @@ static const int gpr_map[CPU_NB_EREGS] = {
 static const int gpr_map32[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
 
 /*
- * Keep these in sync with assignment to
- * gdb_num_core_regs in target/i386/cpu.c
- * and with the machine description
+ * Keep these in sync with the machine description
  */
 
 /*
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 03/13] gdbstub: Simplify gdb_init_cpu() logic
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
  2026-03-10 15:53 ` [PATCH v2 01/13] meson: Restrict gdbstub to user/system builds Philippe Mathieu-Daudé
  2026-03-10 15:53 ` [PATCH v2 02/13] target/i386/gdbstub: Remove stale comment Philippe Mathieu-Daudé
@ 2026-03-10 15:53 ` Philippe Mathieu-Daudé
  2026-03-10 19:50   ` Pierrick Bouvier
  2026-03-10 15:53 ` [PATCH v2 04/13] gdbstub: Add trace events for around XML parsing / generation Philippe Mathieu-Daudé
                   ` (10 subsequent siblings)
  13 siblings, 1 reply; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

Ensure we either set gdb_num_core_regs or have a XML file.
We shouldn't modify CPUClass content, so mark it const.

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

diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
index 90f4b95135b..139301b485d 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -582,22 +582,21 @@ static const char *gdb_get_core_xml_file(CPUState *cpu)
 
 void gdb_init_cpu(CPUState *cpu)
 {
-    CPUClass *cc = cpu->cc;
+    const CPUClass *cc = cpu->cc;
     const GDBFeature *feature;
     const char *xmlfile = gdb_get_core_xml_file(cpu);
 
     cpu->gdb_regs = g_array_new(false, false, sizeof(GDBRegisterState));
 
     if (xmlfile) {
+        assert(!cc->gdb_num_core_regs);
         feature = gdb_find_static_feature(xmlfile);
         gdb_register_feature(cpu, 0,
                              cc->gdb_read_register, cc->gdb_write_register,
                              feature);
-        assert(!cc->gdb_num_core_regs);
         cpu->gdb_num_regs = cpu->gdb_num_g_regs = feature->num_regs;
-    }
-
-    if (cc->gdb_num_core_regs) {
+    } else {
+        assert(cc->gdb_num_core_regs);
         cpu->gdb_num_regs = cpu->gdb_num_g_regs = cc->gdb_num_core_regs;
     }
 }
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 04/13] gdbstub: Add trace events for around XML parsing / generation
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
                   ` (2 preceding siblings ...)
  2026-03-10 15:53 ` [PATCH v2 03/13] gdbstub: Simplify gdb_init_cpu() logic Philippe Mathieu-Daudé
@ 2026-03-10 15:53 ` Philippe Mathieu-Daudé
  2026-03-10 19:51   ` Pierrick Bouvier
  2026-03-10 15:53 ` [PATCH v2 05/13] gdbstub: Have scripts/feature_to_c.py generate more verbose output Philippe Mathieu-Daudé
                   ` (9 subsequent siblings)
  13 siblings, 1 reply; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

Add trace events to help follow how the various files in
gdb-xml/ are parsed or generated at runtime.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 gdbstub/gdbstub.c    | 10 ++++++++++
 gdbstub/trace-events |  5 +++++
 2 files changed, 15 insertions(+)

diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
index 139301b485d..9703688eecc 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -478,6 +478,10 @@ void gdb_feature_builder_end(const GDBFeatureBuilder *builder)
 
     builder->feature->num_regs = builder->regs->len;
     builder->feature->regs = (void *)g_ptr_array_free(builder->regs, FALSE);
+    trace_gdbxml_feature_builder_header(builder->feature->name,
+                                        builder->feature->xmlname,
+                                        builder->feature->num_regs);
+    trace_gdbxml_feature_builder_content(builder->feature->xml);
 }
 
 const GDBFeature *gdb_find_static_feature(const char *xmlname)
@@ -563,6 +567,8 @@ static void gdb_register_feature(CPUState *cpu, int base_reg,
         .feature = feature
     };
 
+    trace_gdbxml_register_feature(feature->name, feature->xmlname,
+                                  base_reg, feature->num_regs);
     g_array_append_val(cpu->gdb_regs, s);
 }
 
@@ -599,6 +605,10 @@ void gdb_init_cpu(CPUState *cpu)
         assert(cc->gdb_num_core_regs);
         cpu->gdb_num_regs = cpu->gdb_num_g_regs = cc->gdb_num_core_regs;
     }
+
+    trace_gdbxml_init_cpu(object_get_typename(OBJECT(cpu)), cpu->cpu_index,
+                          cpu->gdb_num_regs, cpu->gdb_num_g_regs,
+                          cc->gdb_num_core_regs);
 }
 
 void gdb_register_coprocessor(CPUState *cpu,
diff --git a/gdbstub/trace-events b/gdbstub/trace-events
index 4fd126a38c1..44ef3339934 100644
--- a/gdbstub/trace-events
+++ b/gdbstub/trace-events
@@ -28,5 +28,10 @@ gdbstub_err_checksum_invalid(uint8_t ch) "got invalid command checksum digit: 0x
 gdbstub_err_checksum_incorrect(uint8_t expected, uint8_t got) "got command packet with incorrect checksum, expected=0x%02x, received=0x%02x"
 gdbstub_err_unexpected_runpkt(uint8_t ch) "unexpected packet (0x%02x) while target running"
 
+gdbxml_init_cpu(const char *typename, unsigned id, unsigned gdb_num_regs, unsigned gdb_num_g_regs, unsigned gdb_num_core_regs) "%s:%d regs:%u g_regs:%u core_regs:%u"
+gdbxml_register_feature(const char *featname, const char *xmlname, unsigned base_reg, unsigned num_regs) "%s (%s) @%u +%u"
+gdbxml_feature_builder_header(const char *name, const char *xmlname, int num_regs) "%s (%s) regs:%d"
+gdbxml_feature_builder_content(const char *xml) "%s"
+
 # system.c
 gdbstub_hit_watchpoint(const char *type, int cpu_gdb_index, uint64_t vaddr) "Watchpoint hit, type=\"%s\" cpu=%d, vaddr=0x%" PRIx64 ""
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 05/13] gdbstub: Have scripts/feature_to_c.py generate more verbose output
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
                   ` (3 preceding siblings ...)
  2026-03-10 15:53 ` [PATCH v2 04/13] gdbstub: Add trace events for around XML parsing / generation Philippe Mathieu-Daudé
@ 2026-03-10 15:53 ` Philippe Mathieu-Daudé
  2026-03-10 15:53 ` [PATCH v2 06/13] gdbstub: Make base register explicit in m68k GDB XML files Philippe Mathieu-Daudé
                   ` (8 subsequent siblings)
  13 siblings, 0 replies; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

Make the structure field names explicit, so it is easier
to figure what is what when reviewing multiple entries.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
---
 scripts/feature_to_c.py | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/scripts/feature_to_c.py b/scripts/feature_to_c.py
index 3aa62fb895f..1329695ad04 100644
--- a/scripts/feature_to_c.py
+++ b/scripts/feature_to_c.py
@@ -85,13 +85,16 @@ def writeliteral(indent, bytes):
     num_regs = max(regnums) - base_reg + 1 if len(regnums) else 0
 
     sys.stdout.write('    {\n')
-    writeliteral(8, bytes(os.path.basename(input), 'utf-8'))
+    sys.stdout.write('        .xmlname = ')
+    writeliteral(0, bytes(os.path.basename(input), 'utf-8'))
     sys.stdout.write(',\n')
-    writeliteral(8, read)
+    sys.stdout.write('        .xml = \n')
+    writeliteral(12, read)
     sys.stdout.write(',\n')
-    writeliteral(8, bytes(feature_name, 'utf-8'))
+    sys.stdout.write('        .name = ')
+    writeliteral(0, bytes(feature_name, 'utf-8'))
     sys.stdout.write(',\n')
-    sys.stdout.write(f'        (const char * const [{num_regs}]) {{\n')
+    sys.stdout.write(f'        .regs = (const char * const [{num_regs}]) {{\n')
 
     for index, regname in enumerate(regnames):
         sys.stdout.write(f'            [{regnums[index] - base_reg}] =\n')
@@ -99,7 +102,7 @@ def writeliteral(indent, bytes):
         sys.stdout.write(',\n')
 
     sys.stdout.write( '        },\n')
-    sys.stdout.write(f'        {num_regs},\n')
+    sys.stdout.write(f'        .num_regs = {num_regs},\n')
     sys.stdout.write( '    },\n')
 
 sys.stdout.write('    { NULL }\n};\n')
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 06/13] gdbstub: Make base register explicit in m68k GDB XML files
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
                   ` (4 preceding siblings ...)
  2026-03-10 15:53 ` [PATCH v2 05/13] gdbstub: Have scripts/feature_to_c.py generate more verbose output Philippe Mathieu-Daudé
@ 2026-03-10 15:53 ` Philippe Mathieu-Daudé
  2026-03-10 15:53 ` [PATCH v2 07/13] gdbstub: Remove @g_pos argument in gdb_register_coprocessor() Philippe Mathieu-Daudé
                   ` (7 subsequent siblings)
  13 siblings, 0 replies; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

Both gdb-xml/cf-fp.xml and gdb-xml/m68k-fp.xml aren't imported
from GDB repository. Presumably they are hand-written, and lack
the @regnum XML tag.

This might explain why gdb_register_coprocessor() have a @g_pos
argument, only used for these 2 m68k files.

Fixes: 56aebc89167 ("Add GDB XML register description support")
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
---
 target/m68k/helper.c | 4 ++--
 gdb-xml/cf-fp.xml    | 2 +-
 gdb-xml/m68k-fp.xml  | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/target/m68k/helper.c b/target/m68k/helper.c
index 15f110fa7a2..c566cb0a16c 100644
--- a/target/m68k/helper.c
+++ b/target/m68k/helper.c
@@ -129,10 +129,10 @@ void m68k_cpu_init_gdb(M68kCPU *cpu)
 
     if (m68k_feature(env, M68K_FEATURE_CF_FPU)) {
         gdb_register_coprocessor(cs, cf_fpu_gdb_get_reg, cf_fpu_gdb_set_reg,
-                                 gdb_find_static_feature("cf-fp.xml"), 18);
+                                 gdb_find_static_feature("cf-fp.xml"), 0);
     } else if (m68k_feature(env, M68K_FEATURE_FPU)) {
         gdb_register_coprocessor(cs, m68k_fpu_gdb_get_reg, m68k_fpu_gdb_set_reg,
-                                 gdb_find_static_feature("m68k-fp.xml"), 18);
+                                 gdb_find_static_feature("m68k-fp.xml"), 0);
     }
     /* TODO: Add [E]MAC registers.  */
 }
diff --git a/gdb-xml/cf-fp.xml b/gdb-xml/cf-fp.xml
index bf71c320bfc..27db66ae963 100644
--- a/gdb-xml/cf-fp.xml
+++ b/gdb-xml/cf-fp.xml
@@ -6,7 +6,7 @@
      notice and this notice are preserved.  -->
 <!DOCTYPE feature SYSTEM "gdb-target.dtd">
 <feature name="org.gnu.gdb.coldfire.fp">
-  <reg name="fp0" bitsize="64" type="float" group="float"/>
+  <reg name="fp0" bitsize="64" type="float" group="float" regnum="18"/>
   <reg name="fp1" bitsize="64" type="float" group="float"/>
   <reg name="fp2" bitsize="64" type="float" group="float"/>
   <reg name="fp3" bitsize="64" type="float" group="float"/>
diff --git a/gdb-xml/m68k-fp.xml b/gdb-xml/m68k-fp.xml
index 64290d16306..ec45931b673 100644
--- a/gdb-xml/m68k-fp.xml
+++ b/gdb-xml/m68k-fp.xml
@@ -6,7 +6,7 @@
      notice and this notice are preserved.  -->
 <!DOCTYPE feature SYSTEM "gdb-target.dtd">
 <feature name="org.gnu.gdb.coldfire.fp">
-  <reg name="fp0" bitsize="96" type="float" group="float"/>
+  <reg name="fp0" bitsize="96" type="float" group="float" regnum="18"/>
   <reg name="fp1" bitsize="96" type="float" group="float"/>
   <reg name="fp2" bitsize="96" type="float" group="float"/>
   <reg name="fp3" bitsize="96" type="float" group="float"/>
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 07/13] gdbstub: Remove @g_pos argument in gdb_register_coprocessor()
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
                   ` (5 preceding siblings ...)
  2026-03-10 15:53 ` [PATCH v2 06/13] gdbstub: Make base register explicit in m68k GDB XML files Philippe Mathieu-Daudé
@ 2026-03-10 15:53 ` Philippe Mathieu-Daudé
  2026-03-10 15:53 ` [PATCH v2 08/13] gdbstub: Emit base_register index in GDBFeature entries Philippe Mathieu-Daudé
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

gdb_register_coprocessor()'s @g_pos argument is always '0',
meaning it is inferred from cpu->gdb_num_regs. Use instead
feature->base_reg.

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/exec/gdbstub.h     |  3 +--
 gdbstub/gdbstub.c          | 10 +---------
 target/arm/gdbstub.c       | 21 ++++++++-------------
 target/arm/gdbstub64.c     | 19 +++++++------------
 target/hexagon/cpu.c       |  2 +-
 target/i386/gdbstub.c      |  8 +++-----
 target/loongarch/gdbstub.c |  6 +++---
 target/m68k/helper.c       |  4 ++--
 target/microblaze/cpu.c    |  3 +--
 target/ppc/gdbstub.c       | 11 +++++------
 target/riscv/gdbstub.c     | 18 ++++++------------
 target/s390x/gdbstub.c     | 15 +++++++--------
 target/sparc/gdbstub.c     | 12 ++++--------
 13 files changed, 49 insertions(+), 83 deletions(-)

diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h
index bd7182c4d32..79e47a024ec 100644
--- a/include/exec/gdbstub.h
+++ b/include/exec/gdbstub.h
@@ -34,11 +34,10 @@ void gdb_init_cpu(CPUState *cpu);
  * @set_reg - set function (gdb modifying)
  * @num_regs - number of registers in set
  * @xml - xml name of set
- * @gpos - non-zero to append to "general" register set at @gpos
  */
 void gdb_register_coprocessor(CPUState *cpu,
                               gdb_get_reg_cb get_reg, gdb_set_reg_cb set_reg,
-                              const GDBFeature *feature, int g_pos);
+                              const GDBFeature *feature);
 
 /**
  * gdb_unregister_coprocessor_all() - unregisters supplemental set of registers
diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
index 9703688eecc..ad4bdc0623d 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -613,7 +613,7 @@ void gdb_init_cpu(CPUState *cpu)
 
 void gdb_register_coprocessor(CPUState *cpu,
                               gdb_get_reg_cb get_reg, gdb_set_reg_cb set_reg,
-                              const GDBFeature *feature, int g_pos)
+                              const GDBFeature *feature)
 {
     GDBRegisterState *s;
     guint i;
@@ -631,14 +631,6 @@ void gdb_register_coprocessor(CPUState *cpu,
 
     /* Add to end of list.  */
     cpu->gdb_num_regs += feature->num_regs;
-    if (g_pos) {
-        if (g_pos != base_reg) {
-            error_report("Error: Bad gdb register numbering for '%s', "
-                         "expected %d got %d", feature->xml, g_pos, base_reg);
-        } else {
-            cpu->gdb_num_g_regs = cpu->gdb_num_regs;
-        }
-    }
 }
 
 void gdb_unregister_coprocessor_all(CPUState *cpu)
diff --git a/target/arm/gdbstub.c b/target/arm/gdbstub.c
index c7d59fd3726..d6e29c4cf46 100644
--- a/target/arm/gdbstub.c
+++ b/target/arm/gdbstub.c
@@ -534,15 +534,13 @@ void arm_cpu_register_gdb_regs_for_features(ARMCPU *cpu)
     } else {
         if (arm_feature(env, ARM_FEATURE_NEON)) {
             gdb_register_coprocessor(cs, vfp_gdb_get_reg, vfp_gdb_set_reg,
-                                     gdb_find_static_feature("arm-neon.xml"),
-                                     0);
+                                     gdb_find_static_feature("arm-neon.xml"));
         } else if (cpu_isar_feature(aa32_simd_r32, cpu)) {
             gdb_register_coprocessor(cs, vfp_gdb_get_reg, vfp_gdb_set_reg,
-                                     gdb_find_static_feature("arm-vfp3.xml"),
-                                     0);
+                                     gdb_find_static_feature("arm-vfp3.xml"));
         } else if (cpu_isar_feature(aa32_vfp_simd, cpu)) {
             gdb_register_coprocessor(cs, vfp_gdb_get_reg, vfp_gdb_set_reg,
-                                     gdb_find_static_feature("arm-vfp.xml"), 0);
+                                     gdb_find_static_feature("arm-vfp.xml"));
         }
         if (!arm_feature(env, ARM_FEATURE_M)) {
             /*
@@ -550,29 +548,26 @@ void arm_cpu_register_gdb_regs_for_features(ARMCPU *cpu)
              * expose to gdb.
              */
             gdb_register_coprocessor(cs, vfp_gdb_get_sysreg, vfp_gdb_set_sysreg,
-                                     gdb_find_static_feature("arm-vfp-sysregs.xml"),
-                                     0);
+                                     gdb_find_static_feature("arm-vfp-sysregs.xml"));
         }
     }
     if (cpu_isar_feature(aa32_mve, cpu) && tcg_enabled()) {
         gdb_register_coprocessor(cs, mve_gdb_get_reg, mve_gdb_set_reg,
-                                 gdb_find_static_feature("arm-m-profile-mve.xml"),
-                                 0);
+                                 gdb_find_static_feature("arm-m-profile-mve.xml"));
     }
     gdb_register_coprocessor(cs, arm_gdb_get_sysreg, arm_gdb_set_sysreg,
-                             arm_gen_dynamic_sysreg_feature(cs, cs->gdb_num_regs),
-                             0);
+                             arm_gen_dynamic_sysreg_feature(cs, cs->gdb_num_regs));
 
 #ifdef CONFIG_TCG
     if (arm_feature(env, ARM_FEATURE_M) && tcg_enabled()) {
         gdb_register_coprocessor(cs,
             arm_gdb_get_m_systemreg, arm_gdb_set_m_systemreg,
-            arm_gen_dynamic_m_systemreg_feature(cs, cs->gdb_num_regs), 0);
+            arm_gen_dynamic_m_systemreg_feature(cs, cs->gdb_num_regs));
 #ifndef CONFIG_USER_ONLY
         if (arm_feature(env, ARM_FEATURE_M_SECURITY)) {
             gdb_register_coprocessor(cs,
                 arm_gdb_get_m_secextreg, arm_gdb_set_m_secextreg,
-                arm_gen_dynamic_m_secextreg_feature(cs, cs->gdb_num_regs), 0);
+                arm_gen_dynamic_m_secextreg_feature(cs, cs->gdb_num_regs));
         }
 #endif
     }
diff --git a/target/arm/gdbstub64.c b/target/arm/gdbstub64.c
index b71666c3a1d..a4fa740caf6 100644
--- a/target/arm/gdbstub64.c
+++ b/target/arm/gdbstub64.c
@@ -887,24 +887,22 @@ void aarch64_cpu_register_gdb_regs_for_features(ARMCPU *cpu)
         isar_feature_aa64_sme(&cpu->isar)) {
         GDBFeature *feature = arm_gen_dynamic_svereg_feature(cs, cs->gdb_num_regs);
         gdb_register_coprocessor(cs, aarch64_gdb_get_sve_reg,
-                                 aarch64_gdb_set_sve_reg, feature, 0);
+                                 aarch64_gdb_set_sve_reg, feature);
     } else {
         gdb_register_coprocessor(cs, aarch64_gdb_get_fpu_reg,
                                  aarch64_gdb_set_fpu_reg,
-                                 gdb_find_static_feature("aarch64-fpu.xml"),
-                                 0);
+                                 gdb_find_static_feature("aarch64-fpu.xml"));
     }
 
     if (isar_feature_aa64_sme(&cpu->isar)) {
         GDBFeature *sme_feature =
             arm_gen_dynamic_smereg_feature(cs, cs->gdb_num_regs);
         gdb_register_coprocessor(cs, aarch64_gdb_get_sme_reg,
-                                 aarch64_gdb_set_sme_reg, sme_feature, 0);
+                                 aarch64_gdb_set_sme_reg, sme_feature);
         if (isar_feature_aa64_sme2(&cpu->isar)) {
             gdb_register_coprocessor(cs, aarch64_gdb_get_sme2_reg,
                                      aarch64_gdb_set_sme2_reg,
-                                     gdb_find_static_feature("aarch64-sme2.xml"),
-                                     0);
+                                     gdb_find_static_feature("aarch64-sme2.xml"));
         }
     }
     /*
@@ -916,8 +914,7 @@ void aarch64_cpu_register_gdb_regs_for_features(ARMCPU *cpu)
     if (isar_feature_aa64_pauth(&cpu->isar)) {
         gdb_register_coprocessor(cs, aarch64_gdb_get_pauth_reg,
                                  aarch64_gdb_set_pauth_reg,
-                                 gdb_find_static_feature("aarch64-pauth.xml"),
-                                 0);
+                                 gdb_find_static_feature("aarch64-pauth.xml"));
     }
 
 #ifdef CONFIG_USER_ONLY
@@ -925,14 +922,12 @@ void aarch64_cpu_register_gdb_regs_for_features(ARMCPU *cpu)
     if (cpu_isar_feature(aa64_mte, cpu)) {
         gdb_register_coprocessor(cs, aarch64_gdb_get_tag_ctl_reg,
                                  aarch64_gdb_set_tag_ctl_reg,
-                                 gdb_find_static_feature("aarch64-mte.xml"),
-                                 0);
+                                 gdb_find_static_feature("aarch64-mte.xml"));
     }
 #endif
 
     /* All AArch64 CPUs have at least TPIDR */
     gdb_register_coprocessor(cs, aarch64_gdb_get_tls_reg,
                              aarch64_gdb_set_tls_reg,
-                             arm_gen_dynamic_tls_feature(cs, cs->gdb_num_regs),
-                             0);
+                             arm_gen_dynamic_tls_feature(cs, cs->gdb_num_regs));
 }
diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c
index 58a22ee41f2..ffd14bb4678 100644
--- a/target/hexagon/cpu.c
+++ b/target/hexagon/cpu.c
@@ -322,7 +322,7 @@ static void hexagon_cpu_realize(DeviceState *dev, Error **errp)
 
     gdb_register_coprocessor(cs, hexagon_hvx_gdb_read_register,
                              hexagon_hvx_gdb_write_register,
-                             gdb_find_static_feature("hexagon-hvx.xml"), 0);
+                             gdb_find_static_feature("hexagon-hvx.xml"));
 
     qemu_init_vcpu(cs);
     cpu_reset(cs);
diff --git a/target/i386/gdbstub.c b/target/i386/gdbstub.c
index b86520f8f9c..5c5fa727216 100644
--- a/target/i386/gdbstub.c
+++ b/target/i386/gdbstub.c
@@ -501,8 +501,7 @@ void x86_cpu_gdb_init(CPUState *cs)
     if (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_APXF) {
         gdb_register_coprocessor(cs, i386_cpu_gdb_get_egprs,
                                  i386_cpu_gdb_set_egprs,
-                                 gdb_find_static_feature("i386-64bit-apx.xml"),
-                                 0);
+                                 gdb_find_static_feature("i386-64bit-apx.xml"));
     }
 #endif
 
@@ -510,10 +509,9 @@ void x86_cpu_gdb_init(CPUState *cs)
     gdb_register_coprocessor(cs, x86_cpu_gdb_read_linux_register,
                              x86_cpu_gdb_write_linux_register,
 #ifdef TARGET_X86_64
-                             gdb_find_static_feature("i386-64bit-linux.xml"),
+                             gdb_find_static_feature("i386-64bit-linux.xml"));
 #else
-                             gdb_find_static_feature("i386-32bit-linux.xml"),
+                             gdb_find_static_feature("i386-32bit-linux.xml"));
 #endif
-                             0);
 #endif
 }
diff --git a/target/loongarch/gdbstub.c b/target/loongarch/gdbstub.c
index 23a5eecc20b..3e9bdfa8bbf 100644
--- a/target/loongarch/gdbstub.c
+++ b/target/loongarch/gdbstub.c
@@ -180,16 +180,16 @@ void loongarch_cpu_register_gdb_regs_for_features(CPUState *cs)
 
     if (FIELD_EX32(env->cpucfg[2], CPUCFG2, FP)) {
         gdb_register_coprocessor(cs, loongarch_gdb_get_fpu, loongarch_gdb_set_fpu,
-                                 gdb_find_static_feature("loongarch-fpu.xml"), 0);
+                                 gdb_find_static_feature("loongarch-fpu.xml"));
     }
 
     if (FIELD_EX32(env->cpucfg[2], CPUCFG2, LSX)) {
         gdb_register_coprocessor(cs, loongarch_gdb_get_lsx, loongarch_gdb_set_lsx,
-                                 gdb_find_static_feature("loongarch-lsx.xml"), 0);
+                                 gdb_find_static_feature("loongarch-lsx.xml"));
     }
 
     if (FIELD_EX32(env->cpucfg[2], CPUCFG2, LASX)) {
         gdb_register_coprocessor(cs, loongarch_gdb_get_lasx, loongarch_gdb_set_lasx,
-                                 gdb_find_static_feature("loongarch-lasx.xml"), 0);
+                                 gdb_find_static_feature("loongarch-lasx.xml"));
     }
 }
diff --git a/target/m68k/helper.c b/target/m68k/helper.c
index c566cb0a16c..9bab1843892 100644
--- a/target/m68k/helper.c
+++ b/target/m68k/helper.c
@@ -129,10 +129,10 @@ void m68k_cpu_init_gdb(M68kCPU *cpu)
 
     if (m68k_feature(env, M68K_FEATURE_CF_FPU)) {
         gdb_register_coprocessor(cs, cf_fpu_gdb_get_reg, cf_fpu_gdb_set_reg,
-                                 gdb_find_static_feature("cf-fp.xml"), 0);
+                                 gdb_find_static_feature("cf-fp.xml"));
     } else if (m68k_feature(env, M68K_FEATURE_FPU)) {
         gdb_register_coprocessor(cs, m68k_fpu_gdb_get_reg, m68k_fpu_gdb_set_reg,
-                                 gdb_find_static_feature("m68k-fp.xml"), 0);
+                                 gdb_find_static_feature("m68k-fp.xml"));
     }
     /* TODO: Add [E]MAC registers.  */
 }
diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c
index ae41a1a3287..ec513ae82d4 100644
--- a/target/microblaze/cpu.c
+++ b/target/microblaze/cpu.c
@@ -265,8 +265,7 @@ static void mb_cpu_realizefn(DeviceState *dev, Error **errp)
 
     gdb_register_coprocessor(cs, mb_cpu_gdb_read_stack_protect,
                              mb_cpu_gdb_write_stack_protect,
-                             gdb_find_static_feature("microblaze-stack-protect.xml"),
-                             0);
+                             gdb_find_static_feature("microblaze-stack-protect.xml"));
 
     qemu_init_vcpu(cs);
 
diff --git a/target/ppc/gdbstub.c b/target/ppc/gdbstub.c
index e0aae9c9eaf..4d622c5cad5 100644
--- a/target/ppc/gdbstub.c
+++ b/target/ppc/gdbstub.c
@@ -502,24 +502,23 @@ void ppc_gdb_init(CPUState *cs, PowerPCCPUClass *pcc)
 {
     if (pcc->insns_flags & PPC_FLOAT) {
         gdb_register_coprocessor(cs, gdb_get_float_reg, gdb_set_float_reg,
-                                 gdb_find_static_feature("power-fpu.xml"), 0);
+                                 gdb_find_static_feature("power-fpu.xml"));
     }
     if (pcc->insns_flags & PPC_ALTIVEC) {
         gdb_register_coprocessor(cs, gdb_get_avr_reg, gdb_set_avr_reg,
-                                 gdb_find_static_feature("power-altivec.xml"),
-                                 0);
+                                 gdb_find_static_feature("power-altivec.xml"));
     }
     if (pcc->insns_flags & PPC_SPE) {
         gdb_register_coprocessor(cs, gdb_get_spe_reg, gdb_set_spe_reg,
-                                 gdb_find_static_feature("power-spe.xml"), 0);
+                                 gdb_find_static_feature("power-spe.xml"));
     }
     if (pcc->insns_flags2 & PPC2_VSX) {
         gdb_register_coprocessor(cs, gdb_get_vsx_reg, gdb_set_vsx_reg,
-                                 gdb_find_static_feature("power-vsx.xml"), 0);
+                                 gdb_find_static_feature("power-vsx.xml"));
     }
 #ifndef CONFIG_USER_ONLY
     gdb_gen_spr_feature(cs);
     gdb_register_coprocessor(cs, gdb_get_spr_reg, gdb_set_spr_reg,
-                             &pcc->gdb_spr, 0);
+                             &pcc->gdb_spr);
 #endif
 }
diff --git a/target/riscv/gdbstub.c b/target/riscv/gdbstub.c
index a053009ccd3..6a5b7a82fd4 100644
--- a/target/riscv/gdbstub.c
+++ b/target/riscv/gdbstub.c
@@ -348,32 +348,27 @@ void riscv_cpu_register_gdb_regs_for_features(CPUState *cs)
     CPURISCVState *env = &cpu->env;
     if (env->misa_ext & RVD) {
         gdb_register_coprocessor(cs, riscv_gdb_get_fpu, riscv_gdb_set_fpu,
-                                 gdb_find_static_feature("riscv-64bit-fpu.xml"),
-                                 0);
+                                 gdb_find_static_feature("riscv-64bit-fpu.xml"));
     } else if (env->misa_ext & RVF) {
         gdb_register_coprocessor(cs, riscv_gdb_get_fpu, riscv_gdb_set_fpu,
-                                 gdb_find_static_feature("riscv-32bit-fpu.xml"),
-                                 0);
+                                 gdb_find_static_feature("riscv-32bit-fpu.xml"));
     }
     if (cpu->cfg.ext_zve32x) {
         gdb_register_coprocessor(cs, riscv_gdb_get_vector,
                                  riscv_gdb_set_vector,
-                                 ricsv_gen_dynamic_vector_feature(cs, cs->gdb_num_regs),
-                                 0);
+                                 ricsv_gen_dynamic_vector_feature(cs, cs->gdb_num_regs));
     }
     switch (mcc->def->misa_mxl_max) {
     case MXL_RV32:
         gdb_register_coprocessor(cs, riscv_gdb_get_virtual,
                                  riscv_gdb_set_virtual,
-                                 gdb_find_static_feature("riscv-32bit-virtual.xml"),
-                                 0);
+                                 gdb_find_static_feature("riscv-32bit-virtual.xml"));
         break;
     case MXL_RV64:
     case MXL_RV128:
         gdb_register_coprocessor(cs, riscv_gdb_get_virtual,
                                  riscv_gdb_set_virtual,
-                                 gdb_find_static_feature("riscv-64bit-virtual.xml"),
-                                 0);
+                                 gdb_find_static_feature("riscv-64bit-virtual.xml"));
         break;
     default:
         g_assert_not_reached();
@@ -381,7 +376,6 @@ void riscv_cpu_register_gdb_regs_for_features(CPUState *cs)
 
     if (cpu->cfg.ext_zicsr) {
         gdb_register_coprocessor(cs, riscv_gdb_get_csr, riscv_gdb_set_csr,
-                                 riscv_gen_dynamic_csr_feature(cs, cs->gdb_num_regs),
-                                 0);
+                                 riscv_gen_dynamic_csr_feature(cs, cs->gdb_num_regs));
     }
 }
diff --git a/target/s390x/gdbstub.c b/target/s390x/gdbstub.c
index 9ae715add4d..efdaaefa6d0 100644
--- a/target/s390x/gdbstub.c
+++ b/target/s390x/gdbstub.c
@@ -347,34 +347,33 @@ void s390_cpu_gdb_init(CPUState *cs)
 {
     gdb_register_coprocessor(cs, cpu_read_ac_reg,
                              cpu_write_ac_reg,
-                             gdb_find_static_feature("s390-acr.xml"), 0);
+                             gdb_find_static_feature("s390-acr.xml"));
 
     gdb_register_coprocessor(cs, cpu_read_fp_reg,
                              cpu_write_fp_reg,
-                             gdb_find_static_feature("s390-fpr.xml"), 0);
+                             gdb_find_static_feature("s390-fpr.xml"));
 
     gdb_register_coprocessor(cs, cpu_read_vreg,
                              cpu_write_vreg,
-                             gdb_find_static_feature("s390-vx.xml"), 0);
+                             gdb_find_static_feature("s390-vx.xml"));
 
     gdb_register_coprocessor(cs, cpu_read_gs_reg,
                              cpu_write_gs_reg,
-                             gdb_find_static_feature("s390-gs.xml"), 0);
+                             gdb_find_static_feature("s390-gs.xml"));
 
 #ifndef CONFIG_USER_ONLY
     gdb_register_coprocessor(cs, cpu_read_c_reg,
                              cpu_write_c_reg,
-                             gdb_find_static_feature("s390-cr.xml"), 0);
+                             gdb_find_static_feature("s390-cr.xml"));
 
     gdb_register_coprocessor(cs, cpu_read_virt_reg,
                              cpu_write_virt_reg,
-                             gdb_find_static_feature("s390-virt.xml"), 0);
+                             gdb_find_static_feature("s390-virt.xml"));
 
     if (kvm_enabled()) {
         gdb_register_coprocessor(cs, cpu_read_virt_kvm_reg,
                                  cpu_write_virt_kvm_reg,
-                                 gdb_find_static_feature("s390-virt-kvm.xml"),
-                                 0);
+                                 gdb_find_static_feature("s390-virt-kvm.xml"));
     }
 #endif
 }
diff --git a/target/sparc/gdbstub.c b/target/sparc/gdbstub.c
index 792bf70a145..2874ce1b350 100644
--- a/target/sparc/gdbstub.c
+++ b/target/sparc/gdbstub.c
@@ -271,20 +271,16 @@ void sparc_cpu_register_gdb_regs(CPUState *cs)
 #if defined(TARGET_ABI32) || !defined(TARGET_SPARC64)
     gdb_register_coprocessor(cs, sparc_fpu_gdb_read_register,
                              sparc_fpu_gdb_write_register,
-                             gdb_find_static_feature("sparc32-fpu.xml"),
-                             0);
+                             gdb_find_static_feature("sparc32-fpu.xml"));
     gdb_register_coprocessor(cs, sparc_cp0_gdb_read_register,
                              sparc_cp0_gdb_write_register,
-                             gdb_find_static_feature("sparc32-cp0.xml"),
-                             0);
+                             gdb_find_static_feature("sparc32-cp0.xml"));
 #else
     gdb_register_coprocessor(cs, sparc_fpu_gdb_read_register,
                              sparc_fpu_gdb_write_register,
-                             gdb_find_static_feature("sparc64-fpu.xml"),
-                             0);
+                             gdb_find_static_feature("sparc64-fpu.xml"));
     gdb_register_coprocessor(cs, sparc_cp0_gdb_read_register,
                              sparc_cp0_gdb_write_register,
-                             gdb_find_static_feature("sparc64-cp0.xml"),
-                             0);
+                             gdb_find_static_feature("sparc64-cp0.xml"));
 #endif
 }
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 08/13] gdbstub: Emit base_register index in GDBFeature entries
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
                   ` (6 preceding siblings ...)
  2026-03-10 15:53 ` [PATCH v2 07/13] gdbstub: Remove @g_pos argument in gdb_register_coprocessor() Philippe Mathieu-Daudé
@ 2026-03-10 15:53 ` Philippe Mathieu-Daudé
  2026-03-10 15:53 ` [PATCH v2 09/13] gdbstub: Use GDBFeature::base_reg in gdb_register_feature() Philippe Mathieu-Daudé
                   ` (5 subsequent siblings)
  13 siblings, 0 replies; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

Record the base register index in the generated C file.

Check at runtime that either @g_pos argument of
gdb_register_coprocessor() is zero, or it the base register
index.

This change pass 'make check-tcg' test suite, which runs the
tests/tcg/multiarch/gdbstub/registers.py test, itself calling
gdb_register_coprocessor() for each target tested.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
---
 include/exec/gdbstub.h  | 1 +
 scripts/feature_to_c.py | 1 +
 2 files changed, 2 insertions(+)

diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h
index 79e47a024ec..75eb4d9c365 100644
--- a/include/exec/gdbstub.h
+++ b/include/exec/gdbstub.h
@@ -6,6 +6,7 @@ typedef struct GDBFeature {
     const char *xml;
     const char *name;
     const char * const *regs;
+    int base_reg;
     int num_regs;
 } GDBFeature;
 
diff --git a/scripts/feature_to_c.py b/scripts/feature_to_c.py
index 1329695ad04..a52cd2e9ec6 100644
--- a/scripts/feature_to_c.py
+++ b/scripts/feature_to_c.py
@@ -102,6 +102,7 @@ def writeliteral(indent, bytes):
         sys.stdout.write(',\n')
 
     sys.stdout.write( '        },\n')
+    sys.stdout.write(f'        .base_reg = {base_reg},\n')
     sys.stdout.write(f'        .num_regs = {num_regs},\n')
     sys.stdout.write( '    },\n')
 
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 09/13] gdbstub: Use GDBFeature::base_reg in gdb_register_feature()
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
                   ` (7 preceding siblings ...)
  2026-03-10 15:53 ` [PATCH v2 08/13] gdbstub: Emit base_register index in GDBFeature entries Philippe Mathieu-Daudé
@ 2026-03-10 15:53 ` Philippe Mathieu-Daudé
  2026-03-10 20:21   ` Philippe Mathieu-Daudé
  2026-03-10 15:53 ` [PATCH v2 10/13] gdbstub: Remove GDBRegisterState::base_reg Philippe Mathieu-Daudé
                   ` (4 subsequent siblings)
  13 siblings, 1 reply; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

When a feature XML file provides a "regnum=" tag to indicate
the registers base index, respect it, as it might not be the
same as our current number of registered entries, in particular
when there are gaps.

This fixes a bug with the "power-fpu.xml" file [*] which was
loaded at index 70 while the base register is 71. This latent
bug was exposed by commit 1ec0fbe2dda ("target/ppc: Fix
CPUClass::gdb_num_core_regs value").

[*] https://lore.kernel.org/qemu-devel/e44df309-d40d-46f0-88a8-7ac55f9a3634@fhofhammer.de/

Reported-by: Florian Hofhammer <florian.hofhammer@fhofhammer.de>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 gdbstub/gdbstub.c    | 16 ++++++++++------
 gdbstub/trace-events |  1 +
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
index ad4bdc0623d..6976f31933f 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -556,19 +556,19 @@ int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
     return 0;
 }
 
-static void gdb_register_feature(CPUState *cpu, int base_reg,
+static void gdb_register_feature(CPUState *cpu,
                                  gdb_get_reg_cb get_reg, gdb_set_reg_cb set_reg,
                                  const GDBFeature *feature)
 {
     GDBRegisterState s = {
-        .base_reg = base_reg,
+        .base_reg = feature->base_reg,
         .get_reg = get_reg,
         .set_reg = set_reg,
         .feature = feature
     };
 
     trace_gdbxml_register_feature(feature->name, feature->xmlname,
-                                  base_reg, feature->num_regs);
+                                  feature->base_reg, feature->num_regs);
     g_array_append_val(cpu->gdb_regs, s);
 }
 
@@ -597,7 +597,8 @@ void gdb_init_cpu(CPUState *cpu)
     if (xmlfile) {
         assert(!cc->gdb_num_core_regs);
         feature = gdb_find_static_feature(xmlfile);
-        gdb_register_feature(cpu, 0,
+        assert(feature->base_reg == 0);
+        gdb_register_feature(cpu,
                              cc->gdb_read_register, cc->gdb_write_register,
                              feature);
         cpu->gdb_num_regs = cpu->gdb_num_g_regs = feature->num_regs;
@@ -617,7 +618,6 @@ void gdb_register_coprocessor(CPUState *cpu,
 {
     GDBRegisterState *s;
     guint i;
-    int base_reg = cpu->gdb_num_regs;
 
     for (i = 0; i < cpu->gdb_regs->len; i++) {
         /* Check for duplicates.  */
@@ -627,7 +627,11 @@ void gdb_register_coprocessor(CPUState *cpu,
         }
     }
 
-    gdb_register_feature(cpu, base_reg, get_reg, set_reg, feature);
+    if (cpu->gdb_num_regs < feature->base_reg) {
+        trace_gdbxml_register_coprocessor_gap(cpu->gdb_num_regs,
+                                              feature->base_reg);
+    }
+    gdb_register_feature(cpu, get_reg, set_reg, feature);
 
     /* Add to end of list.  */
     cpu->gdb_num_regs += feature->num_regs;
diff --git a/gdbstub/trace-events b/gdbstub/trace-events
index 44ef3339934..7036818a387 100644
--- a/gdbstub/trace-events
+++ b/gdbstub/trace-events
@@ -29,6 +29,7 @@ gdbstub_err_checksum_incorrect(uint8_t expected, uint8_t got) "got command packe
 gdbstub_err_unexpected_runpkt(uint8_t ch) "unexpected packet (0x%02x) while target running"
 
 gdbxml_init_cpu(const char *typename, unsigned id, unsigned gdb_num_regs, unsigned gdb_num_g_regs, unsigned gdb_num_core_regs) "%s:%d regs:%u g_regs:%u core_regs:%u"
+gdbxml_register_coprocessor_gap(unsigned gdb_num_regs, unsigned base_reg) "regs %u -> %u"
 gdbxml_register_feature(const char *featname, const char *xmlname, unsigned base_reg, unsigned num_regs) "%s (%s) @%u +%u"
 gdbxml_feature_builder_header(const char *name, const char *xmlname, int num_regs) "%s (%s) regs:%d"
 gdbxml_feature_builder_content(const char *xml) "%s"
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 10/13] gdbstub: Remove GDBRegisterState::base_reg
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
                   ` (8 preceding siblings ...)
  2026-03-10 15:53 ` [PATCH v2 09/13] gdbstub: Use GDBFeature::base_reg in gdb_register_feature() Philippe Mathieu-Daudé
@ 2026-03-10 15:53 ` Philippe Mathieu-Daudé
  2026-03-10 15:53 ` [PATCH v2 11/13] gdbstub: Remove 'gdb-xml/' directory prefix in TARGET_XML_FILES Philippe Mathieu-Daudé
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

@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



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 11/13] gdbstub: Remove 'gdb-xml/' directory prefix in TARGET_XML_FILES
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
                   ` (9 preceding siblings ...)
  2026-03-10 15:53 ` [PATCH v2 10/13] gdbstub: Remove GDBRegisterState::base_reg Philippe Mathieu-Daudé
@ 2026-03-10 15:53 ` Philippe Mathieu-Daudé
  2026-03-10 15:53 ` [PATCH v2 12/13] gdbstub: Move gdb-xml/ within gdbstub/ Philippe Mathieu-Daudé
                   ` (2 subsequent siblings)
  13 siblings, 0 replies; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

All GDB XML files are in the gdb-xml/ directory. No need to be
so verbose in TARGET_XML_FILES, let meson prepend the directory.

Except meson.build lines, this is a mechanical change done running:

 $ sed -i -e s,gdb-xml/,,g $(git grep -l gdb-xml configs/targets/)

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Reviewed-by: Warner Losh <imp@bsdimp.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Alex Bennée <alex.bennee@linaro.org>
Acked-by: Alex Bennée <alex.bennee@linaro.org>
---
 configs/targets/aarch64-bsd-user.mak        | 2 +-
 configs/targets/aarch64-linux-user.mak      | 2 +-
 configs/targets/aarch64-softmmu.mak         | 2 +-
 configs/targets/aarch64_be-linux-user.mak   | 2 +-
 configs/targets/alpha-linux-user.mak        | 2 +-
 configs/targets/alpha-softmmu.mak           | 2 +-
 configs/targets/arm-bsd-user.mak            | 2 +-
 configs/targets/arm-linux-user.mak          | 2 +-
 configs/targets/arm-softmmu.mak             | 2 +-
 configs/targets/armeb-linux-user.mak        | 2 +-
 configs/targets/avr-softmmu.mak             | 2 +-
 configs/targets/hexagon-linux-user.mak      | 2 +-
 configs/targets/i386-bsd-user.mak           | 2 +-
 configs/targets/i386-linux-user.mak         | 2 +-
 configs/targets/i386-softmmu.mak            | 2 +-
 configs/targets/loongarch64-linux-user.mak  | 2 +-
 configs/targets/loongarch64-softmmu.mak     | 2 +-
 configs/targets/m68k-linux-user.mak         | 2 +-
 configs/targets/m68k-softmmu.mak            | 2 +-
 configs/targets/microblaze-linux-user.mak   | 2 +-
 configs/targets/microblaze-softmmu.mak      | 2 +-
 configs/targets/microblazeel-linux-user.mak | 2 +-
 configs/targets/or1k-linux-user.mak         | 2 +-
 configs/targets/or1k-softmmu.mak            | 2 +-
 configs/targets/ppc-linux-user.mak          | 2 +-
 configs/targets/ppc-softmmu.mak             | 2 +-
 configs/targets/ppc64-linux-user.mak        | 2 +-
 configs/targets/ppc64-softmmu.mak           | 2 +-
 configs/targets/ppc64le-linux-user.mak      | 2 +-
 configs/targets/riscv32-linux-user.mak      | 2 +-
 configs/targets/riscv32-softmmu.mak         | 2 +-
 configs/targets/riscv64-bsd-user.mak        | 2 +-
 configs/targets/riscv64-linux-user.mak      | 2 +-
 configs/targets/riscv64-softmmu.mak         | 2 +-
 configs/targets/rx-softmmu.mak              | 2 +-
 configs/targets/s390x-linux-user.mak        | 2 +-
 configs/targets/s390x-softmmu.mak           | 2 +-
 configs/targets/sparc-linux-user.mak        | 2 +-
 configs/targets/sparc-softmmu.mak           | 2 +-
 configs/targets/sparc32plus-linux-user.mak  | 2 +-
 configs/targets/sparc64-linux-user.mak      | 2 +-
 configs/targets/sparc64-softmmu.mak         | 2 +-
 configs/targets/x86_64-bsd-user.mak         | 2 +-
 configs/targets/x86_64-linux-user.mak       | 2 +-
 configs/targets/x86_64-softmmu.mak          | 2 +-
 meson.build                                 | 6 +++++-
 46 files changed, 50 insertions(+), 46 deletions(-)

diff --git a/configs/targets/aarch64-bsd-user.mak b/configs/targets/aarch64-bsd-user.mak
index 03979d82402..814ed2d8bfe 100644
--- a/configs/targets/aarch64-bsd-user.mak
+++ b/configs/targets/aarch64-bsd-user.mak
@@ -1,4 +1,4 @@
 TARGET_ARCH=aarch64
 TARGET_BASE_ARCH=arm
-TARGET_XML_FILES= gdb-xml/aarch64-core.xml gdb-xml/aarch64-fpu.xml gdb-xml/aarch64-pauth.xml gdb-xml/aarch64-mte.xml gdb-xml/aarch64-sme2.xml
+TARGET_XML_FILES= aarch64-core.xml aarch64-fpu.xml aarch64-pauth.xml aarch64-mte.xml aarch64-sme2.xml
 TARGET_LONG_BITS=64
diff --git a/configs/targets/aarch64-linux-user.mak b/configs/targets/aarch64-linux-user.mak
index bf328b3b80c..ddfacc092dd 100644
--- a/configs/targets/aarch64-linux-user.mak
+++ b/configs/targets/aarch64-linux-user.mak
@@ -1,6 +1,6 @@
 TARGET_ARCH=aarch64
 TARGET_BASE_ARCH=arm
-TARGET_XML_FILES= gdb-xml/aarch64-core.xml gdb-xml/aarch64-fpu.xml gdb-xml/aarch64-pauth.xml gdb-xml/aarch64-mte.xml gdb-xml/aarch64-sme2.xml
+TARGET_XML_FILES= aarch64-core.xml aarch64-fpu.xml aarch64-pauth.xml aarch64-mte.xml aarch64-sme2.xml
 TARGET_HAS_BFLT=y
 CONFIG_SEMIHOSTING=y
 CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y
diff --git a/configs/targets/aarch64-softmmu.mak b/configs/targets/aarch64-softmmu.mak
index d14bcfc4900..9a20187e2c1 100644
--- a/configs/targets/aarch64-softmmu.mak
+++ b/configs/targets/aarch64-softmmu.mak
@@ -1,7 +1,7 @@
 TARGET_ARCH=aarch64
 TARGET_BASE_ARCH=arm
 TARGET_KVM_HAVE_GUEST_DEBUG=y
-TARGET_XML_FILES= gdb-xml/aarch64-core.xml gdb-xml/aarch64-fpu.xml gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml gdb-xml/arm-m-profile-mve.xml gdb-xml/aarch64-pauth.xml gdb-xml/aarch64-sme2.xml
+TARGET_XML_FILES= aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-vfp-sysregs.xml arm-neon.xml arm-m-profile.xml arm-m-profile-mve.xml aarch64-pauth.xml aarch64-sme2.xml
 # needed by boot.c
 TARGET_NEED_FDT=y
 TARGET_LONG_BITS=64
diff --git a/configs/targets/aarch64_be-linux-user.mak b/configs/targets/aarch64_be-linux-user.mak
index 284430add7b..83209fa2ae5 100644
--- a/configs/targets/aarch64_be-linux-user.mak
+++ b/configs/targets/aarch64_be-linux-user.mak
@@ -1,7 +1,7 @@
 TARGET_ARCH=aarch64
 TARGET_BASE_ARCH=arm
 TARGET_BIG_ENDIAN=y
-TARGET_XML_FILES= gdb-xml/aarch64-core.xml gdb-xml/aarch64-fpu.xml gdb-xml/aarch64-pauth.xml gdb-xml/aarch64-mte.xml gdb-xml/aarch64-sme2.xml
+TARGET_XML_FILES= aarch64-core.xml aarch64-fpu.xml aarch64-pauth.xml aarch64-mte.xml aarch64-sme2.xml
 TARGET_HAS_BFLT=y
 CONFIG_SEMIHOSTING=y
 CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y
diff --git a/configs/targets/alpha-linux-user.mak b/configs/targets/alpha-linux-user.mak
index 2f1312f0362..fbb9c680915 100644
--- a/configs/targets/alpha-linux-user.mak
+++ b/configs/targets/alpha-linux-user.mak
@@ -2,6 +2,6 @@ TARGET_ARCH=alpha
 TARGET_SYSTBL_ABI=common
 TARGET_SYSTBL=syscall.tbl
 TARGET_LONG_BITS=64
-TARGET_XML_FILES= gdb-xml/alpha-core.xml
+TARGET_XML_FILES= alpha-core.xml
 TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API=y
 TARGET_NOT_USING_LEGACY_LDST_PHYS_API=y
diff --git a/configs/targets/alpha-softmmu.mak b/configs/targets/alpha-softmmu.mak
index 5c6af0eafc1..fb412d1b53f 100644
--- a/configs/targets/alpha-softmmu.mak
+++ b/configs/targets/alpha-softmmu.mak
@@ -1,5 +1,5 @@
 TARGET_ARCH=alpha
 TARGET_LONG_BITS=64
-TARGET_XML_FILES= gdb-xml/alpha-core.xml
+TARGET_XML_FILES= alpha-core.xml
 TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API=y
 TARGET_NOT_USING_LEGACY_LDST_PHYS_API=y
diff --git a/configs/targets/arm-bsd-user.mak b/configs/targets/arm-bsd-user.mak
index 472a4f9fb11..b520819e776 100644
--- a/configs/targets/arm-bsd-user.mak
+++ b/configs/targets/arm-bsd-user.mak
@@ -1,3 +1,3 @@
 TARGET_ARCH=arm
-TARGET_XML_FILES= gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml gdb-xml/arm-m-profile-mve.xml
+TARGET_XML_FILES= arm-core.xml arm-vfp.xml arm-vfp3.xml arm-vfp-sysregs.xml arm-neon.xml arm-m-profile.xml arm-m-profile-mve.xml
 TARGET_LONG_BITS=32
diff --git a/configs/targets/arm-linux-user.mak b/configs/targets/arm-linux-user.mak
index bf35ded7fea..3793782d067 100644
--- a/configs/targets/arm-linux-user.mak
+++ b/configs/targets/arm-linux-user.mak
@@ -1,7 +1,7 @@
 TARGET_ARCH=arm
 TARGET_SYSTBL_ABI=common,oabi
 TARGET_SYSTBL=syscall.tbl
-TARGET_XML_FILES= gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml gdb-xml/arm-m-profile-mve.xml
+TARGET_XML_FILES= arm-core.xml arm-vfp.xml arm-vfp3.xml arm-vfp-sysregs.xml arm-neon.xml arm-m-profile.xml arm-m-profile-mve.xml
 TARGET_HAS_BFLT=y
 CONFIG_SEMIHOSTING=y
 CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y
diff --git a/configs/targets/arm-softmmu.mak b/configs/targets/arm-softmmu.mak
index 6a5a8eda949..35af7da79f2 100644
--- a/configs/targets/arm-softmmu.mak
+++ b/configs/targets/arm-softmmu.mak
@@ -1,5 +1,5 @@
 TARGET_ARCH=arm
-TARGET_XML_FILES= gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml gdb-xml/arm-m-profile-mve.xml
+TARGET_XML_FILES= arm-core.xml arm-vfp.xml arm-vfp3.xml arm-vfp-sysregs.xml arm-neon.xml arm-m-profile.xml arm-m-profile-mve.xml
 # needed by boot.c
 TARGET_NEED_FDT=y
 TARGET_LONG_BITS=32
diff --git a/configs/targets/armeb-linux-user.mak b/configs/targets/armeb-linux-user.mak
index 35fa4d91b3c..536bc95af71 100644
--- a/configs/targets/armeb-linux-user.mak
+++ b/configs/targets/armeb-linux-user.mak
@@ -2,7 +2,7 @@ TARGET_ARCH=arm
 TARGET_SYSTBL_ABI=common,oabi
 TARGET_SYSTBL=syscall.tbl
 TARGET_BIG_ENDIAN=y
-TARGET_XML_FILES= gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml gdb-xml/arm-m-profile-mve.xml
+TARGET_XML_FILES= arm-core.xml arm-vfp.xml arm-vfp3.xml arm-vfp-sysregs.xml arm-neon.xml arm-m-profile.xml arm-m-profile-mve.xml
 TARGET_HAS_BFLT=y
 CONFIG_SEMIHOSTING=y
 CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y
diff --git a/configs/targets/avr-softmmu.mak b/configs/targets/avr-softmmu.mak
index baf20fb7f2f..0a00f128749 100644
--- a/configs/targets/avr-softmmu.mak
+++ b/configs/targets/avr-softmmu.mak
@@ -1,4 +1,4 @@
 TARGET_ARCH=avr
-TARGET_XML_FILES= gdb-xml/avr-cpu.xml
+TARGET_XML_FILES= avr-cpu.xml
 TARGET_LONG_BITS=32
 TARGET_NOT_USING_LEGACY_LDST_PHYS_API=y
diff --git a/configs/targets/hexagon-linux-user.mak b/configs/targets/hexagon-linux-user.mak
index 6763e2111d5..51fde5d60e6 100644
--- a/configs/targets/hexagon-linux-user.mak
+++ b/configs/targets/hexagon-linux-user.mak
@@ -1,5 +1,5 @@
 TARGET_ARCH=hexagon
-TARGET_XML_FILES=gdb-xml/hexagon-core.xml gdb-xml/hexagon-hvx.xml
+TARGET_XML_FILES=hexagon-core.xml hexagon-hvx.xml
 TARGET_SYSTBL=syscall.tbl
 TARGET_SYSTBL_ABI=common,32,hexagon,time32,stat64,rlimit,renameat
 TARGET_LONG_BITS=32
diff --git a/configs/targets/i386-bsd-user.mak b/configs/targets/i386-bsd-user.mak
index 70e098da491..485f571cb6c 100644
--- a/configs/targets/i386-bsd-user.mak
+++ b/configs/targets/i386-bsd-user.mak
@@ -1,3 +1,3 @@
 TARGET_ARCH=i386
-TARGET_XML_FILES= gdb-xml/i386-32bit.xml
+TARGET_XML_FILES= i386-32bit.xml
 TARGET_LONG_BITS=32
diff --git a/configs/targets/i386-linux-user.mak b/configs/targets/i386-linux-user.mak
index ea68a266fce..a3ea4c39c52 100644
--- a/configs/targets/i386-linux-user.mak
+++ b/configs/targets/i386-linux-user.mak
@@ -1,5 +1,5 @@
 TARGET_ARCH=i386
 TARGET_SYSTBL_ABI=i386
 TARGET_SYSTBL=syscall_32.tbl
-TARGET_XML_FILES= gdb-xml/i386-32bit.xml gdb-xml/i386-32bit-linux.xml
+TARGET_XML_FILES= i386-32bit.xml i386-32bit-linux.xml
 TARGET_LONG_BITS=32
diff --git a/configs/targets/i386-softmmu.mak b/configs/targets/i386-softmmu.mak
index 19ef4a6690d..38a8f85201f 100644
--- a/configs/targets/i386-softmmu.mak
+++ b/configs/targets/i386-softmmu.mak
@@ -1,6 +1,6 @@
 TARGET_ARCH=i386
 TARGET_KVM_HAVE_GUEST_DEBUG=y
 TARGET_KVM_HAVE_RESET_PARKED_VCPU=y
-TARGET_XML_FILES= gdb-xml/i386-32bit.xml
+TARGET_XML_FILES= i386-32bit.xml
 TARGET_LONG_BITS=32
 TARGET_NOT_USING_LEGACY_LDST_PHYS_API=y
diff --git a/configs/targets/loongarch64-linux-user.mak b/configs/targets/loongarch64-linux-user.mak
index 4ea12794705..63b0bfc07b8 100644
--- a/configs/targets/loongarch64-linux-user.mak
+++ b/configs/targets/loongarch64-linux-user.mak
@@ -1,7 +1,7 @@
 # Default configuration for loongarch64-linux-user
 TARGET_ARCH=loongarch64
 TARGET_BASE_ARCH=loongarch
-TARGET_XML_FILES=gdb-xml/loongarch-base64.xml gdb-xml/loongarch-fpu.xml gdb-xml/loongarch-lsx.xml gdb-xml/loongarch-lasx.xml
+TARGET_XML_FILES=loongarch-base64.xml loongarch-fpu.xml loongarch-lsx.xml loongarch-lasx.xml
 TARGET_SYSTBL=syscall.tbl
 TARGET_SYSTBL_ABI=common,64
 TARGET_LONG_BITS=64
diff --git a/configs/targets/loongarch64-softmmu.mak b/configs/targets/loongarch64-softmmu.mak
index 38c0f68ddbc..476407f9413 100644
--- a/configs/targets/loongarch64-softmmu.mak
+++ b/configs/targets/loongarch64-softmmu.mak
@@ -1,7 +1,7 @@
 TARGET_ARCH=loongarch64
 TARGET_BASE_ARCH=loongarch
 TARGET_KVM_HAVE_GUEST_DEBUG=y
-TARGET_XML_FILES= gdb-xml/loongarch-base32.xml gdb-xml/loongarch-base64.xml gdb-xml/loongarch-fpu.xml gdb-xml/loongarch-lsx.xml gdb-xml/loongarch-lasx.xml
+TARGET_XML_FILES= loongarch-base32.xml loongarch-base64.xml loongarch-fpu.xml loongarch-lsx.xml loongarch-lasx.xml
 # all boards require libfdt
 TARGET_NEED_FDT=y
 TARGET_LONG_BITS=64
diff --git a/configs/targets/m68k-linux-user.mak b/configs/targets/m68k-linux-user.mak
index 2d9bae22707..b64f33e759a 100644
--- a/configs/targets/m68k-linux-user.mak
+++ b/configs/targets/m68k-linux-user.mak
@@ -2,6 +2,6 @@ TARGET_ARCH=m68k
 TARGET_SYSTBL_ABI=common
 TARGET_SYSTBL=syscall.tbl
 TARGET_BIG_ENDIAN=y
-TARGET_XML_FILES= gdb-xml/cf-core.xml gdb-xml/cf-fp.xml gdb-xml/m68k-core.xml gdb-xml/m68k-fp.xml
+TARGET_XML_FILES= cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml
 TARGET_HAS_BFLT=y
 TARGET_LONG_BITS=32
diff --git a/configs/targets/m68k-softmmu.mak b/configs/targets/m68k-softmmu.mak
index bacc52e96a9..0bc889f326e 100644
--- a/configs/targets/m68k-softmmu.mak
+++ b/configs/targets/m68k-softmmu.mak
@@ -1,4 +1,4 @@
 TARGET_ARCH=m68k
 TARGET_BIG_ENDIAN=y
-TARGET_XML_FILES= gdb-xml/cf-core.xml gdb-xml/cf-fp.xml gdb-xml/m68k-core.xml gdb-xml/m68k-fp.xml
+TARGET_XML_FILES= cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml
 TARGET_LONG_BITS=32
diff --git a/configs/targets/microblaze-linux-user.mak b/configs/targets/microblaze-linux-user.mak
index 37727797695..31150f980c8 100644
--- a/configs/targets/microblaze-linux-user.mak
+++ b/configs/targets/microblaze-linux-user.mak
@@ -3,5 +3,5 @@ TARGET_SYSTBL_ABI=common
 TARGET_SYSTBL=syscall.tbl
 TARGET_BIG_ENDIAN=y
 TARGET_HAS_BFLT=y
-TARGET_XML_FILES=gdb-xml/microblaze-core.xml gdb-xml/microblaze-stack-protect.xml
+TARGET_XML_FILES=microblaze-core.xml microblaze-stack-protect.xml
 TARGET_LONG_BITS=32
diff --git a/configs/targets/microblaze-softmmu.mak b/configs/targets/microblaze-softmmu.mak
index cf635798c90..f2b6ab93fbe 100644
--- a/configs/targets/microblaze-softmmu.mak
+++ b/configs/targets/microblaze-softmmu.mak
@@ -2,6 +2,6 @@ TARGET_ARCH=microblaze
 TARGET_BIG_ENDIAN=y
 # needed by boot.c
 TARGET_NEED_FDT=y
-TARGET_XML_FILES=gdb-xml/microblaze-core.xml gdb-xml/microblaze-stack-protect.xml
+TARGET_XML_FILES=microblaze-core.xml microblaze-stack-protect.xml
 TARGET_LONG_BITS=32
 TARGET_NOT_USING_LEGACY_LDST_PHYS_API=y
diff --git a/configs/targets/microblazeel-linux-user.mak b/configs/targets/microblazeel-linux-user.mak
index a51a05488d3..5dcd4b5b183 100644
--- a/configs/targets/microblazeel-linux-user.mak
+++ b/configs/targets/microblazeel-linux-user.mak
@@ -2,5 +2,5 @@ TARGET_ARCH=microblaze
 TARGET_SYSTBL_ABI=common
 TARGET_SYSTBL=syscall.tbl
 TARGET_HAS_BFLT=y
-TARGET_XML_FILES=gdb-xml/microblaze-core.xml gdb-xml/microblaze-stack-protect.xml
+TARGET_XML_FILES=microblaze-core.xml microblaze-stack-protect.xml
 TARGET_LONG_BITS=32
diff --git a/configs/targets/or1k-linux-user.mak b/configs/targets/or1k-linux-user.mak
index 9f8c178ef10..ecb95253680 100644
--- a/configs/targets/or1k-linux-user.mak
+++ b/configs/targets/or1k-linux-user.mak
@@ -2,6 +2,6 @@ TARGET_ARCH=or1k
 TARGET_BIG_ENDIAN=y
 TARGET_SYSTBL_ABI=common,32,or1k,time32,stat64,rlimit,renameat
 TARGET_SYSTBL=syscall.tbl
-TARGET_XML_FILES= gdb-xml/or1k-core.xml
+TARGET_XML_FILES= or1k-core.xml
 TARGET_LONG_BITS=32
 TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API=y
diff --git a/configs/targets/or1k-softmmu.mak b/configs/targets/or1k-softmmu.mak
index 24d89bc3e65..c3ca0a2c6ba 100644
--- a/configs/targets/or1k-softmmu.mak
+++ b/configs/targets/or1k-softmmu.mak
@@ -2,7 +2,7 @@ TARGET_ARCH=or1k
 TARGET_BIG_ENDIAN=y
 # needed by boot.c and all boards
 TARGET_NEED_FDT=y
-TARGET_XML_FILES= gdb-xml/or1k-core.xml
+TARGET_XML_FILES= or1k-core.xml
 TARGET_LONG_BITS=32
 TARGET_NOT_USING_LEGACY_LDST_PHYS_API=y
 TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API=y
diff --git a/configs/targets/ppc-linux-user.mak b/configs/targets/ppc-linux-user.mak
index 970d04a5ba1..5ddec598760 100644
--- a/configs/targets/ppc-linux-user.mak
+++ b/configs/targets/ppc-linux-user.mak
@@ -2,5 +2,5 @@ TARGET_ARCH=ppc
 TARGET_SYSTBL_ABI=common,nospu,32
 TARGET_SYSTBL=syscall.tbl
 TARGET_BIG_ENDIAN=y
-TARGET_XML_FILES= gdb-xml/power-core.xml gdb-xml/power-fpu.xml gdb-xml/power-altivec.xml gdb-xml/power-spe.xml
+TARGET_XML_FILES= power-core.xml power-fpu.xml power-altivec.xml power-spe.xml
 TARGET_LONG_BITS=32
diff --git a/configs/targets/ppc-softmmu.mak b/configs/targets/ppc-softmmu.mak
index 9bfa7df6c36..867898bd47c 100644
--- a/configs/targets/ppc-softmmu.mak
+++ b/configs/targets/ppc-softmmu.mak
@@ -1,5 +1,5 @@
 TARGET_ARCH=ppc
 TARGET_BIG_ENDIAN=y
 TARGET_KVM_HAVE_GUEST_DEBUG=y
-TARGET_XML_FILES= gdb-xml/power-core.xml gdb-xml/power-fpu.xml gdb-xml/power-altivec.xml gdb-xml/power-spe.xml
+TARGET_XML_FILES= power-core.xml power-fpu.xml power-altivec.xml power-spe.xml
 TARGET_LONG_BITS=32
diff --git a/configs/targets/ppc64-linux-user.mak b/configs/targets/ppc64-linux-user.mak
index 461f1c67d15..fcedce1b4e0 100644
--- a/configs/targets/ppc64-linux-user.mak
+++ b/configs/targets/ppc64-linux-user.mak
@@ -4,5 +4,5 @@ TARGET_ABI_DIR=ppc
 TARGET_SYSTBL_ABI=common,nospu,64
 TARGET_SYSTBL=syscall.tbl
 TARGET_BIG_ENDIAN=y
-TARGET_XML_FILES= gdb-xml/power64-core.xml gdb-xml/power-fpu.xml gdb-xml/power-altivec.xml gdb-xml/power-spe.xml gdb-xml/power-vsx.xml
+TARGET_XML_FILES= power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml
 TARGET_LONG_BITS=64
diff --git a/configs/targets/ppc64-softmmu.mak b/configs/targets/ppc64-softmmu.mak
index 74572864b36..10d7a2681e7 100644
--- a/configs/targets/ppc64-softmmu.mak
+++ b/configs/targets/ppc64-softmmu.mak
@@ -2,7 +2,7 @@ TARGET_ARCH=ppc64
 TARGET_BASE_ARCH=ppc
 TARGET_BIG_ENDIAN=y
 TARGET_KVM_HAVE_GUEST_DEBUG=y
-TARGET_XML_FILES= gdb-xml/power64-core.xml gdb-xml/power-fpu.xml gdb-xml/power-altivec.xml gdb-xml/power-spe.xml gdb-xml/power-vsx.xml
+TARGET_XML_FILES= power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml
 # all boards require libfdt
 TARGET_NEED_FDT=y
 TARGET_LONG_BITS=64
diff --git a/configs/targets/ppc64le-linux-user.mak b/configs/targets/ppc64le-linux-user.mak
index cf9d8a400d9..b5a81b58868 100644
--- a/configs/targets/ppc64le-linux-user.mak
+++ b/configs/targets/ppc64le-linux-user.mak
@@ -3,5 +3,5 @@ TARGET_BASE_ARCH=ppc
 TARGET_ABI_DIR=ppc
 TARGET_SYSTBL_ABI=common,nospu,64
 TARGET_SYSTBL=syscall.tbl
-TARGET_XML_FILES= gdb-xml/power64-core.xml gdb-xml/power-fpu.xml gdb-xml/power-altivec.xml gdb-xml/power-spe.xml gdb-xml/power-vsx.xml
+TARGET_XML_FILES= power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml
 TARGET_LONG_BITS=64
diff --git a/configs/targets/riscv32-linux-user.mak b/configs/targets/riscv32-linux-user.mak
index a0ef03c0c3f..f069ab9a0f9 100644
--- a/configs/targets/riscv32-linux-user.mak
+++ b/configs/targets/riscv32-linux-user.mak
@@ -1,7 +1,7 @@
 TARGET_ARCH=riscv32
 TARGET_BASE_ARCH=riscv
 TARGET_ABI_DIR=riscv
-TARGET_XML_FILES= gdb-xml/riscv-32bit-cpu.xml gdb-xml/riscv-32bit-fpu.xml gdb-xml/riscv-64bit-fpu.xml gdb-xml/riscv-32bit-virtual.xml
+TARGET_XML_FILES= riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-virtual.xml
 CONFIG_SEMIHOSTING=y
 CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y
 TARGET_SYSTBL_ABI=32
diff --git a/configs/targets/riscv32-softmmu.mak b/configs/targets/riscv32-softmmu.mak
index 7476e596082..26080599be7 100644
--- a/configs/targets/riscv32-softmmu.mak
+++ b/configs/targets/riscv32-softmmu.mak
@@ -1,6 +1,6 @@
 TARGET_ARCH=riscv32
 TARGET_BASE_ARCH=riscv
-TARGET_XML_FILES= gdb-xml/riscv-32bit-cpu.xml gdb-xml/riscv-32bit-fpu.xml gdb-xml/riscv-64bit-fpu.xml gdb-xml/riscv-32bit-virtual.xml
+TARGET_XML_FILES= riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-virtual.xml
 # needed by boot.c
 TARGET_NEED_FDT=y
 TARGET_LONG_BITS=32
diff --git a/configs/targets/riscv64-bsd-user.mak b/configs/targets/riscv64-bsd-user.mak
index c6348a79629..bc85d9ed04e 100644
--- a/configs/targets/riscv64-bsd-user.mak
+++ b/configs/targets/riscv64-bsd-user.mak
@@ -1,5 +1,5 @@
 TARGET_ARCH=riscv64
 TARGET_BASE_ARCH=riscv
 TARGET_ABI_DIR=riscv
-TARGET_XML_FILES= gdb-xml/riscv-64bit-cpu.xml gdb-xml/riscv-32bit-fpu.xml gdb-xml/riscv-64bit-fpu.xml gdb-xml/riscv-64bit-virtual.xml
+TARGET_XML_FILES= riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-virtual.xml
 TARGET_LONG_BITS=64
diff --git a/configs/targets/riscv64-linux-user.mak b/configs/targets/riscv64-linux-user.mak
index aac7568305d..bca08645124 100644
--- a/configs/targets/riscv64-linux-user.mak
+++ b/configs/targets/riscv64-linux-user.mak
@@ -1,7 +1,7 @@
 TARGET_ARCH=riscv64
 TARGET_BASE_ARCH=riscv
 TARGET_ABI_DIR=riscv
-TARGET_XML_FILES= gdb-xml/riscv-64bit-cpu.xml gdb-xml/riscv-32bit-fpu.xml gdb-xml/riscv-64bit-fpu.xml gdb-xml/riscv-64bit-virtual.xml
+TARGET_XML_FILES= riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-virtual.xml
 CONFIG_SEMIHOSTING=y
 CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y
 TARGET_SYSTBL_ABI=64
diff --git a/configs/targets/riscv64-softmmu.mak b/configs/targets/riscv64-softmmu.mak
index f836f08c5b9..5059c550480 100644
--- a/configs/targets/riscv64-softmmu.mak
+++ b/configs/targets/riscv64-softmmu.mak
@@ -1,7 +1,7 @@
 TARGET_ARCH=riscv64
 TARGET_BASE_ARCH=riscv
 TARGET_KVM_HAVE_GUEST_DEBUG=y
-TARGET_XML_FILES= gdb-xml/riscv-64bit-cpu.xml gdb-xml/riscv-32bit-fpu.xml gdb-xml/riscv-64bit-fpu.xml gdb-xml/riscv-64bit-virtual.xml gdb-xml/riscv-32bit-cpu.xml gdb-xml/riscv-32bit-virtual.xml
+TARGET_XML_FILES= riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-virtual.xml riscv-32bit-cpu.xml riscv-32bit-virtual.xml
 # needed by boot.c
 TARGET_NEED_FDT=y
 TARGET_LONG_BITS=64
diff --git a/configs/targets/rx-softmmu.mak b/configs/targets/rx-softmmu.mak
index 281a165873a..1959d1b4ccc 100644
--- a/configs/targets/rx-softmmu.mak
+++ b/configs/targets/rx-softmmu.mak
@@ -1,5 +1,5 @@
 TARGET_ARCH=rx
-TARGET_XML_FILES= gdb-xml/rx-core.xml
+TARGET_XML_FILES= rx-core.xml
 # all boards require libfdt
 TARGET_NEED_FDT=y
 TARGET_LONG_BITS=32
diff --git a/configs/targets/s390x-linux-user.mak b/configs/targets/s390x-linux-user.mak
index e3723f5dc54..2dbcae0a6e2 100644
--- a/configs/targets/s390x-linux-user.mak
+++ b/configs/targets/s390x-linux-user.mak
@@ -2,6 +2,6 @@ TARGET_ARCH=s390x
 TARGET_SYSTBL_ABI=common,64
 TARGET_SYSTBL=syscall.tbl
 TARGET_BIG_ENDIAN=y
-TARGET_XML_FILES= gdb-xml/s390x-core64.xml gdb-xml/s390-acr.xml gdb-xml/s390-fpr.xml gdb-xml/s390-vx.xml gdb-xml/s390-cr.xml gdb-xml/s390-virt.xml gdb-xml/s390-virt-kvm.xml gdb-xml/s390-gs.xml
+TARGET_XML_FILES= s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-virt-kvm.xml s390-gs.xml
 TARGET_LONG_BITS=64
 TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API=y
diff --git a/configs/targets/s390x-softmmu.mak b/configs/targets/s390x-softmmu.mak
index 544657cfe2d..e273075f1a9 100644
--- a/configs/targets/s390x-softmmu.mak
+++ b/configs/targets/s390x-softmmu.mak
@@ -1,6 +1,6 @@
 TARGET_ARCH=s390x
 TARGET_BIG_ENDIAN=y
 TARGET_KVM_HAVE_GUEST_DEBUG=y
-TARGET_XML_FILES= gdb-xml/s390x-core64.xml gdb-xml/s390-acr.xml gdb-xml/s390-fpr.xml gdb-xml/s390-vx.xml gdb-xml/s390-cr.xml gdb-xml/s390-virt.xml gdb-xml/s390-virt-kvm.xml gdb-xml/s390-gs.xml
+TARGET_XML_FILES= s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-virt-kvm.xml s390-gs.xml
 TARGET_LONG_BITS=64
 TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API=y
diff --git a/configs/targets/sparc-linux-user.mak b/configs/targets/sparc-linux-user.mak
index 01446e28783..2b6f8077399 100644
--- a/configs/targets/sparc-linux-user.mak
+++ b/configs/targets/sparc-linux-user.mak
@@ -2,6 +2,6 @@ TARGET_ARCH=sparc
 TARGET_SYSTBL_ABI=common,32
 TARGET_SYSTBL=syscall.tbl
 TARGET_BIG_ENDIAN=y
-TARGET_XML_FILES=gdb-xml/sparc32-cpu.xml gdb-xml/sparc32-fpu.xml gdb-xml/sparc32-cp0.xml
+TARGET_XML_FILES=sparc32-cpu.xml sparc32-fpu.xml sparc32-cp0.xml
 TARGET_LONG_BITS=32
 TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API=y
diff --git a/configs/targets/sparc-softmmu.mak b/configs/targets/sparc-softmmu.mak
index ed846735f41..126ce12abb0 100644
--- a/configs/targets/sparc-softmmu.mak
+++ b/configs/targets/sparc-softmmu.mak
@@ -1,6 +1,6 @@
 TARGET_ARCH=sparc
 TARGET_BIG_ENDIAN=y
-TARGET_XML_FILES=gdb-xml/sparc32-cpu.xml gdb-xml/sparc32-fpu.xml gdb-xml/sparc32-cp0.xml
+TARGET_XML_FILES=sparc32-cpu.xml sparc32-fpu.xml sparc32-cp0.xml
 TARGET_LONG_BITS=32
 TARGET_NOT_USING_LEGACY_LDST_PHYS_API=y
 TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API=y
diff --git a/configs/targets/sparc32plus-linux-user.mak b/configs/targets/sparc32plus-linux-user.mak
index cf49c53ce44..a1d8530ecfd 100644
--- a/configs/targets/sparc32plus-linux-user.mak
+++ b/configs/targets/sparc32plus-linux-user.mak
@@ -5,6 +5,6 @@ TARGET_ABI_DIR=sparc
 TARGET_SYSTBL_ABI=common,32
 TARGET_SYSTBL=syscall.tbl
 TARGET_BIG_ENDIAN=y
-TARGET_XML_FILES=gdb-xml/sparc64-cpu.xml gdb-xml/sparc64-fpu.xml gdb-xml/sparc64-cp0.xml
+TARGET_XML_FILES=sparc64-cpu.xml sparc64-fpu.xml sparc64-cp0.xml
 TARGET_LONG_BITS=64
 TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API=y
diff --git a/configs/targets/sparc64-linux-user.mak b/configs/targets/sparc64-linux-user.mak
index 81d18fcc85b..c48a03aeb9e 100644
--- a/configs/targets/sparc64-linux-user.mak
+++ b/configs/targets/sparc64-linux-user.mak
@@ -4,6 +4,6 @@ TARGET_ABI_DIR=sparc
 TARGET_SYSTBL_ABI=common,64
 TARGET_SYSTBL=syscall.tbl
 TARGET_BIG_ENDIAN=y
-TARGET_XML_FILES=gdb-xml/sparc64-cpu.xml gdb-xml/sparc64-fpu.xml gdb-xml/sparc64-cp0.xml
+TARGET_XML_FILES=sparc64-cpu.xml sparc64-fpu.xml sparc64-cp0.xml
 TARGET_LONG_BITS=64
 TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API=y
diff --git a/configs/targets/sparc64-softmmu.mak b/configs/targets/sparc64-softmmu.mak
index 602783ef0f6..4e621fb8e39 100644
--- a/configs/targets/sparc64-softmmu.mak
+++ b/configs/targets/sparc64-softmmu.mak
@@ -1,7 +1,7 @@
 TARGET_ARCH=sparc64
 TARGET_BASE_ARCH=sparc
 TARGET_BIG_ENDIAN=y
-TARGET_XML_FILES=gdb-xml/sparc64-cpu.xml gdb-xml/sparc64-fpu.xml gdb-xml/sparc64-cp0.xml
+TARGET_XML_FILES=sparc64-cpu.xml sparc64-fpu.xml sparc64-cp0.xml
 TARGET_LONG_BITS=64
 TARGET_NOT_USING_LEGACY_LDST_PHYS_API=y
 TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API=y
diff --git a/configs/targets/x86_64-bsd-user.mak b/configs/targets/x86_64-bsd-user.mak
index d62d656f2c6..d754186347f 100644
--- a/configs/targets/x86_64-bsd-user.mak
+++ b/configs/targets/x86_64-bsd-user.mak
@@ -1,4 +1,4 @@
 TARGET_ARCH=x86_64
 TARGET_BASE_ARCH=i386
-TARGET_XML_FILES= gdb-xml/i386-64bit.xml
+TARGET_XML_FILES= i386-64bit.xml
 TARGET_LONG_BITS=64
diff --git a/configs/targets/x86_64-linux-user.mak b/configs/targets/x86_64-linux-user.mak
index b093ab5a167..7f9527fd1de 100644
--- a/configs/targets/x86_64-linux-user.mak
+++ b/configs/targets/x86_64-linux-user.mak
@@ -2,5 +2,5 @@ TARGET_ARCH=x86_64
 TARGET_BASE_ARCH=i386
 TARGET_SYSTBL_ABI=common,64
 TARGET_SYSTBL=syscall_64.tbl
-TARGET_XML_FILES= gdb-xml/i386-64bit.xml gdb-xml/i386-64bit-linux.xml
+TARGET_XML_FILES= i386-64bit.xml i386-64bit-linux.xml
 TARGET_LONG_BITS=64
diff --git a/configs/targets/x86_64-softmmu.mak b/configs/targets/x86_64-softmmu.mak
index 151862158c7..c7f8746b4f5 100644
--- a/configs/targets/x86_64-softmmu.mak
+++ b/configs/targets/x86_64-softmmu.mak
@@ -2,6 +2,6 @@ TARGET_ARCH=x86_64
 TARGET_BASE_ARCH=i386
 TARGET_KVM_HAVE_GUEST_DEBUG=y
 TARGET_KVM_HAVE_RESET_PARKED_VCPU=y
-TARGET_XML_FILES= gdb-xml/i386-64bit.xml gdb-xml/i386-64bit-apx.xml
+TARGET_XML_FILES= i386-64bit.xml i386-64bit-apx.xml
 TARGET_LONG_BITS=64
 TARGET_NOT_USING_LEGACY_LDST_PHYS_API=y
diff --git a/meson.build b/meson.build
index db8918dd303..8e8440941c0 100644
--- a/meson.build
+++ b/meson.build
@@ -4329,9 +4329,13 @@ foreach target : target_dirs
   endif
 
   if 'TARGET_XML_FILES' in config_target
+    gdbstub_xml_files = []
+    foreach gdbstub_xml : config_target['TARGET_XML_FILES'].split()
+      gdbstub_xml_files += 'gdb-xml/' + gdbstub_xml
+    endforeach
     gdbstub_xml = custom_target(target + '-gdbstub-xml.c',
                                 output: target + '-gdbstub-xml.c',
-                                input: files(config_target['TARGET_XML_FILES'].split()),
+                                input: files(gdbstub_xml_files),
                                 command: [feature_to_c, '@INPUT@'],
                                 capture: true)
     arch_srcs += gdbstub_xml
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 12/13] gdbstub: Move gdb-xml/ within gdbstub/
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
                   ` (10 preceding siblings ...)
  2026-03-10 15:53 ` [PATCH v2 11/13] gdbstub: Remove 'gdb-xml/' directory prefix in TARGET_XML_FILES Philippe Mathieu-Daudé
@ 2026-03-10 15:53 ` Philippe Mathieu-Daudé
  2026-03-10 15:53 ` [PATCH v2 13/13] gdbstub: Generate a single gdbstub-xml.c / gdb_static_features[] Philippe Mathieu-Daudé
  2026-03-10 15:59 ` [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
  13 siblings, 0 replies; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

gdb-xml/ files are only consumed by gdbstub API.
No need for a top-level entry, move them to gdbstub/.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Alex Bennée <alex.bennee@linaro.org>
Acked-by: Alex Bennée <alex.bennee@linaro.org>
---
 MAINTAINERS                                   | 19 +++++++++----------
 docs/devel/codebase.rst                       |  2 --
 meson.build                                   |  2 +-
 {gdb-xml => gdbstub/gdb-xml}/aarch64-core.xml |  0
 {gdb-xml => gdbstub/gdb-xml}/aarch64-fpu.xml  |  0
 {gdb-xml => gdbstub/gdb-xml}/aarch64-mte.xml  |  0
 .../gdb-xml}/aarch64-pauth.xml                |  0
 {gdb-xml => gdbstub/gdb-xml}/aarch64-sme2.xml |  0
 {gdb-xml => gdbstub/gdb-xml}/alpha-core.xml   |  0
 {gdb-xml => gdbstub/gdb-xml}/arm-core.xml     |  0
 .../gdb-xml}/arm-m-profile-mve.xml            |  0
 .../gdb-xml}/arm-m-profile.xml                |  0
 {gdb-xml => gdbstub/gdb-xml}/arm-neon.xml     |  0
 .../gdb-xml}/arm-vfp-sysregs.xml              |  0
 {gdb-xml => gdbstub/gdb-xml}/arm-vfp.xml      |  0
 {gdb-xml => gdbstub/gdb-xml}/arm-vfp3.xml     |  0
 {gdb-xml => gdbstub/gdb-xml}/avr-cpu.xml      |  0
 {gdb-xml => gdbstub/gdb-xml}/cf-core.xml      |  0
 {gdb-xml => gdbstub/gdb-xml}/cf-fp.xml        |  0
 {gdb-xml => gdbstub/gdb-xml}/hexagon-core.xml |  0
 {gdb-xml => gdbstub/gdb-xml}/hexagon-hvx.xml  |  0
 .../gdb-xml}/i386-32bit-linux.xml             |  0
 {gdb-xml => gdbstub/gdb-xml}/i386-32bit.xml   |  0
 .../gdb-xml}/i386-64bit-apx.xml               |  0
 .../gdb-xml}/i386-64bit-linux.xml             |  0
 {gdb-xml => gdbstub/gdb-xml}/i386-64bit.xml   |  0
 .../gdb-xml}/loongarch-base32.xml             |  0
 .../gdb-xml}/loongarch-base64.xml             |  0
 .../gdb-xml}/loongarch-fpu.xml                |  0
 .../gdb-xml}/loongarch-lasx.xml               |  0
 .../gdb-xml}/loongarch-lsx.xml                |  0
 {gdb-xml => gdbstub/gdb-xml}/m68k-core.xml    |  0
 {gdb-xml => gdbstub/gdb-xml}/m68k-fp.xml      |  0
 .../gdb-xml}/microblaze-core.xml              |  0
 .../gdb-xml}/microblaze-stack-protect.xml     |  0
 {gdb-xml => gdbstub/gdb-xml}/or1k-core.xml    |  0
 .../gdb-xml}/power-altivec.xml                |  0
 {gdb-xml => gdbstub/gdb-xml}/power-core.xml   |  0
 {gdb-xml => gdbstub/gdb-xml}/power-fpu.xml    |  0
 {gdb-xml => gdbstub/gdb-xml}/power-spe.xml    |  0
 {gdb-xml => gdbstub/gdb-xml}/power-vsx.xml    |  0
 {gdb-xml => gdbstub/gdb-xml}/power64-core.xml |  0
 .../gdb-xml}/riscv-32bit-cpu.xml              |  0
 .../gdb-xml}/riscv-32bit-fpu.xml              |  0
 .../gdb-xml}/riscv-32bit-virtual.xml          |  0
 .../gdb-xml}/riscv-64bit-cpu.xml              |  0
 .../gdb-xml}/riscv-64bit-fpu.xml              |  0
 .../gdb-xml}/riscv-64bit-virtual.xml          |  0
 {gdb-xml => gdbstub/gdb-xml}/rx-core.xml      |  0
 {gdb-xml => gdbstub/gdb-xml}/s390-acr.xml     |  0
 {gdb-xml => gdbstub/gdb-xml}/s390-cr.xml      |  0
 {gdb-xml => gdbstub/gdb-xml}/s390-fpr.xml     |  0
 {gdb-xml => gdbstub/gdb-xml}/s390-gs.xml      |  0
 .../gdb-xml}/s390-virt-kvm.xml                |  0
 {gdb-xml => gdbstub/gdb-xml}/s390-virt.xml    |  0
 {gdb-xml => gdbstub/gdb-xml}/s390-vx.xml      |  0
 {gdb-xml => gdbstub/gdb-xml}/s390x-core64.xml |  0
 {gdb-xml => gdbstub/gdb-xml}/sparc32-cp0.xml  |  0
 {gdb-xml => gdbstub/gdb-xml}/sparc32-cpu.xml  |  0
 {gdb-xml => gdbstub/gdb-xml}/sparc32-fpu.xml  |  0
 {gdb-xml => gdbstub/gdb-xml}/sparc64-cp0.xml  |  0
 {gdb-xml => gdbstub/gdb-xml}/sparc64-cpu.xml  |  0
 {gdb-xml => gdbstub/gdb-xml}/sparc64-fpu.xml  |  0
 63 files changed, 10 insertions(+), 13 deletions(-)
 rename {gdb-xml => gdbstub/gdb-xml}/aarch64-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/aarch64-fpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/aarch64-mte.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/aarch64-pauth.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/aarch64-sme2.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/alpha-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-m-profile-mve.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-m-profile.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-neon.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-vfp-sysregs.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-vfp.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/arm-vfp3.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/avr-cpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/cf-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/cf-fp.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/hexagon-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/hexagon-hvx.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/i386-32bit-linux.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/i386-32bit.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/i386-64bit-apx.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/i386-64bit-linux.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/i386-64bit.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/loongarch-base32.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/loongarch-base64.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/loongarch-fpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/loongarch-lasx.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/loongarch-lsx.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/m68k-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/m68k-fp.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/microblaze-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/microblaze-stack-protect.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/or1k-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/power-altivec.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/power-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/power-fpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/power-spe.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/power-vsx.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/power64-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/riscv-32bit-cpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/riscv-32bit-fpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/riscv-32bit-virtual.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/riscv-64bit-cpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/riscv-64bit-fpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/riscv-64bit-virtual.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/rx-core.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-acr.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-cr.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-fpr.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-gs.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-virt-kvm.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-virt.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390-vx.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/s390x-core64.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/sparc32-cp0.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/sparc32-cpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/sparc32-fpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/sparc64-cp0.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/sparc64-cpu.xml (100%)
 rename {gdb-xml => gdbstub/gdb-xml}/sparc64-fpu.xml (100%)

diff --git a/MAINTAINERS b/MAINTAINERS
index 9d1614fd7e9..247799c817c 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -106,7 +106,7 @@ M: Thomas Huth <thuth@redhat.com>
 S: Supported
 F: configs/devices/s390x-softmmu/default.mak
 F: configs/targets/s390x-softmmu.mak
-F: gdb-xml/s390*.xml
+F: gdbstub/gdb-xml/s390*.xml
 F: hw/char/sclp*.[hc]
 F: hw/char/terminal3270.c
 F: hw/intc/s390_flic.c
@@ -221,8 +221,8 @@ F: include/hw/cpu/a*mpcore.h
 F: docs/system/target-arm.rst
 F: docs/system/arm/cpu-features.rst
 F: docs/system/arm/emulation.rst
-F: gdb-xml/arm*.xml
-F: gdb-xml/aarch64*.xml
+F: gdbstub/gdb-xml/arm*.xml
+F: gdbstub/gdb-xml/aarch64*.xml
 
 ARM SMMU
 M: Eric Auger <eric.auger@redhat.com>
@@ -237,7 +237,7 @@ AVR TCG CPUs
 M: Michael Rolnik <mrolnik@gmail.com>
 S: Maintained
 F: docs/system/target-avr.rst
-F: gdb-xml/avr-cpu.xml
+F: gdbstub/gdb-xml/avr-cpu.xml
 F: target/avr/
 F: tests/functional/avr/
 
@@ -252,7 +252,7 @@ F: tests/tcg/hexagon/
 F: disas/hexagon.c
 F: configs/targets/hexagon-linux-user/default.mak
 F: docker/dockerfiles/debian-hexagon-cross.docker
-F: gdb-xml/hexagon*.xml
+F: gdbstub/gdb-xml/hexagon*.xml
 T: git https://github.com/quic/qemu.git hex-next
 
 Hexagon idef-parser
@@ -311,7 +311,7 @@ M: Stafford Horne <shorne@gmail.com>
 S: Odd Fixes
 F: docs/system/or1k/cpu-features.rst
 F: target/or1k/
-F: gdb-xml/or1k-core.xml
+F: gdbstub/gdb-xml/or1k-core.xml
 F: hw/or1k/
 F: include/hw/or1k/
 F: tests/functional/or1k/meson.build
@@ -411,7 +411,7 @@ M: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
 M: Artyom Tarasenko <atar4qemu@gmail.com>
 S: Maintained
 F: target/sparc/
-F: gdb-xml/sparc*.xml
+F: gdbstub/gdb-xml/sparc*.xml
 F: hw/sparc/
 F: hw/sparc64/
 F: include/hw/sparc/sparc64.h
@@ -499,7 +499,7 @@ S: Supported
 F: target/s390x/kvm/
 F: target/s390x/machine.c
 F: target/s390x/sigp.c
-F: gdb-xml/s390*.xml
+F: gdbstub/gdb-xml/s390*.xml
 T: git https://github.com/borntraeger/qemu.git s390-next
 L: qemu-s390x@nongnu.org
 
@@ -1352,7 +1352,7 @@ F: include/hw/intc/loongson_ipi_common.h
 F: hw/intc/loongarch_*.c
 F: hw/intc/loongson_ipi_common.c
 F: hw/rtc/ls7a_rtc.c
-F: gdb-xml/loongarch*.xml
+F: gdbstub/gdb-xml/loongarch*.xml
 
 M68K Machines
 -------------
@@ -3311,7 +3311,6 @@ F: docs/system/gdb.rst
 F: gdbstub/*
 F: include/exec/gdbstub.h
 F: include/gdbstub/*
-F: gdb-xml/
 F: tests/tcg/multiarch/gdbstub/*
 F: scripts/feature_to_c.py
 F: scripts/probe-gdb-support.py
diff --git a/docs/devel/codebase.rst b/docs/devel/codebase.rst
index 69d88271178..f09307b8971 100644
--- a/docs/devel/codebase.rst
+++ b/docs/devel/codebase.rst
@@ -88,8 +88,6 @@ yet, so sometimes the source code is all you have.
   `VirtFS <https://www.linux-kvm.org/page/VirtFS>`_ support.
 * `gdbstub <https://gitlab.com/qemu-project/qemu/-/tree/master/gdbstub>`_:
   `GDB <GDB usage>` support.
-* `gdb-xml <https://gitlab.com/qemu-project/qemu/-/tree/master/gdb-xml>`_:
-  Set of XML files describing architectures and used by `gdbstub <GDB usage>`.
 * `host <https://gitlab.com/qemu-project/qemu/-/tree/master/host>`_:
   Various architecture specific header files (crypto, atomic, memory
   operations).
diff --git a/meson.build b/meson.build
index 8e8440941c0..503cde5ea90 100644
--- a/meson.build
+++ b/meson.build
@@ -4331,7 +4331,7 @@ foreach target : target_dirs
   if 'TARGET_XML_FILES' in config_target
     gdbstub_xml_files = []
     foreach gdbstub_xml : config_target['TARGET_XML_FILES'].split()
-      gdbstub_xml_files += 'gdb-xml/' + gdbstub_xml
+      gdbstub_xml_files += 'gdbstub/gdb-xml/' + gdbstub_xml
     endforeach
     gdbstub_xml = custom_target(target + '-gdbstub-xml.c',
                                 output: target + '-gdbstub-xml.c',
diff --git a/gdb-xml/aarch64-core.xml b/gdbstub/gdb-xml/aarch64-core.xml
similarity index 100%
rename from gdb-xml/aarch64-core.xml
rename to gdbstub/gdb-xml/aarch64-core.xml
diff --git a/gdb-xml/aarch64-fpu.xml b/gdbstub/gdb-xml/aarch64-fpu.xml
similarity index 100%
rename from gdb-xml/aarch64-fpu.xml
rename to gdbstub/gdb-xml/aarch64-fpu.xml
diff --git a/gdb-xml/aarch64-mte.xml b/gdbstub/gdb-xml/aarch64-mte.xml
similarity index 100%
rename from gdb-xml/aarch64-mte.xml
rename to gdbstub/gdb-xml/aarch64-mte.xml
diff --git a/gdb-xml/aarch64-pauth.xml b/gdbstub/gdb-xml/aarch64-pauth.xml
similarity index 100%
rename from gdb-xml/aarch64-pauth.xml
rename to gdbstub/gdb-xml/aarch64-pauth.xml
diff --git a/gdb-xml/aarch64-sme2.xml b/gdbstub/gdb-xml/aarch64-sme2.xml
similarity index 100%
rename from gdb-xml/aarch64-sme2.xml
rename to gdbstub/gdb-xml/aarch64-sme2.xml
diff --git a/gdb-xml/alpha-core.xml b/gdbstub/gdb-xml/alpha-core.xml
similarity index 100%
rename from gdb-xml/alpha-core.xml
rename to gdbstub/gdb-xml/alpha-core.xml
diff --git a/gdb-xml/arm-core.xml b/gdbstub/gdb-xml/arm-core.xml
similarity index 100%
rename from gdb-xml/arm-core.xml
rename to gdbstub/gdb-xml/arm-core.xml
diff --git a/gdb-xml/arm-m-profile-mve.xml b/gdbstub/gdb-xml/arm-m-profile-mve.xml
similarity index 100%
rename from gdb-xml/arm-m-profile-mve.xml
rename to gdbstub/gdb-xml/arm-m-profile-mve.xml
diff --git a/gdb-xml/arm-m-profile.xml b/gdbstub/gdb-xml/arm-m-profile.xml
similarity index 100%
rename from gdb-xml/arm-m-profile.xml
rename to gdbstub/gdb-xml/arm-m-profile.xml
diff --git a/gdb-xml/arm-neon.xml b/gdbstub/gdb-xml/arm-neon.xml
similarity index 100%
rename from gdb-xml/arm-neon.xml
rename to gdbstub/gdb-xml/arm-neon.xml
diff --git a/gdb-xml/arm-vfp-sysregs.xml b/gdbstub/gdb-xml/arm-vfp-sysregs.xml
similarity index 100%
rename from gdb-xml/arm-vfp-sysregs.xml
rename to gdbstub/gdb-xml/arm-vfp-sysregs.xml
diff --git a/gdb-xml/arm-vfp.xml b/gdbstub/gdb-xml/arm-vfp.xml
similarity index 100%
rename from gdb-xml/arm-vfp.xml
rename to gdbstub/gdb-xml/arm-vfp.xml
diff --git a/gdb-xml/arm-vfp3.xml b/gdbstub/gdb-xml/arm-vfp3.xml
similarity index 100%
rename from gdb-xml/arm-vfp3.xml
rename to gdbstub/gdb-xml/arm-vfp3.xml
diff --git a/gdb-xml/avr-cpu.xml b/gdbstub/gdb-xml/avr-cpu.xml
similarity index 100%
rename from gdb-xml/avr-cpu.xml
rename to gdbstub/gdb-xml/avr-cpu.xml
diff --git a/gdb-xml/cf-core.xml b/gdbstub/gdb-xml/cf-core.xml
similarity index 100%
rename from gdb-xml/cf-core.xml
rename to gdbstub/gdb-xml/cf-core.xml
diff --git a/gdb-xml/cf-fp.xml b/gdbstub/gdb-xml/cf-fp.xml
similarity index 100%
rename from gdb-xml/cf-fp.xml
rename to gdbstub/gdb-xml/cf-fp.xml
diff --git a/gdb-xml/hexagon-core.xml b/gdbstub/gdb-xml/hexagon-core.xml
similarity index 100%
rename from gdb-xml/hexagon-core.xml
rename to gdbstub/gdb-xml/hexagon-core.xml
diff --git a/gdb-xml/hexagon-hvx.xml b/gdbstub/gdb-xml/hexagon-hvx.xml
similarity index 100%
rename from gdb-xml/hexagon-hvx.xml
rename to gdbstub/gdb-xml/hexagon-hvx.xml
diff --git a/gdb-xml/i386-32bit-linux.xml b/gdbstub/gdb-xml/i386-32bit-linux.xml
similarity index 100%
rename from gdb-xml/i386-32bit-linux.xml
rename to gdbstub/gdb-xml/i386-32bit-linux.xml
diff --git a/gdb-xml/i386-32bit.xml b/gdbstub/gdb-xml/i386-32bit.xml
similarity index 100%
rename from gdb-xml/i386-32bit.xml
rename to gdbstub/gdb-xml/i386-32bit.xml
diff --git a/gdb-xml/i386-64bit-apx.xml b/gdbstub/gdb-xml/i386-64bit-apx.xml
similarity index 100%
rename from gdb-xml/i386-64bit-apx.xml
rename to gdbstub/gdb-xml/i386-64bit-apx.xml
diff --git a/gdb-xml/i386-64bit-linux.xml b/gdbstub/gdb-xml/i386-64bit-linux.xml
similarity index 100%
rename from gdb-xml/i386-64bit-linux.xml
rename to gdbstub/gdb-xml/i386-64bit-linux.xml
diff --git a/gdb-xml/i386-64bit.xml b/gdbstub/gdb-xml/i386-64bit.xml
similarity index 100%
rename from gdb-xml/i386-64bit.xml
rename to gdbstub/gdb-xml/i386-64bit.xml
diff --git a/gdb-xml/loongarch-base32.xml b/gdbstub/gdb-xml/loongarch-base32.xml
similarity index 100%
rename from gdb-xml/loongarch-base32.xml
rename to gdbstub/gdb-xml/loongarch-base32.xml
diff --git a/gdb-xml/loongarch-base64.xml b/gdbstub/gdb-xml/loongarch-base64.xml
similarity index 100%
rename from gdb-xml/loongarch-base64.xml
rename to gdbstub/gdb-xml/loongarch-base64.xml
diff --git a/gdb-xml/loongarch-fpu.xml b/gdbstub/gdb-xml/loongarch-fpu.xml
similarity index 100%
rename from gdb-xml/loongarch-fpu.xml
rename to gdbstub/gdb-xml/loongarch-fpu.xml
diff --git a/gdb-xml/loongarch-lasx.xml b/gdbstub/gdb-xml/loongarch-lasx.xml
similarity index 100%
rename from gdb-xml/loongarch-lasx.xml
rename to gdbstub/gdb-xml/loongarch-lasx.xml
diff --git a/gdb-xml/loongarch-lsx.xml b/gdbstub/gdb-xml/loongarch-lsx.xml
similarity index 100%
rename from gdb-xml/loongarch-lsx.xml
rename to gdbstub/gdb-xml/loongarch-lsx.xml
diff --git a/gdb-xml/m68k-core.xml b/gdbstub/gdb-xml/m68k-core.xml
similarity index 100%
rename from gdb-xml/m68k-core.xml
rename to gdbstub/gdb-xml/m68k-core.xml
diff --git a/gdb-xml/m68k-fp.xml b/gdbstub/gdb-xml/m68k-fp.xml
similarity index 100%
rename from gdb-xml/m68k-fp.xml
rename to gdbstub/gdb-xml/m68k-fp.xml
diff --git a/gdb-xml/microblaze-core.xml b/gdbstub/gdb-xml/microblaze-core.xml
similarity index 100%
rename from gdb-xml/microblaze-core.xml
rename to gdbstub/gdb-xml/microblaze-core.xml
diff --git a/gdb-xml/microblaze-stack-protect.xml b/gdbstub/gdb-xml/microblaze-stack-protect.xml
similarity index 100%
rename from gdb-xml/microblaze-stack-protect.xml
rename to gdbstub/gdb-xml/microblaze-stack-protect.xml
diff --git a/gdb-xml/or1k-core.xml b/gdbstub/gdb-xml/or1k-core.xml
similarity index 100%
rename from gdb-xml/or1k-core.xml
rename to gdbstub/gdb-xml/or1k-core.xml
diff --git a/gdb-xml/power-altivec.xml b/gdbstub/gdb-xml/power-altivec.xml
similarity index 100%
rename from gdb-xml/power-altivec.xml
rename to gdbstub/gdb-xml/power-altivec.xml
diff --git a/gdb-xml/power-core.xml b/gdbstub/gdb-xml/power-core.xml
similarity index 100%
rename from gdb-xml/power-core.xml
rename to gdbstub/gdb-xml/power-core.xml
diff --git a/gdb-xml/power-fpu.xml b/gdbstub/gdb-xml/power-fpu.xml
similarity index 100%
rename from gdb-xml/power-fpu.xml
rename to gdbstub/gdb-xml/power-fpu.xml
diff --git a/gdb-xml/power-spe.xml b/gdbstub/gdb-xml/power-spe.xml
similarity index 100%
rename from gdb-xml/power-spe.xml
rename to gdbstub/gdb-xml/power-spe.xml
diff --git a/gdb-xml/power-vsx.xml b/gdbstub/gdb-xml/power-vsx.xml
similarity index 100%
rename from gdb-xml/power-vsx.xml
rename to gdbstub/gdb-xml/power-vsx.xml
diff --git a/gdb-xml/power64-core.xml b/gdbstub/gdb-xml/power64-core.xml
similarity index 100%
rename from gdb-xml/power64-core.xml
rename to gdbstub/gdb-xml/power64-core.xml
diff --git a/gdb-xml/riscv-32bit-cpu.xml b/gdbstub/gdb-xml/riscv-32bit-cpu.xml
similarity index 100%
rename from gdb-xml/riscv-32bit-cpu.xml
rename to gdbstub/gdb-xml/riscv-32bit-cpu.xml
diff --git a/gdb-xml/riscv-32bit-fpu.xml b/gdbstub/gdb-xml/riscv-32bit-fpu.xml
similarity index 100%
rename from gdb-xml/riscv-32bit-fpu.xml
rename to gdbstub/gdb-xml/riscv-32bit-fpu.xml
diff --git a/gdb-xml/riscv-32bit-virtual.xml b/gdbstub/gdb-xml/riscv-32bit-virtual.xml
similarity index 100%
rename from gdb-xml/riscv-32bit-virtual.xml
rename to gdbstub/gdb-xml/riscv-32bit-virtual.xml
diff --git a/gdb-xml/riscv-64bit-cpu.xml b/gdbstub/gdb-xml/riscv-64bit-cpu.xml
similarity index 100%
rename from gdb-xml/riscv-64bit-cpu.xml
rename to gdbstub/gdb-xml/riscv-64bit-cpu.xml
diff --git a/gdb-xml/riscv-64bit-fpu.xml b/gdbstub/gdb-xml/riscv-64bit-fpu.xml
similarity index 100%
rename from gdb-xml/riscv-64bit-fpu.xml
rename to gdbstub/gdb-xml/riscv-64bit-fpu.xml
diff --git a/gdb-xml/riscv-64bit-virtual.xml b/gdbstub/gdb-xml/riscv-64bit-virtual.xml
similarity index 100%
rename from gdb-xml/riscv-64bit-virtual.xml
rename to gdbstub/gdb-xml/riscv-64bit-virtual.xml
diff --git a/gdb-xml/rx-core.xml b/gdbstub/gdb-xml/rx-core.xml
similarity index 100%
rename from gdb-xml/rx-core.xml
rename to gdbstub/gdb-xml/rx-core.xml
diff --git a/gdb-xml/s390-acr.xml b/gdbstub/gdb-xml/s390-acr.xml
similarity index 100%
rename from gdb-xml/s390-acr.xml
rename to gdbstub/gdb-xml/s390-acr.xml
diff --git a/gdb-xml/s390-cr.xml b/gdbstub/gdb-xml/s390-cr.xml
similarity index 100%
rename from gdb-xml/s390-cr.xml
rename to gdbstub/gdb-xml/s390-cr.xml
diff --git a/gdb-xml/s390-fpr.xml b/gdbstub/gdb-xml/s390-fpr.xml
similarity index 100%
rename from gdb-xml/s390-fpr.xml
rename to gdbstub/gdb-xml/s390-fpr.xml
diff --git a/gdb-xml/s390-gs.xml b/gdbstub/gdb-xml/s390-gs.xml
similarity index 100%
rename from gdb-xml/s390-gs.xml
rename to gdbstub/gdb-xml/s390-gs.xml
diff --git a/gdb-xml/s390-virt-kvm.xml b/gdbstub/gdb-xml/s390-virt-kvm.xml
similarity index 100%
rename from gdb-xml/s390-virt-kvm.xml
rename to gdbstub/gdb-xml/s390-virt-kvm.xml
diff --git a/gdb-xml/s390-virt.xml b/gdbstub/gdb-xml/s390-virt.xml
similarity index 100%
rename from gdb-xml/s390-virt.xml
rename to gdbstub/gdb-xml/s390-virt.xml
diff --git a/gdb-xml/s390-vx.xml b/gdbstub/gdb-xml/s390-vx.xml
similarity index 100%
rename from gdb-xml/s390-vx.xml
rename to gdbstub/gdb-xml/s390-vx.xml
diff --git a/gdb-xml/s390x-core64.xml b/gdbstub/gdb-xml/s390x-core64.xml
similarity index 100%
rename from gdb-xml/s390x-core64.xml
rename to gdbstub/gdb-xml/s390x-core64.xml
diff --git a/gdb-xml/sparc32-cp0.xml b/gdbstub/gdb-xml/sparc32-cp0.xml
similarity index 100%
rename from gdb-xml/sparc32-cp0.xml
rename to gdbstub/gdb-xml/sparc32-cp0.xml
diff --git a/gdb-xml/sparc32-cpu.xml b/gdbstub/gdb-xml/sparc32-cpu.xml
similarity index 100%
rename from gdb-xml/sparc32-cpu.xml
rename to gdbstub/gdb-xml/sparc32-cpu.xml
diff --git a/gdb-xml/sparc32-fpu.xml b/gdbstub/gdb-xml/sparc32-fpu.xml
similarity index 100%
rename from gdb-xml/sparc32-fpu.xml
rename to gdbstub/gdb-xml/sparc32-fpu.xml
diff --git a/gdb-xml/sparc64-cp0.xml b/gdbstub/gdb-xml/sparc64-cp0.xml
similarity index 100%
rename from gdb-xml/sparc64-cp0.xml
rename to gdbstub/gdb-xml/sparc64-cp0.xml
diff --git a/gdb-xml/sparc64-cpu.xml b/gdbstub/gdb-xml/sparc64-cpu.xml
similarity index 100%
rename from gdb-xml/sparc64-cpu.xml
rename to gdbstub/gdb-xml/sparc64-cpu.xml
diff --git a/gdb-xml/sparc64-fpu.xml b/gdbstub/gdb-xml/sparc64-fpu.xml
similarity index 100%
rename from gdb-xml/sparc64-fpu.xml
rename to gdbstub/gdb-xml/sparc64-fpu.xml
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 13/13] gdbstub: Generate a single gdbstub-xml.c / gdb_static_features[]
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
                   ` (11 preceding siblings ...)
  2026-03-10 15:53 ` [PATCH v2 12/13] gdbstub: Move gdb-xml/ within gdbstub/ Philippe Mathieu-Daudé
@ 2026-03-10 15:53 ` Philippe Mathieu-Daudé
  2026-03-10 15:59 ` [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
  13 siblings, 0 replies; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

gdb_static_features[] does not depend on target-specific code.
Instead of generating one file per target, generate a single file
with a single gdb_static_features[] array.

Co-developed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Acked-by: Alex Bennée <alex.bennee@linaro.org>
---
 meson.build                               | 14 --------------
 stubs/gdbstub.c => gdbstub/gdb-xml-stub.c |  0
 gdbstub/meson.build                       | 23 +++++++++++++++++++++++
 stubs/meson.build                         |  2 --
 4 files changed, 23 insertions(+), 16 deletions(-)
 rename stubs/gdbstub.c => gdbstub/gdb-xml-stub.c (100%)

diff --git a/meson.build b/meson.build
index 503cde5ea90..538efb7092d 100644
--- a/meson.build
+++ b/meson.build
@@ -4248,7 +4248,6 @@ if have_rust
 endif
 
 
-feature_to_c = find_program('scripts/feature_to_c.py')
 rust_root_crate = find_program('scripts/rust/rust_root_crate.sh')
 
 if host_os == 'darwin'
@@ -4328,19 +4327,6 @@ foreach target : target_dirs
     endif
   endif
 
-  if 'TARGET_XML_FILES' in config_target
-    gdbstub_xml_files = []
-    foreach gdbstub_xml : config_target['TARGET_XML_FILES'].split()
-      gdbstub_xml_files += 'gdbstub/gdb-xml/' + gdbstub_xml
-    endforeach
-    gdbstub_xml = custom_target(target + '-gdbstub-xml.c',
-                                output: target + '-gdbstub-xml.c',
-                                input: files(gdbstub_xml_files),
-                                command: [feature_to_c, '@INPUT@'],
-                                capture: true)
-    arch_srcs += gdbstub_xml
-  endif
-
   if target in config_target_info
     arch_srcs += config_target_info[target]
   else
diff --git a/stubs/gdbstub.c b/gdbstub/gdb-xml-stub.c
similarity index 100%
rename from stubs/gdbstub.c
rename to gdbstub/gdb-xml-stub.c
diff --git a/gdbstub/meson.build b/gdbstub/meson.build
index 15c666f5752..b61d2e915c1 100644
--- a/gdbstub/meson.build
+++ b/gdbstub/meson.build
@@ -4,6 +4,29 @@
 # types such as hwaddr.
 #
 
+gdbstub_xml_files = []
+foreach target : target_dirs
+  config_target = config_target_mak[target]
+  if 'TARGET_XML_FILES' in config_target
+    foreach gdbstub_xml : config_target['TARGET_XML_FILES'].split()
+      if not gdbstub_xml_files.contains('gdb-xml/' + gdbstub_xml)
+        gdbstub_xml_files += 'gdb-xml/' + gdbstub_xml
+      endif
+    endforeach
+  endif
+endforeach
+if gdbstub_xml_files.length() > 0
+  feature_to_c = find_program('../scripts/feature_to_c.py')
+  gdbstub_xml = custom_target('gdbstub-xml.c',
+                              output: 'gdbstub-xml.c',
+                              input: files(gdbstub_xml_files),
+                              command: [feature_to_c, '@INPUT@'],
+                              capture: true)
+else
+  gdbstub_xml = files('gdb-xml-stub.c')
+endif
+common_ss.add(gdbstub_xml)
+
 # We build two versions of gdbstub, one for each mode
 user_ss.add(files(
   'gdbstub.c',
diff --git a/stubs/meson.build b/stubs/meson.build
index fad796a49da..7189ff63ed5 100644
--- a/stubs/meson.build
+++ b/stubs/meson.build
@@ -89,8 +89,6 @@ if have_system
 endif
 
 if have_system or have_user
-  stub_ss.add(files('gdbstub.c'))
-
   # Also included in have_system for --disable-tcg builds
   stub_ss.add(files('replay.c'))
 
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML
  2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
                   ` (12 preceding siblings ...)
  2026-03-10 15:53 ` [PATCH v2 13/13] gdbstub: Generate a single gdbstub-xml.c / gdb_static_features[] Philippe Mathieu-Daudé
@ 2026-03-10 15:59 ` Philippe Mathieu-Daudé
  13 siblings, 0 replies; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 15:59 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc, Gustavo Romero

On 10/3/26 16:53, Philippe Mathieu-Daudé wrote:
> Generic fix for a latent bug reported by Florian:
> https://lore.kernel.org/qemu-devel/e44df309-d40d-46f0-88a8-7ac55f9a3634@fhofhammer.de/


> Philippe Mathieu-Daudé (13):
>    meson: Restrict gdbstub to user/system builds
>    target/i386/gdbstub: Remove stale comment
>    gdbstub: Simplify gdb_init_cpu() logic
>    gdbstub: Add trace events for around XML parsing / generation
>    gdbstub: Have scripts/feature_to_c.py generate more verbose output
>    gdbstub: Make base register explicit in m68k GDB XML files
>    gdbstub: Remove @g_pos argument in gdb_register_coprocessor()
>    gdbstub: Emit base_register index in GDBFeature entries
>    gdbstub: Use GDBFeature::base_reg in gdb_register_feature()
>    gdbstub: Remove GDBRegisterState::base_reg
>    gdbstub: Remove 'gdb-xml/' directory prefix in TARGET_XML_FILES
>    gdbstub: Move gdb-xml/ within gdbstub/
>    gdbstub: Generate a single gdbstub-xml.c / gdb_static_features[]

Rats... PPC fixed but I get on Aarch64:

Python Exception <class 'gdb.MemoryError'>: Cannot access memory at 
address 0x0

I presume an improvement over:

gdb.error: Could not fetch register "APDBKEYLO_EL1"; remote failure 
reply 'E14'

It would be helpful to have the tests report the host GDB version ;)


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 02/13] target/i386/gdbstub: Remove stale comment
  2026-03-10 15:53 ` [PATCH v2 02/13] target/i386/gdbstub: Remove stale comment Philippe Mathieu-Daudé
@ 2026-03-10 19:50   ` Pierrick Bouvier
  0 siblings, 0 replies; 19+ messages in thread
From: Pierrick Bouvier @ 2026-03-10 19:50 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Florian Hofhammer, Chao Liu, Alex Bennée, Akihiko Odaki,
	qemu-ppc

On 3/10/26 8:53 AM, Philippe Mathieu-Daudé wrote:
> Since commit ecd6f6a8820 ("gdbstub: Infer number of core
> registers from XML") gdb_num_core_regs is inferred for
> the x86 targets. Remove a stale comment.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   target/i386/gdbstub.c | 4 +---
>   1 file changed, 1 insertion(+), 3 deletions(-)
> 

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 03/13] gdbstub: Simplify gdb_init_cpu() logic
  2026-03-10 15:53 ` [PATCH v2 03/13] gdbstub: Simplify gdb_init_cpu() logic Philippe Mathieu-Daudé
@ 2026-03-10 19:50   ` Pierrick Bouvier
  0 siblings, 0 replies; 19+ messages in thread
From: Pierrick Bouvier @ 2026-03-10 19:50 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Florian Hofhammer, Chao Liu, Alex Bennée, Akihiko Odaki,
	qemu-ppc

On 3/10/26 8:53 AM, Philippe Mathieu-Daudé wrote:
> Ensure we either set gdb_num_core_regs or have a XML file.
> We shouldn't modify CPUClass content, so mark it const.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   gdbstub/gdbstub.c | 9 ++++-----
>   1 file changed, 4 insertions(+), 5 deletions(-)
> 

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 04/13] gdbstub: Add trace events for around XML parsing / generation
  2026-03-10 15:53 ` [PATCH v2 04/13] gdbstub: Add trace events for around XML parsing / generation Philippe Mathieu-Daudé
@ 2026-03-10 19:51   ` Pierrick Bouvier
  0 siblings, 0 replies; 19+ messages in thread
From: Pierrick Bouvier @ 2026-03-10 19:51 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Florian Hofhammer, Chao Liu, Alex Bennée, Akihiko Odaki,
	qemu-ppc

On 3/10/26 8:53 AM, Philippe Mathieu-Daudé wrote:
> Add trace events to help follow how the various files in
> gdb-xml/ are parsed or generated at runtime.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   gdbstub/gdbstub.c    | 10 ++++++++++
>   gdbstub/trace-events |  5 +++++
>   2 files changed, 15 insertions(+)
> 

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 09/13] gdbstub: Use GDBFeature::base_reg in gdb_register_feature()
  2026-03-10 15:53 ` [PATCH v2 09/13] gdbstub: Use GDBFeature::base_reg in gdb_register_feature() Philippe Mathieu-Daudé
@ 2026-03-10 20:21   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 19+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-10 20:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Chao Liu, Alex Bennée,
	Akihiko Odaki, qemu-ppc

On 10/3/26 16:53, Philippe Mathieu-Daudé wrote:
> When a feature XML file provides a "regnum=" tag to indicate
> the registers base index, respect it, as it might not be the
> same as our current number of registered entries, in particular
> when there are gaps.
> 
> This fixes a bug with the "power-fpu.xml" file [*] which was
> loaded at index 70 while the base register is 71. This latent
> bug was exposed by commit 1ec0fbe2dda ("target/ppc: Fix
> CPUClass::gdb_num_core_regs value").
> 
> [*] https://lore.kernel.org/qemu-devel/e44df309-d40d-46f0-88a8-7ac55f9a3634@fhofhammer.de/
> 
> Reported-by: Florian Hofhammer <florian.hofhammer@fhofhammer.de>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   gdbstub/gdbstub.c    | 16 ++++++++++------
>   gdbstub/trace-events |  1 +
>   2 files changed, 11 insertions(+), 6 deletions(-)


> @@ -617,7 +618,6 @@ void gdb_register_coprocessor(CPUState *cpu,
>   {
>       GDBRegisterState *s;
>       guint i;
> -    int base_reg = cpu->gdb_num_regs;
>   
>       for (i = 0; i < cpu->gdb_regs->len; i++) {
>           /* Check for duplicates.  */
> @@ -627,7 +627,11 @@ void gdb_register_coprocessor(CPUState *cpu,
>           }
>       }
>   
> -    gdb_register_feature(cpu, base_reg, get_reg, set_reg, feature);
> +    if (cpu->gdb_num_regs < feature->base_reg) {
> +        trace_gdbxml_register_coprocessor_gap(cpu->gdb_num_regs,
> +                                              feature->base_reg);
> +    }
> +    gdb_register_feature(cpu, get_reg, set_reg, feature);
Broken patch, please disregard.


^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2026-03-10 20:22 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-10 15:53 [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé
2026-03-10 15:53 ` [PATCH v2 01/13] meson: Restrict gdbstub to user/system builds Philippe Mathieu-Daudé
2026-03-10 15:53 ` [PATCH v2 02/13] target/i386/gdbstub: Remove stale comment Philippe Mathieu-Daudé
2026-03-10 19:50   ` Pierrick Bouvier
2026-03-10 15:53 ` [PATCH v2 03/13] gdbstub: Simplify gdb_init_cpu() logic Philippe Mathieu-Daudé
2026-03-10 19:50   ` Pierrick Bouvier
2026-03-10 15:53 ` [PATCH v2 04/13] gdbstub: Add trace events for around XML parsing / generation Philippe Mathieu-Daudé
2026-03-10 19:51   ` Pierrick Bouvier
2026-03-10 15:53 ` [PATCH v2 05/13] gdbstub: Have scripts/feature_to_c.py generate more verbose output Philippe Mathieu-Daudé
2026-03-10 15:53 ` [PATCH v2 06/13] gdbstub: Make base register explicit in m68k GDB XML files Philippe Mathieu-Daudé
2026-03-10 15:53 ` [PATCH v2 07/13] gdbstub: Remove @g_pos argument in gdb_register_coprocessor() Philippe Mathieu-Daudé
2026-03-10 15:53 ` [PATCH v2 08/13] gdbstub: Emit base_register index in GDBFeature entries Philippe Mathieu-Daudé
2026-03-10 15:53 ` [PATCH v2 09/13] gdbstub: Use GDBFeature::base_reg in gdb_register_feature() Philippe Mathieu-Daudé
2026-03-10 20:21   ` Philippe Mathieu-Daudé
2026-03-10 15:53 ` [PATCH v2 10/13] gdbstub: Remove GDBRegisterState::base_reg Philippe Mathieu-Daudé
2026-03-10 15:53 ` [PATCH v2 11/13] gdbstub: Remove 'gdb-xml/' directory prefix in TARGET_XML_FILES Philippe Mathieu-Daudé
2026-03-10 15:53 ` [PATCH v2 12/13] gdbstub: Move gdb-xml/ within gdbstub/ Philippe Mathieu-Daudé
2026-03-10 15:53 ` [PATCH v2 13/13] gdbstub: Generate a single gdbstub-xml.c / gdb_static_features[] Philippe Mathieu-Daudé
2026-03-10 15:59 ` [PATCH v2 00/13] gdbstub: Always infer base register index from GDB XML Philippe Mathieu-Daudé

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox