configs/targets/sparc-linux-user.mak | 1 + configs/targets/sparc-softmmu.mak | 1 + configs/targets/sparc32plus-linux-user.mak | 1 + configs/targets/sparc64-linux-user.mak | 1 + configs/targets/sparc64-softmmu.mak | 1 + gdb-xml/sparc32-core.xml | 84 ++++++++++++++++++ gdb-xml/sparc32-cp0.xml | 19 +++++ gdb-xml/sparc32-cpu.xml | 42 +++++++++ gdb-xml/sparc32-fpu.xml | 43 ++++++++++ gdb-xml/sparc64-core.xml | 99 ++++++++++++++++++++++ gdb-xml/sparc64-cp0.xml | 17 ++++ gdb-xml/sparc64-cpu.xml | 42 +++++++++ gdb-xml/sparc64-fpu.xml | 60 +++++++++++++ target/sparc/cpu.c | 2 + 14 files changed, 413 insertions(+) create mode 100644 gdb-xml/sparc32-core.xml create mode 100644 gdb-xml/sparc32-cp0.xml create mode 100644 gdb-xml/sparc32-cpu.xml create mode 100644 gdb-xml/sparc32-fpu.xml create mode 100644 gdb-xml/sparc64-core.xml create mode 100644 gdb-xml/sparc64-cp0.xml create mode 100644 gdb-xml/sparc64-cpu.xml create mode 100644 gdb-xml/sparc64-fpu.xml
From 6c116b968cb28bcc0d0236913f1926206f50a9b4 Mon Sep 17 00:00:00 2001
From: Rot127 <unisono@quyllur.org>
Date: Fri, 27 Jun 2025 04:51:25 -0500
Subject: [PATCH] Adds the GDB register XML files for Sparc and Sparc64.
The xml files are copied from binutils-gdb.
The `-core.xml` files are just assembled from the others
to match the registers defined by QEMU.
The addition is especially necessary if one wants to use the TCG plugins
with Sparc, because reading registers via the plugin API
just queries GDB.
The GDB stub initializes it's register file with the `*-core.xml` files.
If they don't exist it returns no data.
Also relevant for debugging I assume.
Signed-off-by: Rot127 <unisono@quyllur.org>
---
configs/targets/sparc-linux-user.mak | 1 +
configs/targets/sparc-softmmu.mak | 1 +
configs/targets/sparc32plus-linux-user.mak | 1 +
configs/targets/sparc64-linux-user.mak | 1 +
configs/targets/sparc64-softmmu.mak | 1 +
gdb-xml/sparc32-core.xml | 84 ++++++++++++++++++
gdb-xml/sparc32-cp0.xml | 19 +++++
gdb-xml/sparc32-cpu.xml | 42 +++++++++
gdb-xml/sparc32-fpu.xml | 43 ++++++++++
gdb-xml/sparc64-core.xml | 99 ++++++++++++++++++++++
gdb-xml/sparc64-cp0.xml | 17 ++++
gdb-xml/sparc64-cpu.xml | 42 +++++++++
gdb-xml/sparc64-fpu.xml | 60 +++++++++++++
target/sparc/cpu.c | 2 +
14 files changed, 413 insertions(+)
create mode 100644 gdb-xml/sparc32-core.xml
create mode 100644 gdb-xml/sparc32-cp0.xml
create mode 100644 gdb-xml/sparc32-cpu.xml
create mode 100644 gdb-xml/sparc32-fpu.xml
create mode 100644 gdb-xml/sparc64-core.xml
create mode 100644 gdb-xml/sparc64-cp0.xml
create mode 100644 gdb-xml/sparc64-cpu.xml
create mode 100644 gdb-xml/sparc64-fpu.xml
diff --git a/configs/targets/sparc-linux-user.mak b/configs/targets/
sparc-linux-user.mak
index 4ff4b7287d..18cc1ce29d 100644
--- a/configs/targets/sparc-linux-user.mak
+++ b/configs/targets/sparc-linux-user.mak
@@ -2,4 +2,5 @@ TARGET_ARCH=sparc
TARGET_SYSTBL_ABI=common,32
TARGET_SYSTBL=syscall.tbl
TARGET_BIG_ENDIAN=y
+TARGET_XML_FILES= gdb-xml/sparc32-core.xml gdb-xml/sparc32-cp0.xml gdb-
xml/sparc32-cpu.xml gdb-xml/sparc32-fpu.xml
TARGET_LONG_BITS=32
diff --git a/configs/targets/sparc-softmmu.mak b/configs/targets/sparc-
softmmu.mak
index 57801faf1f..db782a2a63 100644
--- a/configs/targets/sparc-softmmu.mak
+++ b/configs/targets/sparc-softmmu.mak
@@ -1,3 +1,4 @@
TARGET_ARCH=sparc
TARGET_BIG_ENDIAN=y
+TARGET_XML_FILES= gdb-xml/sparc32-core.xml gdb-xml/sparc32-cp0.xml gdb-
xml/sparc32-cpu.xml gdb-xml/sparc32-fpu.xml
TARGET_LONG_BITS=32
diff --git a/configs/targets/sparc32plus-linux-user.mak b/configs/
targets/sparc32plus-linux-user.mak
index 7a16934fd1..029fa69cb0 100644
--- a/configs/targets/sparc32plus-linux-user.mak
+++ b/configs/targets/sparc32plus-linux-user.mak
@@ -5,4 +5,5 @@ TARGET_ABI_DIR=sparc
TARGET_SYSTBL_ABI=common,32
TARGET_SYSTBL=syscall.tbl
TARGET_BIG_ENDIAN=y
+TARGET_XML_FILES= gdb-xml/sparc64-core.xml gdb-xml/sparc64-cp0.xml gdb-
xml/sparc64-cpu.xml gdb-xml/sparc64-fpu.xml
TARGET_LONG_BITS=64
diff --git a/configs/targets/sparc64-linux-user.mak b/configs/targets/
sparc64-linux-user.mak
index 64ea04e3e2..67a11f3c8a 100644
--- a/configs/targets/sparc64-linux-user.mak
+++ b/configs/targets/sparc64-linux-user.mak
@@ -4,4 +4,5 @@ TARGET_ABI_DIR=sparc
TARGET_SYSTBL_ABI=common,64
TARGET_SYSTBL=syscall.tbl
TARGET_BIG_ENDIAN=y
+TARGET_XML_FILES= gdb-xml/sparc64-core.xml gdb-xml/sparc64-cp0.xml gdb-
xml/sparc64-cpu.xml gdb-xml/sparc64-fpu.xml
TARGET_LONG_BITS=64
diff --git a/configs/targets/sparc64-softmmu.mak b/configs/targets/
sparc64-softmmu.mak
index 2504e31ae3..e5f14f937c 100644
--- a/configs/targets/sparc64-softmmu.mak
+++ b/configs/targets/sparc64-softmmu.mak
@@ -1,4 +1,5 @@
TARGET_ARCH=sparc64
TARGET_BASE_ARCH=sparc
TARGET_BIG_ENDIAN=y
+TARGET_XML_FILES= gdb-xml/sparc64-core.xml gdb-xml/sparc64-cp0.xml gdb-
xml/sparc64-cpu.xml gdb-xml/sparc64-fpu.xml
TARGET_LONG_BITS=64
diff --git a/gdb-xml/sparc32-core.xml b/gdb-xml/sparc32-core.xml
new file mode 100644
index 0000000000..61964a79d1
--- /dev/null
+++ b/gdb-xml/sparc32-core.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.sparc.core">
+ <reg name="g0" bitsize="32" type="uint32" regnum="0"/>
+ <reg name="g1" bitsize="32" type="uint32" regnum="1"/>
+ <reg name="g2" bitsize="32" type="uint32" regnum="2"/>
+ <reg name="g3" bitsize="32" type="uint32" regnum="3"/>
+ <reg name="g4" bitsize="32" type="uint32" regnum="4"/>
+ <reg name="g5" bitsize="32" type="uint32" regnum="5"/>
+ <reg name="g6" bitsize="32" type="uint32" regnum="6"/>
+ <reg name="g7" bitsize="32" type="uint32" regnum="7"/>
+ <reg name="o0" bitsize="32" type="uint32" regnum="8"/>
+ <reg name="o1" bitsize="32" type="uint32" regnum="9"/>
+ <reg name="o2" bitsize="32" type="uint32" regnum="10"/>
+ <reg name="o3" bitsize="32" type="uint32" regnum="11"/>
+ <reg name="o4" bitsize="32" type="uint32" regnum="12"/>
+ <reg name="o5" bitsize="32" type="uint32" regnum="13"/>
+ <reg name="sp" bitsize="32" type="uint32" regnum="14"/>
+ <reg name="o7" bitsize="32" type="uint32" regnum="15"/>
+ <reg name="l0" bitsize="32" type="uint32" regnum="16"/>
+ <reg name="l1" bitsize="32" type="uint32" regnum="17"/>
+ <reg name="l2" bitsize="32" type="uint32" regnum="18"/>
+ <reg name="l3" bitsize="32" type="uint32" regnum="19"/>
+ <reg name="l4" bitsize="32" type="uint32" regnum="20"/>
+ <reg name="l5" bitsize="32" type="uint32" regnum="21"/>
+ <reg name="l6" bitsize="32" type="uint32" regnum="22"/>
+ <reg name="l7" bitsize="32" type="uint32" regnum="23"/>
+ <reg name="i0" bitsize="32" type="uint32" regnum="24"/>
+ <reg name="i1" bitsize="32" type="uint32" regnum="25"/>
+ <reg name="i2" bitsize="32" type="uint32" regnum="26"/>
+ <reg name="i3" bitsize="32" type="uint32" regnum="27"/>
+ <reg name="i4" bitsize="32" type="uint32" regnum="28"/>
+ <reg name="i5" bitsize="32" type="uint32" regnum="29"/>
+ <reg name="fp" bitsize="32" type="uint32" regnum="30"/>
+ <reg name="i7" bitsize="32" type="uint32" regnum="31"/>
+
+ <reg name="f0" bitsize="32" type="ieee_single" regnum="32"/>
+ <reg name="f1" bitsize="32" type="ieee_single" regnum="33"/>
+ <reg name="f2" bitsize="32" type="ieee_single" regnum="34"/>
+ <reg name="f3" bitsize="32" type="ieee_single" regnum="35"/>
+ <reg name="f4" bitsize="32" type="ieee_single" regnum="36"/>
+ <reg name="f5" bitsize="32" type="ieee_single" regnum="37"/>
+ <reg name="f6" bitsize="32" type="ieee_single" regnum="38"/>
+ <reg name="f7" bitsize="32" type="ieee_single" regnum="39"/>
+ <reg name="f8" bitsize="32" type="ieee_single" regnum="40"/>
+ <reg name="f9" bitsize="32" type="ieee_single" regnum="41"/>
+ <reg name="f10" bitsize="32" type="ieee_single" regnum="42"/>
+ <reg name="f11" bitsize="32" type="ieee_single" regnum="43"/>
+ <reg name="f12" bitsize="32" type="ieee_single" regnum="44"/>
+ <reg name="f13" bitsize="32" type="ieee_single" regnum="45"/>
+ <reg name="f14" bitsize="32" type="ieee_single" regnum="46"/>
+ <reg name="f15" bitsize="32" type="ieee_single" regnum="47"/>
+ <reg name="f16" bitsize="32" type="ieee_single" regnum="48"/>
+ <reg name="f17" bitsize="32" type="ieee_single" regnum="49"/>
+ <reg name="f18" bitsize="32" type="ieee_single" regnum="50"/>
+ <reg name="f19" bitsize="32" type="ieee_single" regnum="51"/>
+ <reg name="f20" bitsize="32" type="ieee_single" regnum="52"/>
+ <reg name="f21" bitsize="32" type="ieee_single" regnum="53"/>
+ <reg name="f22" bitsize="32" type="ieee_single" regnum="54"/>
+ <reg name="f23" bitsize="32" type="ieee_single" regnum="55"/>
+ <reg name="f24" bitsize="32" type="ieee_single" regnum="56"/>
+ <reg name="f25" bitsize="32" type="ieee_single" regnum="57"/>
+ <reg name="f26" bitsize="32" type="ieee_single" regnum="58"/>
+ <reg name="f27" bitsize="32" type="ieee_single" regnum="59"/>
+ <reg name="f28" bitsize="32" type="ieee_single" regnum="60"/>
+ <reg name="f29" bitsize="32" type="ieee_single" regnum="61"/>
+ <reg name="f30" bitsize="32" type="ieee_single" regnum="62"/>
+ <reg name="f31" bitsize="32" type="ieee_single" regnum="63"/>
+
+ <reg name="y" bitsize="32" type="uint32" regnum="64"/>
+ <reg name="psr" bitsize="32" type="uint32" regnum="65"/>
+ <reg name="wim" bitsize="32" type="uint32" regnum="66"/>
+ <reg name="tbr" bitsize="32" type="uint32" regnum="67"/>
+ <reg name="pc" bitsize="32" type="code_ptr" regnum="68"/>
+ <reg name="npc" bitsize="32" type="code_ptr" regnum="69"/>
+ <reg name="fsr" bitsize="32" type="uint32" regnum="70"/>
+ <reg name="csr" bitsize="32" type="uint32" regnum="71"/>
+</feature>
diff --git a/gdb-xml/sparc32-cp0.xml b/gdb-xml/sparc32-cp0.xml
new file mode 100644
index 0000000000..a7f6e64de1
--- /dev/null
+++ b/gdb-xml/sparc32-cp0.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.sparc.cp0">
+ <reg name="y" bitsize="32" type="uint32" regnum="64"/>
+ <reg name="psr" bitsize="32" type="uint32" regnum="65"/>
+ <reg name="wim" bitsize="32" type="uint32" regnum="66"/>
+ <reg name="tbr" bitsize="32" type="uint32" regnum="67"/>
+ <reg name="pc" bitsize="32" type="code_ptr" regnum="68"/>
+ <reg name="npc" bitsize="32" type="code_ptr" regnum="69"/>
+ <reg name="fsr" bitsize="32" type="uint32" regnum="70"/>
+ <reg name="csr" bitsize="32" type="uint32" regnum="71"/>
+</feature>
+
diff --git a/gdb-xml/sparc32-cpu.xml b/gdb-xml/sparc32-cpu.xml
new file mode 100644
index 0000000000..b28c533a4f
--- /dev/null
+++ b/gdb-xml/sparc32-cpu.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.sparc.cpu">
+ <reg name="g0" bitsize="32" type="uint32" regnum="0"/>
+ <reg name="g1" bitsize="32" type="uint32" regnum="1"/>
+ <reg name="g2" bitsize="32" type="uint32" regnum="2"/>
+ <reg name="g3" bitsize="32" type="uint32" regnum="3"/>
+ <reg name="g4" bitsize="32" type="uint32" regnum="4"/>
+ <reg name="g5" bitsize="32" type="uint32" regnum="5"/>
+ <reg name="g6" bitsize="32" type="uint32" regnum="6"/>
+ <reg name="g7" bitsize="32" type="uint32" regnum="7"/>
+ <reg name="o0" bitsize="32" type="uint32" regnum="8"/>
+ <reg name="o1" bitsize="32" type="uint32" regnum="9"/>
+ <reg name="o2" bitsize="32" type="uint32" regnum="10"/>
+ <reg name="o3" bitsize="32" type="uint32" regnum="11"/>
+ <reg name="o4" bitsize="32" type="uint32" regnum="12"/>
+ <reg name="o5" bitsize="32" type="uint32" regnum="13"/>
+ <reg name="sp" bitsize="32" type="uint32" regnum="14"/>
+ <reg name="o7" bitsize="32" type="uint32" regnum="15"/>
+ <reg name="l0" bitsize="32" type="uint32" regnum="16"/>
+ <reg name="l1" bitsize="32" type="uint32" regnum="17"/>
+ <reg name="l2" bitsize="32" type="uint32" regnum="18"/>
+ <reg name="l3" bitsize="32" type="uint32" regnum="19"/>
+ <reg name="l4" bitsize="32" type="uint32" regnum="20"/>
+ <reg name="l5" bitsize="32" type="uint32" regnum="21"/>
+ <reg name="l6" bitsize="32" type="uint32" regnum="22"/>
+ <reg name="l7" bitsize="32" type="uint32" regnum="23"/>
+ <reg name="i0" bitsize="32" type="uint32" regnum="24"/>
+ <reg name="i1" bitsize="32" type="uint32" regnum="25"/>
+ <reg name="i2" bitsize="32" type="uint32" regnum="26"/>
+ <reg name="i3" bitsize="32" type="uint32" regnum="27"/>
+ <reg name="i4" bitsize="32" type="uint32" regnum="28"/>
+ <reg name="i5" bitsize="32" type="uint32" regnum="29"/>
+ <reg name="fp" bitsize="32" type="uint32" regnum="30"/>
+ <reg name="i7" bitsize="32" type="uint32" regnum="31"/>
+</feature>
diff --git a/gdb-xml/sparc32-fpu.xml b/gdb-xml/sparc32-fpu.xml
new file mode 100644
index 0000000000..289c1d2b99
--- /dev/null
+++ b/gdb-xml/sparc32-fpu.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.sparc.fpu">
+ <reg name="f0" bitsize="32" type="ieee_single" regnum="32"/>
+ <reg name="f1" bitsize="32" type="ieee_single" regnum="33"/>
+ <reg name="f2" bitsize="32" type="ieee_single" regnum="34"/>
+ <reg name="f3" bitsize="32" type="ieee_single" regnum="35"/>
+ <reg name="f4" bitsize="32" type="ieee_single" regnum="36"/>
+ <reg name="f5" bitsize="32" type="ieee_single" regnum="37"/>
+ <reg name="f6" bitsize="32" type="ieee_single" regnum="38"/>
+ <reg name="f7" bitsize="32" type="ieee_single" regnum="39"/>
+ <reg name="f8" bitsize="32" type="ieee_single" regnum="40"/>
+ <reg name="f9" bitsize="32" type="ieee_single" regnum="41"/>
+ <reg name="f10" bitsize="32" type="ieee_single" regnum="42"/>
+ <reg name="f11" bitsize="32" type="ieee_single" regnum="43"/>
+ <reg name="f12" bitsize="32" type="ieee_single" regnum="44"/>
+ <reg name="f13" bitsize="32" type="ieee_single" regnum="45"/>
+ <reg name="f14" bitsize="32" type="ieee_single" regnum="46"/>
+ <reg name="f15" bitsize="32" type="ieee_single" regnum="47"/>
+ <reg name="f16" bitsize="32" type="ieee_single" regnum="48"/>
+ <reg name="f17" bitsize="32" type="ieee_single" regnum="49"/>
+ <reg name="f18" bitsize="32" type="ieee_single" regnum="50"/>
+ <reg name="f19" bitsize="32" type="ieee_single" regnum="51"/>
+ <reg name="f20" bitsize="32" type="ieee_single" regnum="52"/>
+ <reg name="f21" bitsize="32" type="ieee_single" regnum="53"/>
+ <reg name="f22" bitsize="32" type="ieee_single" regnum="54"/>
+ <reg name="f23" bitsize="32" type="ieee_single" regnum="55"/>
+ <reg name="f24" bitsize="32" type="ieee_single" regnum="56"/>
+ <reg name="f25" bitsize="32" type="ieee_single" regnum="57"/>
+ <reg name="f26" bitsize="32" type="ieee_single" regnum="58"/>
+ <reg name="f27" bitsize="32" type="ieee_single" regnum="59"/>
+ <reg name="f28" bitsize="32" type="ieee_single" regnum="60"/>
+ <reg name="f29" bitsize="32" type="ieee_single" regnum="61"/>
+ <reg name="f30" bitsize="32" type="ieee_single" regnum="62"/>
+ <reg name="f31" bitsize="32" type="ieee_single" regnum="63"/>
+</feature>
+
diff --git a/gdb-xml/sparc64-core.xml b/gdb-xml/sparc64-core.xml
new file mode 100644
index 0000000000..375b9bb0cc
--- /dev/null
+++ b/gdb-xml/sparc64-core.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.sparc.core">
+ <reg name="g0" bitsize="64" type="uint64" regnum="0"/>
+ <reg name="g1" bitsize="64" type="uint64" regnum="1"/>
+ <reg name="g2" bitsize="64" type="uint64" regnum="2"/>
+ <reg name="g3" bitsize="64" type="uint64" regnum="3"/>
+ <reg name="g4" bitsize="64" type="uint64" regnum="4"/>
+ <reg name="g5" bitsize="64" type="uint64" regnum="5"/>
+ <reg name="g6" bitsize="64" type="uint64" regnum="6"/>
+ <reg name="g7" bitsize="64" type="uint64" regnum="7"/>
+ <reg name="o0" bitsize="64" type="uint64" regnum="8"/>
+ <reg name="o1" bitsize="64" type="uint64" regnum="9"/>
+ <reg name="o2" bitsize="64" type="uint64" regnum="10"/>
+ <reg name="o3" bitsize="64" type="uint64" regnum="11"/>
+ <reg name="o4" bitsize="64" type="uint64" regnum="12"/>
+ <reg name="o5" bitsize="64" type="uint64" regnum="13"/>
+ <reg name="sp" bitsize="64" type="uint64" regnum="14"/>
+ <reg name="o7" bitsize="64" type="uint64" regnum="15"/>
+ <reg name="l0" bitsize="64" type="uint64" regnum="16"/>
+ <reg name="l1" bitsize="64" type="uint64" regnum="17"/>
+ <reg name="l2" bitsize="64" type="uint64" regnum="18"/>
+ <reg name="l3" bitsize="64" type="uint64" regnum="19"/>
+ <reg name="l4" bitsize="64" type="uint64" regnum="20"/>
+ <reg name="l5" bitsize="64" type="uint64" regnum="21"/>
+ <reg name="l6" bitsize="64" type="uint64" regnum="22"/>
+ <reg name="l7" bitsize="64" type="uint64" regnum="23"/>
+ <reg name="i0" bitsize="64" type="uint64" regnum="24"/>
+ <reg name="i1" bitsize="64" type="uint64" regnum="25"/>
+ <reg name="i2" bitsize="64" type="uint64" regnum="26"/>
+ <reg name="i3" bitsize="64" type="uint64" regnum="27"/>
+ <reg name="i4" bitsize="64" type="uint64" regnum="28"/>
+ <reg name="i5" bitsize="64" type="uint64" regnum="29"/>
+ <reg name="fp" bitsize="64" type="uint64" regnum="30"/>
+ <reg name="i7" bitsize="64" type="uint64" regnum="31"/>
+
+ <reg name="f0" bitsize="32" type="ieee_single" regnum="32"/>
+ <reg name="f1" bitsize="32" type="ieee_single" regnum="33"/>
+ <reg name="f2" bitsize="32" type="ieee_single" regnum="34"/>
+ <reg name="f3" bitsize="32" type="ieee_single" regnum="35"/>
+ <reg name="f4" bitsize="32" type="ieee_single" regnum="36"/>
+ <reg name="f5" bitsize="32" type="ieee_single" regnum="37"/>
+ <reg name="f6" bitsize="32" type="ieee_single" regnum="38"/>
+ <reg name="f7" bitsize="32" type="ieee_single" regnum="39"/>
+ <reg name="f8" bitsize="32" type="ieee_single" regnum="40"/>
+ <reg name="f9" bitsize="32" type="ieee_single" regnum="41"/>
+ <reg name="f10" bitsize="32" type="ieee_single" regnum="42"/>
+ <reg name="f11" bitsize="32" type="ieee_single" regnum="43"/>
+ <reg name="f12" bitsize="32" type="ieee_single" regnum="44"/>
+ <reg name="f13" bitsize="32" type="ieee_single" regnum="45"/>
+ <reg name="f14" bitsize="32" type="ieee_single" regnum="46"/>
+ <reg name="f15" bitsize="32" type="ieee_single" regnum="47"/>
+ <reg name="f16" bitsize="32" type="ieee_single" regnum="48"/>
+ <reg name="f17" bitsize="32" type="ieee_single" regnum="49"/>
+ <reg name="f18" bitsize="32" type="ieee_single" regnum="50"/>
+ <reg name="f19" bitsize="32" type="ieee_single" regnum="51"/>
+ <reg name="f20" bitsize="32" type="ieee_single" regnum="52"/>
+ <reg name="f21" bitsize="32" type="ieee_single" regnum="53"/>
+ <reg name="f22" bitsize="32" type="ieee_single" regnum="54"/>
+ <reg name="f23" bitsize="32" type="ieee_single" regnum="55"/>
+ <reg name="f24" bitsize="32" type="ieee_single" regnum="56"/>
+ <reg name="f25" bitsize="32" type="ieee_single" regnum="57"/>
+ <reg name="f26" bitsize="32" type="ieee_single" regnum="58"/>
+ <reg name="f27" bitsize="32" type="ieee_single" regnum="59"/>
+ <reg name="f28" bitsize="32" type="ieee_single" regnum="60"/>
+ <reg name="f29" bitsize="32" type="ieee_single" regnum="61"/>
+ <reg name="f30" bitsize="32" type="ieee_single" regnum="62"/>
+ <reg name="f31" bitsize="32" type="ieee_single" regnum="63"/>
+
+ <reg name="f32" bitsize="64" type="ieee_double" regnum="64"/>
+ <reg name="f34" bitsize="64" type="ieee_double" regnum="65"/>
+ <reg name="f36" bitsize="64" type="ieee_double" regnum="66"/>
+ <reg name="f38" bitsize="64" type="ieee_double" regnum="67"/>
+ <reg name="f40" bitsize="64" type="ieee_double" regnum="68"/>
+ <reg name="f42" bitsize="64" type="ieee_double" regnum="69"/>
+ <reg name="f44" bitsize="64" type="ieee_double" regnum="70"/>
+ <reg name="f46" bitsize="64" type="ieee_double" regnum="71"/>
+ <reg name="f48" bitsize="64" type="ieee_double" regnum="72"/>
+ <reg name="f50" bitsize="64" type="ieee_double" regnum="73"/>
+ <reg name="f52" bitsize="64" type="ieee_double" regnum="74"/>
+ <reg name="f54" bitsize="64" type="ieee_double" regnum="75"/>
+ <reg name="f56" bitsize="64" type="ieee_double" regnum="76"/>
+ <reg name="f58" bitsize="64" type="ieee_double" regnum="77"/>
+ <reg name="f60" bitsize="64" type="ieee_double" regnum="78"/>
+ <reg name="f62" bitsize="64" type="ieee_double" regnum="79"/>
+
+ <reg name="pc" bitsize="64" type="code_ptr" regnum="80"/>
+ <reg name="npc" bitsize="64" type="code_ptr" regnum="81"/>
+ <reg name="state" bitsize="64" type="uint64" regnum="82"/>
+ <reg name="fsr" bitsize="64" type="uint64" regnum="83"/>
+ <reg name="fprs" bitsize="64" type="uint64" regnum="84"/>
+ <reg name="y" bitsize="64" type="uint64" regnum="85"/>
+</feature>
diff --git a/gdb-xml/sparc64-cp0.xml b/gdb-xml/sparc64-cp0.xml
new file mode 100644
index 0000000000..cef58f312b
--- /dev/null
+++ b/gdb-xml/sparc64-cp0.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.sparc.cp0">
+ <reg name="pc" bitsize="64" type="code_ptr" regnum="80"/>
+ <reg name="npc" bitsize="64" type="code_ptr" regnum="81"/>
+ <reg name="state" bitsize="64" type="uint64" regnum="82"/>
+ <reg name="fsr" bitsize="64" type="uint64" regnum="83"/>
+ <reg name="fprs" bitsize="64" type="uint64" regnum="84"/>
+ <reg name="y" bitsize="64" type="uint64" regnum="85"/>
+</feature>
+
diff --git a/gdb-xml/sparc64-cpu.xml b/gdb-xml/sparc64-cpu.xml
new file mode 100644
index 0000000000..b8a66d911a
--- /dev/null
+++ b/gdb-xml/sparc64-cpu.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.sparc.cpu">
+ <reg name="g0" bitsize="64" type="uint64" regnum="0"/>
+ <reg name="g1" bitsize="64" type="uint64" regnum="1"/>
+ <reg name="g2" bitsize="64" type="uint64" regnum="2"/>
+ <reg name="g3" bitsize="64" type="uint64" regnum="3"/>
+ <reg name="g4" bitsize="64" type="uint64" regnum="4"/>
+ <reg name="g5" bitsize="64" type="uint64" regnum="5"/>
+ <reg name="g6" bitsize="64" type="uint64" regnum="6"/>
+ <reg name="g7" bitsize="64" type="uint64" regnum="7"/>
+ <reg name="o0" bitsize="64" type="uint64" regnum="8"/>
+ <reg name="o1" bitsize="64" type="uint64" regnum="9"/>
+ <reg name="o2" bitsize="64" type="uint64" regnum="10"/>
+ <reg name="o3" bitsize="64" type="uint64" regnum="11"/>
+ <reg name="o4" bitsize="64" type="uint64" regnum="12"/>
+ <reg name="o5" bitsize="64" type="uint64" regnum="13"/>
+ <reg name="sp" bitsize="64" type="uint64" regnum="14"/>
+ <reg name="o7" bitsize="64" type="uint64" regnum="15"/>
+ <reg name="l0" bitsize="64" type="uint64" regnum="16"/>
+ <reg name="l1" bitsize="64" type="uint64" regnum="17"/>
+ <reg name="l2" bitsize="64" type="uint64" regnum="18"/>
+ <reg name="l3" bitsize="64" type="uint64" regnum="19"/>
+ <reg name="l4" bitsize="64" type="uint64" regnum="20"/>
+ <reg name="l5" bitsize="64" type="uint64" regnum="21"/>
+ <reg name="l6" bitsize="64" type="uint64" regnum="22"/>
+ <reg name="l7" bitsize="64" type="uint64" regnum="23"/>
+ <reg name="i0" bitsize="64" type="uint64" regnum="24"/>
+ <reg name="i1" bitsize="64" type="uint64" regnum="25"/>
+ <reg name="i2" bitsize="64" type="uint64" regnum="26"/>
+ <reg name="i3" bitsize="64" type="uint64" regnum="27"/>
+ <reg name="i4" bitsize="64" type="uint64" regnum="28"/>
+ <reg name="i5" bitsize="64" type="uint64" regnum="29"/>
+ <reg name="fp" bitsize="64" type="uint64" regnum="30"/>
+ <reg name="i7" bitsize="64" type="uint64" regnum="31"/>
+</feature>
diff --git a/gdb-xml/sparc64-fpu.xml b/gdb-xml/sparc64-fpu.xml
new file mode 100644
index 0000000000..cef935ebd6
--- /dev/null
+++ b/gdb-xml/sparc64-fpu.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.sparc.fpu">
+ <reg name="f0" bitsize="32" type="ieee_single" regnum="32"/>
+ <reg name="f1" bitsize="32" type="ieee_single" regnum="33"/>
+ <reg name="f2" bitsize="32" type="ieee_single" regnum="34"/>
+ <reg name="f3" bitsize="32" type="ieee_single" regnum="35"/>
+ <reg name="f4" bitsize="32" type="ieee_single" regnum="36"/>
+ <reg name="f5" bitsize="32" type="ieee_single" regnum="37"/>
+ <reg name="f6" bitsize="32" type="ieee_single" regnum="38"/>
+ <reg name="f7" bitsize="32" type="ieee_single" regnum="39"/>
+ <reg name="f8" bitsize="32" type="ieee_single" regnum="40"/>
+ <reg name="f9" bitsize="32" type="ieee_single" regnum="41"/>
+ <reg name="f10" bitsize="32" type="ieee_single" regnum="42"/>
+ <reg name="f11" bitsize="32" type="ieee_single" regnum="43"/>
+ <reg name="f12" bitsize="32" type="ieee_single" regnum="44"/>
+ <reg name="f13" bitsize="32" type="ieee_single" regnum="45"/>
+ <reg name="f14" bitsize="32" type="ieee_single" regnum="46"/>
+ <reg name="f15" bitsize="32" type="ieee_single" regnum="47"/>
+ <reg name="f16" bitsize="32" type="ieee_single" regnum="48"/>
+ <reg name="f17" bitsize="32" type="ieee_single" regnum="49"/>
+ <reg name="f18" bitsize="32" type="ieee_single" regnum="50"/>
+ <reg name="f19" bitsize="32" type="ieee_single" regnum="51"/>
+ <reg name="f20" bitsize="32" type="ieee_single" regnum="52"/>
+ <reg name="f21" bitsize="32" type="ieee_single" regnum="53"/>
+ <reg name="f22" bitsize="32" type="ieee_single" regnum="54"/>
+ <reg name="f23" bitsize="32" type="ieee_single" regnum="55"/>
+ <reg name="f24" bitsize="32" type="ieee_single" regnum="56"/>
+ <reg name="f25" bitsize="32" type="ieee_single" regnum="57"/>
+ <reg name="f26" bitsize="32" type="ieee_single" regnum="58"/>
+ <reg name="f27" bitsize="32" type="ieee_single" regnum="59"/>
+ <reg name="f28" bitsize="32" type="ieee_single" regnum="60"/>
+ <reg name="f29" bitsize="32" type="ieee_single" regnum="61"/>
+ <reg name="f30" bitsize="32" type="ieee_single" regnum="62"/>
+ <reg name="f31" bitsize="32" type="ieee_single" regnum="63"/>
+
+ <reg name="f32" bitsize="64" type="ieee_double" regnum="64"/>
+ <reg name="f34" bitsize="64" type="ieee_double" regnum="65"/>
+ <reg name="f36" bitsize="64" type="ieee_double" regnum="66"/>
+ <reg name="f38" bitsize="64" type="ieee_double" regnum="67"/>
+ <reg name="f40" bitsize="64" type="ieee_double" regnum="68"/>
+ <reg name="f42" bitsize="64" type="ieee_double" regnum="69"/>
+ <reg name="f44" bitsize="64" type="ieee_double" regnum="70"/>
+ <reg name="f46" bitsize="64" type="ieee_double" regnum="71"/>
+ <reg name="f48" bitsize="64" type="ieee_double" regnum="72"/>
+ <reg name="f50" bitsize="64" type="ieee_double" regnum="73"/>
+ <reg name="f52" bitsize="64" type="ieee_double" regnum="74"/>
+ <reg name="f54" bitsize="64" type="ieee_double" regnum="75"/>
+ <reg name="f56" bitsize="64" type="ieee_double" regnum="76"/>
+ <reg name="f58" bitsize="64" type="ieee_double" regnum="77"/>
+ <reg name="f60" bitsize="64" type="ieee_double" regnum="78"/>
+ <reg name="f62" bitsize="64" type="ieee_double" regnum="79"/>
+</feature>
+
diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
index ed7701b02f..6d52be9263 100644
--- a/target/sparc/cpu.c
+++ b/target/sparc/cpu.c
@@ -1090,8 +1090,10 @@ static void sparc_cpu_class_init(ObjectClass *oc,
const void *data)
cc->disas_set_info = cpu_sparc_disas_set_info;
#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
+ cc->gdb_core_xml_file = "sparc64-core.xml";
cc->gdb_num_core_regs = 86;
#else
+ cc->gdb_core_xml_file = "sparc32-core.xml";
cc->gdb_num_core_regs = 72;
#endif
cc->tcg_ops = &sparc_tcg_ops;
--
2.50.0
Rot127 <unisono@quyllur.org> writes: > From 6c116b968cb28bcc0d0236913f1926206f50a9b4 Mon Sep 17 00:00:00 2001 > From: Rot127 <unisono@quyllur.org> > Date: Fri, 27 Jun 2025 04:51:25 -0500 > Subject: [PATCH] Adds the GDB register XML files for Sparc and > Sparc64. These seems like a mangled commit. I can't get it to apply cleanly with either git am or b4, possibly because the patch is an attachment rather than generated with git-format-patch. Please see: https://qemu.readthedocs.io/en/master/devel/submitting-a-patch.html#use-git-format-patch for details of formatting patches. > > The xml files are copied from binutils-gdb. > The `-core.xml` files are just assembled from the others > to match the registers defined by QEMU. > > The addition is especially necessary if one wants to use the TCG plugins > with Sparc, because reading registers via the plugin API > just queries GDB. > The GDB stub initializes it's register file with the `*-core.xml` files. > If they don't exist it returns no data. > Also relevant for debugging I assume. > > Signed-off-by: Rot127 <unisono@quyllur.org> > --- > configs/targets/sparc-linux-user.mak | 1 + > configs/targets/sparc-softmmu.mak | 1 + > configs/targets/sparc32plus-linux-user.mak | 1 + > configs/targets/sparc64-linux-user.mak | 1 + > configs/targets/sparc64-softmmu.mak | 1 + Please split these changes into discrete patches for each target, ie: sparc sparc32plus sparc64 > gdb-xml/sparc32-core.xml | 84 ++++++++++++++++++ > gdb-xml/sparc32-cp0.xml | 19 +++++ > gdb-xml/sparc32-cpu.xml | 42 +++++++++ > gdb-xml/sparc32-fpu.xml | 43 ++++++++++ > gdb-xml/sparc64-core.xml | 99 ++++++++++++++++++++++ > gdb-xml/sparc64-cp0.xml | 17 ++++ > gdb-xml/sparc64-cpu.xml | 42 +++++++++ > gdb-xml/sparc64-fpu.xml | 60 +++++++++++++ > target/sparc/cpu.c | 2 + > 14 files changed, 413 insertions(+) > create mode 100644 gdb-xml/sparc32-core.xml > create mode 100644 gdb-xml/sparc32-cp0.xml > create mode 100644 gdb-xml/sparc32-cpu.xml > create mode 100644 gdb-xml/sparc32-fpu.xml > create mode 100644 gdb-xml/sparc64-core.xml > create mode 100644 gdb-xml/sparc64-cp0.xml > create mode 100644 gdb-xml/sparc64-cpu.xml > create mode 100644 gdb-xml/sparc64-fpu.xml > > diff --git a/configs/targets/sparc-linux-user.mak b/configs/targets/ > sparc-linux-user.mak > index 4ff4b7287d..18cc1ce29d 100644 > --- a/configs/targets/sparc-linux-user.mak > +++ b/configs/targets/sparc-linux-user.mak > @@ -2,4 +2,5 @@ TARGET_ARCH=sparc > TARGET_SYSTBL_ABI=common,32 > TARGET_SYSTBL=syscall.tbl > TARGET_BIG_ENDIAN=y > +TARGET_XML_FILES= gdb-xml/sparc32-core.xml gdb-xml/sparc32-cp0.xml gdb- > xml/sparc32-cpu.xml gdb-xml/sparc32-fpu.xml > TARGET_LONG_BITS=32 > diff --git a/configs/targets/sparc-softmmu.mak b/configs/targets/sparc- > softmmu.mak > index 57801faf1f..db782a2a63 100644 > --- a/configs/targets/sparc-softmmu.mak > +++ b/configs/targets/sparc-softmmu.mak > @@ -1,3 +1,4 @@ > TARGET_ARCH=sparc > TARGET_BIG_ENDIAN=y > +TARGET_XML_FILES= gdb-xml/sparc32-core.xml gdb-xml/sparc32-cp0.xml gdb- > xml/sparc32-cpu.xml gdb-xml/sparc32-fpu.xml > TARGET_LONG_BITS=32 > diff --git a/configs/targets/sparc32plus-linux-user.mak b/configs/ > targets/sparc32plus-linux-user.mak > index 7a16934fd1..029fa69cb0 100644 > --- a/configs/targets/sparc32plus-linux-user.mak > +++ b/configs/targets/sparc32plus-linux-user.mak > @@ -5,4 +5,5 @@ TARGET_ABI_DIR=sparc > TARGET_SYSTBL_ABI=common,32 > TARGET_SYSTBL=syscall.tbl > TARGET_BIG_ENDIAN=y > +TARGET_XML_FILES= gdb-xml/sparc64-core.xml gdb-xml/sparc64-cp0.xml gdb- > xml/sparc64-cpu.xml gdb-xml/sparc64-fpu.xml > TARGET_LONG_BITS=64 > diff --git a/configs/targets/sparc64-linux-user.mak b/configs/targets/ > sparc64-linux-user.mak > index 64ea04e3e2..67a11f3c8a 100644 > --- a/configs/targets/sparc64-linux-user.mak > +++ b/configs/targets/sparc64-linux-user.mak > @@ -4,4 +4,5 @@ TARGET_ABI_DIR=sparc > TARGET_SYSTBL_ABI=common,64 > TARGET_SYSTBL=syscall.tbl > TARGET_BIG_ENDIAN=y > +TARGET_XML_FILES= gdb-xml/sparc64-core.xml gdb-xml/sparc64-cp0.xml gdb- > xml/sparc64-cpu.xml gdb-xml/sparc64-fpu.xml > TARGET_LONG_BITS=64 > diff --git a/configs/targets/sparc64-softmmu.mak b/configs/targets/ > sparc64-softmmu.mak > index 2504e31ae3..e5f14f937c 100644 > --- a/configs/targets/sparc64-softmmu.mak > +++ b/configs/targets/sparc64-softmmu.mak > @@ -1,4 +1,5 @@ > TARGET_ARCH=sparc64 > TARGET_BASE_ARCH=sparc > TARGET_BIG_ENDIAN=y > +TARGET_XML_FILES= gdb-xml/sparc64-core.xml gdb-xml/sparc64-cp0.xml gdb- > xml/sparc64-cpu.xml gdb-xml/sparc64-fpu.xml > TARGET_LONG_BITS=64 > diff --git a/gdb-xml/sparc32-core.xml b/gdb-xml/sparc32-core.xml > new file mode 100644 > index 0000000000..61964a79d1 > --- /dev/null > +++ b/gdb-xml/sparc32-core.xml > @@ -0,0 +1,84 @@ > +<?xml version="1.0"?> > +<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc. > + > + Copying and distribution of this file, with or without modification, > + are permitted in any medium without royalty provided the copyright > + notice and this notice are preserved. --> > + > +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> > +<feature name="org.gnu.gdb.sparc.core"> > + <reg name="g0" bitsize="32" type="uint32" regnum="0"/> > + <reg name="g1" bitsize="32" type="uint32" regnum="1"/> > + <reg name="g2" bitsize="32" type="uint32" regnum="2"/> > + <reg name="g3" bitsize="32" type="uint32" regnum="3"/> > + <reg name="g4" bitsize="32" type="uint32" regnum="4"/> > + <reg name="g5" bitsize="32" type="uint32" regnum="5"/> > + <reg name="g6" bitsize="32" type="uint32" regnum="6"/> > + <reg name="g7" bitsize="32" type="uint32" regnum="7"/> > + <reg name="o0" bitsize="32" type="uint32" regnum="8"/> > + <reg name="o1" bitsize="32" type="uint32" regnum="9"/> > + <reg name="o2" bitsize="32" type="uint32" regnum="10"/> > + <reg name="o3" bitsize="32" type="uint32" regnum="11"/> > + <reg name="o4" bitsize="32" type="uint32" regnum="12"/> > + <reg name="o5" bitsize="32" type="uint32" regnum="13"/> > + <reg name="sp" bitsize="32" type="uint32" regnum="14"/> > + <reg name="o7" bitsize="32" type="uint32" regnum="15"/> > + <reg name="l0" bitsize="32" type="uint32" regnum="16"/> > + <reg name="l1" bitsize="32" type="uint32" regnum="17"/> > + <reg name="l2" bitsize="32" type="uint32" regnum="18"/> > + <reg name="l3" bitsize="32" type="uint32" regnum="19"/> > + <reg name="l4" bitsize="32" type="uint32" regnum="20"/> > + <reg name="l5" bitsize="32" type="uint32" regnum="21"/> > + <reg name="l6" bitsize="32" type="uint32" regnum="22"/> > + <reg name="l7" bitsize="32" type="uint32" regnum="23"/> > + <reg name="i0" bitsize="32" type="uint32" regnum="24"/> > + <reg name="i1" bitsize="32" type="uint32" regnum="25"/> > + <reg name="i2" bitsize="32" type="uint32" regnum="26"/> > + <reg name="i3" bitsize="32" type="uint32" regnum="27"/> > + <reg name="i4" bitsize="32" type="uint32" regnum="28"/> > + <reg name="i5" bitsize="32" type="uint32" regnum="29"/> > + <reg name="fp" bitsize="32" type="uint32" regnum="30"/> > + <reg name="i7" bitsize="32" type="uint32" regnum="31"/> > + > + <reg name="f0" bitsize="32" type="ieee_single" regnum="32"/> > + <reg name="f1" bitsize="32" type="ieee_single" regnum="33"/> > + <reg name="f2" bitsize="32" type="ieee_single" regnum="34"/> > + <reg name="f3" bitsize="32" type="ieee_single" regnum="35"/> > + <reg name="f4" bitsize="32" type="ieee_single" regnum="36"/> > + <reg name="f5" bitsize="32" type="ieee_single" regnum="37"/> > + <reg name="f6" bitsize="32" type="ieee_single" regnum="38"/> > + <reg name="f7" bitsize="32" type="ieee_single" regnum="39"/> > + <reg name="f8" bitsize="32" type="ieee_single" regnum="40"/> > + <reg name="f9" bitsize="32" type="ieee_single" regnum="41"/> > + <reg name="f10" bitsize="32" type="ieee_single" regnum="42"/> > + <reg name="f11" bitsize="32" type="ieee_single" regnum="43"/> > + <reg name="f12" bitsize="32" type="ieee_single" regnum="44"/> > + <reg name="f13" bitsize="32" type="ieee_single" regnum="45"/> > + <reg name="f14" bitsize="32" type="ieee_single" regnum="46"/> > + <reg name="f15" bitsize="32" type="ieee_single" regnum="47"/> > + <reg name="f16" bitsize="32" type="ieee_single" regnum="48"/> > + <reg name="f17" bitsize="32" type="ieee_single" regnum="49"/> > + <reg name="f18" bitsize="32" type="ieee_single" regnum="50"/> > + <reg name="f19" bitsize="32" type="ieee_single" regnum="51"/> > + <reg name="f20" bitsize="32" type="ieee_single" regnum="52"/> > + <reg name="f21" bitsize="32" type="ieee_single" regnum="53"/> > + <reg name="f22" bitsize="32" type="ieee_single" regnum="54"/> > + <reg name="f23" bitsize="32" type="ieee_single" regnum="55"/> > + <reg name="f24" bitsize="32" type="ieee_single" regnum="56"/> > + <reg name="f25" bitsize="32" type="ieee_single" regnum="57"/> > + <reg name="f26" bitsize="32" type="ieee_single" regnum="58"/> > + <reg name="f27" bitsize="32" type="ieee_single" regnum="59"/> > + <reg name="f28" bitsize="32" type="ieee_single" regnum="60"/> > + <reg name="f29" bitsize="32" type="ieee_single" regnum="61"/> > + <reg name="f30" bitsize="32" type="ieee_single" regnum="62"/> > + <reg name="f31" bitsize="32" type="ieee_single" regnum="63"/> > + > + <reg name="y" bitsize="32" type="uint32" regnum="64"/> > + <reg name="psr" bitsize="32" type="uint32" regnum="65"/> > + <reg name="wim" bitsize="32" type="uint32" regnum="66"/> > + <reg name="tbr" bitsize="32" type="uint32" regnum="67"/> > + <reg name="pc" bitsize="32" type="code_ptr" regnum="68"/> > + <reg name="npc" bitsize="32" type="code_ptr" regnum="69"/> > + <reg name="fsr" bitsize="32" type="uint32" regnum="70"/> > + <reg name="csr" bitsize="32" type="uint32" regnum="71"/> > +</feature> > diff --git a/gdb-xml/sparc32-cp0.xml b/gdb-xml/sparc32-cp0.xml > new file mode 100644 > index 0000000000..a7f6e64de1 > --- /dev/null > +++ b/gdb-xml/sparc32-cp0.xml > @@ -0,0 +1,19 @@ > +<?xml version="1.0"?> > +<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc. > + > + Copying and distribution of this file, with or without modification, > + are permitted in any medium without royalty provided the copyright > + notice and this notice are preserved. --> > + > +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> > +<feature name="org.gnu.gdb.sparc.cp0"> > + <reg name="y" bitsize="32" type="uint32" regnum="64"/> > + <reg name="psr" bitsize="32" type="uint32" regnum="65"/> > + <reg name="wim" bitsize="32" type="uint32" regnum="66"/> > + <reg name="tbr" bitsize="32" type="uint32" regnum="67"/> > + <reg name="pc" bitsize="32" type="code_ptr" regnum="68"/> > + <reg name="npc" bitsize="32" type="code_ptr" regnum="69"/> > + <reg name="fsr" bitsize="32" type="uint32" regnum="70"/> > + <reg name="csr" bitsize="32" type="uint32" regnum="71"/> > +</feature> > + > diff --git a/gdb-xml/sparc32-cpu.xml b/gdb-xml/sparc32-cpu.xml > new file mode 100644 > index 0000000000..b28c533a4f > --- /dev/null > +++ b/gdb-xml/sparc32-cpu.xml > @@ -0,0 +1,42 @@ > +<?xml version="1.0"?> > +<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc. > + > + Copying and distribution of this file, with or without modification, > + are permitted in any medium without royalty provided the copyright > + notice and this notice are preserved. --> > + > +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> > +<feature name="org.gnu.gdb.sparc.cpu"> > + <reg name="g0" bitsize="32" type="uint32" regnum="0"/> > + <reg name="g1" bitsize="32" type="uint32" regnum="1"/> > + <reg name="g2" bitsize="32" type="uint32" regnum="2"/> > + <reg name="g3" bitsize="32" type="uint32" regnum="3"/> > + <reg name="g4" bitsize="32" type="uint32" regnum="4"/> > + <reg name="g5" bitsize="32" type="uint32" regnum="5"/> > + <reg name="g6" bitsize="32" type="uint32" regnum="6"/> > + <reg name="g7" bitsize="32" type="uint32" regnum="7"/> > + <reg name="o0" bitsize="32" type="uint32" regnum="8"/> > + <reg name="o1" bitsize="32" type="uint32" regnum="9"/> > + <reg name="o2" bitsize="32" type="uint32" regnum="10"/> > + <reg name="o3" bitsize="32" type="uint32" regnum="11"/> > + <reg name="o4" bitsize="32" type="uint32" regnum="12"/> > + <reg name="o5" bitsize="32" type="uint32" regnum="13"/> > + <reg name="sp" bitsize="32" type="uint32" regnum="14"/> > + <reg name="o7" bitsize="32" type="uint32" regnum="15"/> > + <reg name="l0" bitsize="32" type="uint32" regnum="16"/> > + <reg name="l1" bitsize="32" type="uint32" regnum="17"/> > + <reg name="l2" bitsize="32" type="uint32" regnum="18"/> > + <reg name="l3" bitsize="32" type="uint32" regnum="19"/> > + <reg name="l4" bitsize="32" type="uint32" regnum="20"/> > + <reg name="l5" bitsize="32" type="uint32" regnum="21"/> > + <reg name="l6" bitsize="32" type="uint32" regnum="22"/> > + <reg name="l7" bitsize="32" type="uint32" regnum="23"/> > + <reg name="i0" bitsize="32" type="uint32" regnum="24"/> > + <reg name="i1" bitsize="32" type="uint32" regnum="25"/> > + <reg name="i2" bitsize="32" type="uint32" regnum="26"/> > + <reg name="i3" bitsize="32" type="uint32" regnum="27"/> > + <reg name="i4" bitsize="32" type="uint32" regnum="28"/> > + <reg name="i5" bitsize="32" type="uint32" regnum="29"/> > + <reg name="fp" bitsize="32" type="uint32" regnum="30"/> > + <reg name="i7" bitsize="32" type="uint32" regnum="31"/> > +</feature> > diff --git a/gdb-xml/sparc32-fpu.xml b/gdb-xml/sparc32-fpu.xml > new file mode 100644 > index 0000000000..289c1d2b99 > --- /dev/null > +++ b/gdb-xml/sparc32-fpu.xml > @@ -0,0 +1,43 @@ > +<?xml version="1.0"?> > +<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc. > + > + Copying and distribution of this file, with or without modification, > + are permitted in any medium without royalty provided the copyright > + notice and this notice are preserved. --> > + > +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> > +<feature name="org.gnu.gdb.sparc.fpu"> > + <reg name="f0" bitsize="32" type="ieee_single" regnum="32"/> > + <reg name="f1" bitsize="32" type="ieee_single" regnum="33"/> > + <reg name="f2" bitsize="32" type="ieee_single" regnum="34"/> > + <reg name="f3" bitsize="32" type="ieee_single" regnum="35"/> > + <reg name="f4" bitsize="32" type="ieee_single" regnum="36"/> > + <reg name="f5" bitsize="32" type="ieee_single" regnum="37"/> > + <reg name="f6" bitsize="32" type="ieee_single" regnum="38"/> > + <reg name="f7" bitsize="32" type="ieee_single" regnum="39"/> > + <reg name="f8" bitsize="32" type="ieee_single" regnum="40"/> > + <reg name="f9" bitsize="32" type="ieee_single" regnum="41"/> > + <reg name="f10" bitsize="32" type="ieee_single" regnum="42"/> > + <reg name="f11" bitsize="32" type="ieee_single" regnum="43"/> > + <reg name="f12" bitsize="32" type="ieee_single" regnum="44"/> > + <reg name="f13" bitsize="32" type="ieee_single" regnum="45"/> > + <reg name="f14" bitsize="32" type="ieee_single" regnum="46"/> > + <reg name="f15" bitsize="32" type="ieee_single" regnum="47"/> > + <reg name="f16" bitsize="32" type="ieee_single" regnum="48"/> > + <reg name="f17" bitsize="32" type="ieee_single" regnum="49"/> > + <reg name="f18" bitsize="32" type="ieee_single" regnum="50"/> > + <reg name="f19" bitsize="32" type="ieee_single" regnum="51"/> > + <reg name="f20" bitsize="32" type="ieee_single" regnum="52"/> > + <reg name="f21" bitsize="32" type="ieee_single" regnum="53"/> > + <reg name="f22" bitsize="32" type="ieee_single" regnum="54"/> > + <reg name="f23" bitsize="32" type="ieee_single" regnum="55"/> > + <reg name="f24" bitsize="32" type="ieee_single" regnum="56"/> > + <reg name="f25" bitsize="32" type="ieee_single" regnum="57"/> > + <reg name="f26" bitsize="32" type="ieee_single" regnum="58"/> > + <reg name="f27" bitsize="32" type="ieee_single" regnum="59"/> > + <reg name="f28" bitsize="32" type="ieee_single" regnum="60"/> > + <reg name="f29" bitsize="32" type="ieee_single" regnum="61"/> > + <reg name="f30" bitsize="32" type="ieee_single" regnum="62"/> > + <reg name="f31" bitsize="32" type="ieee_single" regnum="63"/> > +</feature> > + > diff --git a/gdb-xml/sparc64-core.xml b/gdb-xml/sparc64-core.xml > new file mode 100644 > index 0000000000..375b9bb0cc > --- /dev/null > +++ b/gdb-xml/sparc64-core.xml > @@ -0,0 +1,99 @@ > +<?xml version="1.0"?> > +<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc. > + > + Copying and distribution of this file, with or without modification, > + are permitted in any medium without royalty provided the copyright > + notice and this notice are preserved. --> > + > +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> > +<feature name="org.gnu.gdb.sparc.core"> > + <reg name="g0" bitsize="64" type="uint64" regnum="0"/> > + <reg name="g1" bitsize="64" type="uint64" regnum="1"/> > + <reg name="g2" bitsize="64" type="uint64" regnum="2"/> > + <reg name="g3" bitsize="64" type="uint64" regnum="3"/> > + <reg name="g4" bitsize="64" type="uint64" regnum="4"/> > + <reg name="g5" bitsize="64" type="uint64" regnum="5"/> > + <reg name="g6" bitsize="64" type="uint64" regnum="6"/> > + <reg name="g7" bitsize="64" type="uint64" regnum="7"/> > + <reg name="o0" bitsize="64" type="uint64" regnum="8"/> > + <reg name="o1" bitsize="64" type="uint64" regnum="9"/> > + <reg name="o2" bitsize="64" type="uint64" regnum="10"/> > + <reg name="o3" bitsize="64" type="uint64" regnum="11"/> > + <reg name="o4" bitsize="64" type="uint64" regnum="12"/> > + <reg name="o5" bitsize="64" type="uint64" regnum="13"/> > + <reg name="sp" bitsize="64" type="uint64" regnum="14"/> > + <reg name="o7" bitsize="64" type="uint64" regnum="15"/> > + <reg name="l0" bitsize="64" type="uint64" regnum="16"/> > + <reg name="l1" bitsize="64" type="uint64" regnum="17"/> > + <reg name="l2" bitsize="64" type="uint64" regnum="18"/> > + <reg name="l3" bitsize="64" type="uint64" regnum="19"/> > + <reg name="l4" bitsize="64" type="uint64" regnum="20"/> > + <reg name="l5" bitsize="64" type="uint64" regnum="21"/> > + <reg name="l6" bitsize="64" type="uint64" regnum="22"/> > + <reg name="l7" bitsize="64" type="uint64" regnum="23"/> > + <reg name="i0" bitsize="64" type="uint64" regnum="24"/> > + <reg name="i1" bitsize="64" type="uint64" regnum="25"/> > + <reg name="i2" bitsize="64" type="uint64" regnum="26"/> > + <reg name="i3" bitsize="64" type="uint64" regnum="27"/> > + <reg name="i4" bitsize="64" type="uint64" regnum="28"/> > + <reg name="i5" bitsize="64" type="uint64" regnum="29"/> > + <reg name="fp" bitsize="64" type="uint64" regnum="30"/> > + <reg name="i7" bitsize="64" type="uint64" regnum="31"/> > + > + <reg name="f0" bitsize="32" type="ieee_single" regnum="32"/> > + <reg name="f1" bitsize="32" type="ieee_single" regnum="33"/> > + <reg name="f2" bitsize="32" type="ieee_single" regnum="34"/> > + <reg name="f3" bitsize="32" type="ieee_single" regnum="35"/> > + <reg name="f4" bitsize="32" type="ieee_single" regnum="36"/> > + <reg name="f5" bitsize="32" type="ieee_single" regnum="37"/> > + <reg name="f6" bitsize="32" type="ieee_single" regnum="38"/> > + <reg name="f7" bitsize="32" type="ieee_single" regnum="39"/> > + <reg name="f8" bitsize="32" type="ieee_single" regnum="40"/> > + <reg name="f9" bitsize="32" type="ieee_single" regnum="41"/> > + <reg name="f10" bitsize="32" type="ieee_single" regnum="42"/> > + <reg name="f11" bitsize="32" type="ieee_single" regnum="43"/> > + <reg name="f12" bitsize="32" type="ieee_single" regnum="44"/> > + <reg name="f13" bitsize="32" type="ieee_single" regnum="45"/> > + <reg name="f14" bitsize="32" type="ieee_single" regnum="46"/> > + <reg name="f15" bitsize="32" type="ieee_single" regnum="47"/> > + <reg name="f16" bitsize="32" type="ieee_single" regnum="48"/> > + <reg name="f17" bitsize="32" type="ieee_single" regnum="49"/> > + <reg name="f18" bitsize="32" type="ieee_single" regnum="50"/> > + <reg name="f19" bitsize="32" type="ieee_single" regnum="51"/> > + <reg name="f20" bitsize="32" type="ieee_single" regnum="52"/> > + <reg name="f21" bitsize="32" type="ieee_single" regnum="53"/> > + <reg name="f22" bitsize="32" type="ieee_single" regnum="54"/> > + <reg name="f23" bitsize="32" type="ieee_single" regnum="55"/> > + <reg name="f24" bitsize="32" type="ieee_single" regnum="56"/> > + <reg name="f25" bitsize="32" type="ieee_single" regnum="57"/> > + <reg name="f26" bitsize="32" type="ieee_single" regnum="58"/> > + <reg name="f27" bitsize="32" type="ieee_single" regnum="59"/> > + <reg name="f28" bitsize="32" type="ieee_single" regnum="60"/> > + <reg name="f29" bitsize="32" type="ieee_single" regnum="61"/> > + <reg name="f30" bitsize="32" type="ieee_single" regnum="62"/> > + <reg name="f31" bitsize="32" type="ieee_single" regnum="63"/> > + > + <reg name="f32" bitsize="64" type="ieee_double" regnum="64"/> > + <reg name="f34" bitsize="64" type="ieee_double" regnum="65"/> > + <reg name="f36" bitsize="64" type="ieee_double" regnum="66"/> > + <reg name="f38" bitsize="64" type="ieee_double" regnum="67"/> > + <reg name="f40" bitsize="64" type="ieee_double" regnum="68"/> > + <reg name="f42" bitsize="64" type="ieee_double" regnum="69"/> > + <reg name="f44" bitsize="64" type="ieee_double" regnum="70"/> > + <reg name="f46" bitsize="64" type="ieee_double" regnum="71"/> > + <reg name="f48" bitsize="64" type="ieee_double" regnum="72"/> > + <reg name="f50" bitsize="64" type="ieee_double" regnum="73"/> > + <reg name="f52" bitsize="64" type="ieee_double" regnum="74"/> > + <reg name="f54" bitsize="64" type="ieee_double" regnum="75"/> > + <reg name="f56" bitsize="64" type="ieee_double" regnum="76"/> > + <reg name="f58" bitsize="64" type="ieee_double" regnum="77"/> > + <reg name="f60" bitsize="64" type="ieee_double" regnum="78"/> > + <reg name="f62" bitsize="64" type="ieee_double" regnum="79"/> > + > + <reg name="pc" bitsize="64" type="code_ptr" regnum="80"/> > + <reg name="npc" bitsize="64" type="code_ptr" regnum="81"/> > + <reg name="state" bitsize="64" type="uint64" regnum="82"/> > + <reg name="fsr" bitsize="64" type="uint64" regnum="83"/> > + <reg name="fprs" bitsize="64" type="uint64" regnum="84"/> > + <reg name="y" bitsize="64" type="uint64" regnum="85"/> > +</feature> > diff --git a/gdb-xml/sparc64-cp0.xml b/gdb-xml/sparc64-cp0.xml > new file mode 100644 > index 0000000000..cef58f312b > --- /dev/null > +++ b/gdb-xml/sparc64-cp0.xml > @@ -0,0 +1,17 @@ > +<?xml version="1.0"?> > +<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc. > + > + Copying and distribution of this file, with or without modification, > + are permitted in any medium without royalty provided the copyright > + notice and this notice are preserved. --> > + > +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> > +<feature name="org.gnu.gdb.sparc.cp0"> > + <reg name="pc" bitsize="64" type="code_ptr" regnum="80"/> > + <reg name="npc" bitsize="64" type="code_ptr" regnum="81"/> > + <reg name="state" bitsize="64" type="uint64" regnum="82"/> > + <reg name="fsr" bitsize="64" type="uint64" regnum="83"/> > + <reg name="fprs" bitsize="64" type="uint64" regnum="84"/> > + <reg name="y" bitsize="64" type="uint64" regnum="85"/> > +</feature> > + > diff --git a/gdb-xml/sparc64-cpu.xml b/gdb-xml/sparc64-cpu.xml > new file mode 100644 > index 0000000000..b8a66d911a > --- /dev/null > +++ b/gdb-xml/sparc64-cpu.xml > @@ -0,0 +1,42 @@ > +<?xml version="1.0"?> > +<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc. > + > + Copying and distribution of this file, with or without modification, > + are permitted in any medium without royalty provided the copyright > + notice and this notice are preserved. --> > + > +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> > +<feature name="org.gnu.gdb.sparc.cpu"> > + <reg name="g0" bitsize="64" type="uint64" regnum="0"/> > + <reg name="g1" bitsize="64" type="uint64" regnum="1"/> > + <reg name="g2" bitsize="64" type="uint64" regnum="2"/> > + <reg name="g3" bitsize="64" type="uint64" regnum="3"/> > + <reg name="g4" bitsize="64" type="uint64" regnum="4"/> > + <reg name="g5" bitsize="64" type="uint64" regnum="5"/> > + <reg name="g6" bitsize="64" type="uint64" regnum="6"/> > + <reg name="g7" bitsize="64" type="uint64" regnum="7"/> > + <reg name="o0" bitsize="64" type="uint64" regnum="8"/> > + <reg name="o1" bitsize="64" type="uint64" regnum="9"/> > + <reg name="o2" bitsize="64" type="uint64" regnum="10"/> > + <reg name="o3" bitsize="64" type="uint64" regnum="11"/> > + <reg name="o4" bitsize="64" type="uint64" regnum="12"/> > + <reg name="o5" bitsize="64" type="uint64" regnum="13"/> > + <reg name="sp" bitsize="64" type="uint64" regnum="14"/> > + <reg name="o7" bitsize="64" type="uint64" regnum="15"/> > + <reg name="l0" bitsize="64" type="uint64" regnum="16"/> > + <reg name="l1" bitsize="64" type="uint64" regnum="17"/> > + <reg name="l2" bitsize="64" type="uint64" regnum="18"/> > + <reg name="l3" bitsize="64" type="uint64" regnum="19"/> > + <reg name="l4" bitsize="64" type="uint64" regnum="20"/> > + <reg name="l5" bitsize="64" type="uint64" regnum="21"/> > + <reg name="l6" bitsize="64" type="uint64" regnum="22"/> > + <reg name="l7" bitsize="64" type="uint64" regnum="23"/> > + <reg name="i0" bitsize="64" type="uint64" regnum="24"/> > + <reg name="i1" bitsize="64" type="uint64" regnum="25"/> > + <reg name="i2" bitsize="64" type="uint64" regnum="26"/> > + <reg name="i3" bitsize="64" type="uint64" regnum="27"/> > + <reg name="i4" bitsize="64" type="uint64" regnum="28"/> > + <reg name="i5" bitsize="64" type="uint64" regnum="29"/> > + <reg name="fp" bitsize="64" type="uint64" regnum="30"/> > + <reg name="i7" bitsize="64" type="uint64" regnum="31"/> > +</feature> > diff --git a/gdb-xml/sparc64-fpu.xml b/gdb-xml/sparc64-fpu.xml > new file mode 100644 > index 0000000000..cef935ebd6 > --- /dev/null > +++ b/gdb-xml/sparc64-fpu.xml > @@ -0,0 +1,60 @@ > +<?xml version="1.0"?> > +<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc. > + > + Copying and distribution of this file, with or without modification, > + are permitted in any medium without royalty provided the copyright > + notice and this notice are preserved. --> > + > +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> > +<feature name="org.gnu.gdb.sparc.fpu"> > + <reg name="f0" bitsize="32" type="ieee_single" regnum="32"/> > + <reg name="f1" bitsize="32" type="ieee_single" regnum="33"/> > + <reg name="f2" bitsize="32" type="ieee_single" regnum="34"/> > + <reg name="f3" bitsize="32" type="ieee_single" regnum="35"/> > + <reg name="f4" bitsize="32" type="ieee_single" regnum="36"/> > + <reg name="f5" bitsize="32" type="ieee_single" regnum="37"/> > + <reg name="f6" bitsize="32" type="ieee_single" regnum="38"/> > + <reg name="f7" bitsize="32" type="ieee_single" regnum="39"/> > + <reg name="f8" bitsize="32" type="ieee_single" regnum="40"/> > + <reg name="f9" bitsize="32" type="ieee_single" regnum="41"/> > + <reg name="f10" bitsize="32" type="ieee_single" regnum="42"/> > + <reg name="f11" bitsize="32" type="ieee_single" regnum="43"/> > + <reg name="f12" bitsize="32" type="ieee_single" regnum="44"/> > + <reg name="f13" bitsize="32" type="ieee_single" regnum="45"/> > + <reg name="f14" bitsize="32" type="ieee_single" regnum="46"/> > + <reg name="f15" bitsize="32" type="ieee_single" regnum="47"/> > + <reg name="f16" bitsize="32" type="ieee_single" regnum="48"/> > + <reg name="f17" bitsize="32" type="ieee_single" regnum="49"/> > + <reg name="f18" bitsize="32" type="ieee_single" regnum="50"/> > + <reg name="f19" bitsize="32" type="ieee_single" regnum="51"/> > + <reg name="f20" bitsize="32" type="ieee_single" regnum="52"/> > + <reg name="f21" bitsize="32" type="ieee_single" regnum="53"/> > + <reg name="f22" bitsize="32" type="ieee_single" regnum="54"/> > + <reg name="f23" bitsize="32" type="ieee_single" regnum="55"/> > + <reg name="f24" bitsize="32" type="ieee_single" regnum="56"/> > + <reg name="f25" bitsize="32" type="ieee_single" regnum="57"/> > + <reg name="f26" bitsize="32" type="ieee_single" regnum="58"/> > + <reg name="f27" bitsize="32" type="ieee_single" regnum="59"/> > + <reg name="f28" bitsize="32" type="ieee_single" regnum="60"/> > + <reg name="f29" bitsize="32" type="ieee_single" regnum="61"/> > + <reg name="f30" bitsize="32" type="ieee_single" regnum="62"/> > + <reg name="f31" bitsize="32" type="ieee_single" regnum="63"/> > + > + <reg name="f32" bitsize="64" type="ieee_double" regnum="64"/> > + <reg name="f34" bitsize="64" type="ieee_double" regnum="65"/> > + <reg name="f36" bitsize="64" type="ieee_double" regnum="66"/> > + <reg name="f38" bitsize="64" type="ieee_double" regnum="67"/> > + <reg name="f40" bitsize="64" type="ieee_double" regnum="68"/> > + <reg name="f42" bitsize="64" type="ieee_double" regnum="69"/> > + <reg name="f44" bitsize="64" type="ieee_double" regnum="70"/> > + <reg name="f46" bitsize="64" type="ieee_double" regnum="71"/> > + <reg name="f48" bitsize="64" type="ieee_double" regnum="72"/> > + <reg name="f50" bitsize="64" type="ieee_double" regnum="73"/> > + <reg name="f52" bitsize="64" type="ieee_double" regnum="74"/> > + <reg name="f54" bitsize="64" type="ieee_double" regnum="75"/> > + <reg name="f56" bitsize="64" type="ieee_double" regnum="76"/> > + <reg name="f58" bitsize="64" type="ieee_double" regnum="77"/> > + <reg name="f60" bitsize="64" type="ieee_double" regnum="78"/> > + <reg name="f62" bitsize="64" type="ieee_double" regnum="79"/> > +</feature> > + > diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c > index ed7701b02f..6d52be9263 100644 > --- a/target/sparc/cpu.c > +++ b/target/sparc/cpu.c > @@ -1090,8 +1090,10 @@ static void sparc_cpu_class_init(ObjectClass *oc, > const void *data) > cc->disas_set_info = cpu_sparc_disas_set_info; > > #if defined(TARGET_SPARC64) && !defined(TARGET_ABI32) > + cc->gdb_core_xml_file = "sparc64-core.xml"; > cc->gdb_num_core_regs = 86; > #else > + cc->gdb_core_xml_file = "sparc32-core.xml"; > cc->gdb_num_core_regs = 72; > #endif > cc->tcg_ops = &sparc_tcg_ops; -- Alex Bennée Virtualisation Tech Lead @ Linaro
From: Rot127 <unisono@quyllur.org> Adds Sparc XML register files from GDB. The xml files are copied from binutils-gdb. The `*-core.xml` files are assembled from the sparc32-fpu.xml, sparc32-cp0.xml etc. to match the registers defined by QEMU. The addition is necessary if one wants to use the TCG plugins with Sparc, because reading registers via the plugin API just queries GDB. The GDB stub initializes its register file with the `*-core.xml` files. If they don't exist it returns no data. Also relevant for debugging I assume. Rot127 (3): Adds the GDB register XML files for Sparc64. Adds the GDB register XML files for Sparc32. Assign the GDB register XML files of Sparc64 to Sparc32plus. configs/targets/sparc-linux-user.mak | 1 + configs/targets/sparc-softmmu.mak | 1 + configs/targets/sparc32plus-linux-user.mak | 1 + configs/targets/sparc64-linux-user.mak | 1 + configs/targets/sparc64-softmmu.mak | 1 + gdb-xml/sparc32-core.xml | 84 ++++++++++++++++++ gdb-xml/sparc64-core.xml | 99 ++++++++++++++++++++++ target/sparc/cpu.c | 2 + 8 files changed, 190 insertions(+) create mode 100644 gdb-xml/sparc32-core.xml create mode 100644 gdb-xml/sparc64-core.xml -- 2.50.0
From: Rot127 <unisono@quyllur.org>
Commit 1/3
Signed-off-by: Rot127 <unisono@quyllur.org>
---
configs/targets/sparc64-linux-user.mak | 1 +
configs/targets/sparc64-softmmu.mak | 1 +
gdb-xml/sparc64-core.xml | 99 ++++++++++++++++++++++++++
target/sparc/cpu.c | 1 +
4 files changed, 102 insertions(+)
create mode 100644 gdb-xml/sparc64-core.xml
diff --git a/configs/targets/sparc64-linux-user.mak b/configs/targets/sparc64-linux-user.mak
index 64ea04e3e2..7c2ecb7be0 100644
--- a/configs/targets/sparc64-linux-user.mak
+++ b/configs/targets/sparc64-linux-user.mak
@@ -4,4 +4,5 @@ TARGET_ABI_DIR=sparc
TARGET_SYSTBL_ABI=common,64
TARGET_SYSTBL=syscall.tbl
TARGET_BIG_ENDIAN=y
+TARGET_XML_FILES=gdb-xml/sparc64-core.xml
TARGET_LONG_BITS=64
diff --git a/configs/targets/sparc64-softmmu.mak b/configs/targets/sparc64-softmmu.mak
index 2504e31ae3..d9d51d21e5 100644
--- a/configs/targets/sparc64-softmmu.mak
+++ b/configs/targets/sparc64-softmmu.mak
@@ -1,4 +1,5 @@
TARGET_ARCH=sparc64
TARGET_BASE_ARCH=sparc
TARGET_BIG_ENDIAN=y
+TARGET_XML_FILES=gdb-xml/sparc64-core.xml
TARGET_LONG_BITS=64
diff --git a/gdb-xml/sparc64-core.xml b/gdb-xml/sparc64-core.xml
new file mode 100644
index 0000000000..375b9bb0cc
--- /dev/null
+++ b/gdb-xml/sparc64-core.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.sparc.core">
+ <reg name="g0" bitsize="64" type="uint64" regnum="0"/>
+ <reg name="g1" bitsize="64" type="uint64" regnum="1"/>
+ <reg name="g2" bitsize="64" type="uint64" regnum="2"/>
+ <reg name="g3" bitsize="64" type="uint64" regnum="3"/>
+ <reg name="g4" bitsize="64" type="uint64" regnum="4"/>
+ <reg name="g5" bitsize="64" type="uint64" regnum="5"/>
+ <reg name="g6" bitsize="64" type="uint64" regnum="6"/>
+ <reg name="g7" bitsize="64" type="uint64" regnum="7"/>
+ <reg name="o0" bitsize="64" type="uint64" regnum="8"/>
+ <reg name="o1" bitsize="64" type="uint64" regnum="9"/>
+ <reg name="o2" bitsize="64" type="uint64" regnum="10"/>
+ <reg name="o3" bitsize="64" type="uint64" regnum="11"/>
+ <reg name="o4" bitsize="64" type="uint64" regnum="12"/>
+ <reg name="o5" bitsize="64" type="uint64" regnum="13"/>
+ <reg name="sp" bitsize="64" type="uint64" regnum="14"/>
+ <reg name="o7" bitsize="64" type="uint64" regnum="15"/>
+ <reg name="l0" bitsize="64" type="uint64" regnum="16"/>
+ <reg name="l1" bitsize="64" type="uint64" regnum="17"/>
+ <reg name="l2" bitsize="64" type="uint64" regnum="18"/>
+ <reg name="l3" bitsize="64" type="uint64" regnum="19"/>
+ <reg name="l4" bitsize="64" type="uint64" regnum="20"/>
+ <reg name="l5" bitsize="64" type="uint64" regnum="21"/>
+ <reg name="l6" bitsize="64" type="uint64" regnum="22"/>
+ <reg name="l7" bitsize="64" type="uint64" regnum="23"/>
+ <reg name="i0" bitsize="64" type="uint64" regnum="24"/>
+ <reg name="i1" bitsize="64" type="uint64" regnum="25"/>
+ <reg name="i2" bitsize="64" type="uint64" regnum="26"/>
+ <reg name="i3" bitsize="64" type="uint64" regnum="27"/>
+ <reg name="i4" bitsize="64" type="uint64" regnum="28"/>
+ <reg name="i5" bitsize="64" type="uint64" regnum="29"/>
+ <reg name="fp" bitsize="64" type="uint64" regnum="30"/>
+ <reg name="i7" bitsize="64" type="uint64" regnum="31"/>
+
+ <reg name="f0" bitsize="32" type="ieee_single" regnum="32"/>
+ <reg name="f1" bitsize="32" type="ieee_single" regnum="33"/>
+ <reg name="f2" bitsize="32" type="ieee_single" regnum="34"/>
+ <reg name="f3" bitsize="32" type="ieee_single" regnum="35"/>
+ <reg name="f4" bitsize="32" type="ieee_single" regnum="36"/>
+ <reg name="f5" bitsize="32" type="ieee_single" regnum="37"/>
+ <reg name="f6" bitsize="32" type="ieee_single" regnum="38"/>
+ <reg name="f7" bitsize="32" type="ieee_single" regnum="39"/>
+ <reg name="f8" bitsize="32" type="ieee_single" regnum="40"/>
+ <reg name="f9" bitsize="32" type="ieee_single" regnum="41"/>
+ <reg name="f10" bitsize="32" type="ieee_single" regnum="42"/>
+ <reg name="f11" bitsize="32" type="ieee_single" regnum="43"/>
+ <reg name="f12" bitsize="32" type="ieee_single" regnum="44"/>
+ <reg name="f13" bitsize="32" type="ieee_single" regnum="45"/>
+ <reg name="f14" bitsize="32" type="ieee_single" regnum="46"/>
+ <reg name="f15" bitsize="32" type="ieee_single" regnum="47"/>
+ <reg name="f16" bitsize="32" type="ieee_single" regnum="48"/>
+ <reg name="f17" bitsize="32" type="ieee_single" regnum="49"/>
+ <reg name="f18" bitsize="32" type="ieee_single" regnum="50"/>
+ <reg name="f19" bitsize="32" type="ieee_single" regnum="51"/>
+ <reg name="f20" bitsize="32" type="ieee_single" regnum="52"/>
+ <reg name="f21" bitsize="32" type="ieee_single" regnum="53"/>
+ <reg name="f22" bitsize="32" type="ieee_single" regnum="54"/>
+ <reg name="f23" bitsize="32" type="ieee_single" regnum="55"/>
+ <reg name="f24" bitsize="32" type="ieee_single" regnum="56"/>
+ <reg name="f25" bitsize="32" type="ieee_single" regnum="57"/>
+ <reg name="f26" bitsize="32" type="ieee_single" regnum="58"/>
+ <reg name="f27" bitsize="32" type="ieee_single" regnum="59"/>
+ <reg name="f28" bitsize="32" type="ieee_single" regnum="60"/>
+ <reg name="f29" bitsize="32" type="ieee_single" regnum="61"/>
+ <reg name="f30" bitsize="32" type="ieee_single" regnum="62"/>
+ <reg name="f31" bitsize="32" type="ieee_single" regnum="63"/>
+
+ <reg name="f32" bitsize="64" type="ieee_double" regnum="64"/>
+ <reg name="f34" bitsize="64" type="ieee_double" regnum="65"/>
+ <reg name="f36" bitsize="64" type="ieee_double" regnum="66"/>
+ <reg name="f38" bitsize="64" type="ieee_double" regnum="67"/>
+ <reg name="f40" bitsize="64" type="ieee_double" regnum="68"/>
+ <reg name="f42" bitsize="64" type="ieee_double" regnum="69"/>
+ <reg name="f44" bitsize="64" type="ieee_double" regnum="70"/>
+ <reg name="f46" bitsize="64" type="ieee_double" regnum="71"/>
+ <reg name="f48" bitsize="64" type="ieee_double" regnum="72"/>
+ <reg name="f50" bitsize="64" type="ieee_double" regnum="73"/>
+ <reg name="f52" bitsize="64" type="ieee_double" regnum="74"/>
+ <reg name="f54" bitsize="64" type="ieee_double" regnum="75"/>
+ <reg name="f56" bitsize="64" type="ieee_double" regnum="76"/>
+ <reg name="f58" bitsize="64" type="ieee_double" regnum="77"/>
+ <reg name="f60" bitsize="64" type="ieee_double" regnum="78"/>
+ <reg name="f62" bitsize="64" type="ieee_double" regnum="79"/>
+
+ <reg name="pc" bitsize="64" type="code_ptr" regnum="80"/>
+ <reg name="npc" bitsize="64" type="code_ptr" regnum="81"/>
+ <reg name="state" bitsize="64" type="uint64" regnum="82"/>
+ <reg name="fsr" bitsize="64" type="uint64" regnum="83"/>
+ <reg name="fprs" bitsize="64" type="uint64" regnum="84"/>
+ <reg name="y" bitsize="64" type="uint64" regnum="85"/>
+</feature>
diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
index ed7701b02f..245caf2de0 100644
--- a/target/sparc/cpu.c
+++ b/target/sparc/cpu.c
@@ -1090,6 +1090,7 @@ static void sparc_cpu_class_init(ObjectClass *oc, const void *data)
cc->disas_set_info = cpu_sparc_disas_set_info;
#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
+ cc->gdb_core_xml_file = "sparc64-core.xml";
cc->gdb_num_core_regs = 86;
#else
cc->gdb_num_core_regs = 72;
--
2.50.0
From: Rot127 <unisono@quyllur.org>
Commit 2/3
Signed-off-by: Rot127 <unisono@quyllur.org>
---
configs/targets/sparc-linux-user.mak | 1 +
configs/targets/sparc-softmmu.mak | 1 +
gdb-xml/sparc32-core.xml | 84 ++++++++++++++++++++++++++++
target/sparc/cpu.c | 1 +
4 files changed, 87 insertions(+)
create mode 100644 gdb-xml/sparc32-core.xml
diff --git a/configs/targets/sparc-linux-user.mak b/configs/targets/sparc-linux-user.mak
index 4ff4b7287d..4908ed7282 100644
--- a/configs/targets/sparc-linux-user.mak
+++ b/configs/targets/sparc-linux-user.mak
@@ -2,4 +2,5 @@ TARGET_ARCH=sparc
TARGET_SYSTBL_ABI=common,32
TARGET_SYSTBL=syscall.tbl
TARGET_BIG_ENDIAN=y
+TARGET_XML_FILES=gdb-xml/sparc32-core.xml
TARGET_LONG_BITS=32
diff --git a/configs/targets/sparc-softmmu.mak b/configs/targets/sparc-softmmu.mak
index 57801faf1f..140d8462fa 100644
--- a/configs/targets/sparc-softmmu.mak
+++ b/configs/targets/sparc-softmmu.mak
@@ -1,3 +1,4 @@
TARGET_ARCH=sparc
TARGET_BIG_ENDIAN=y
+TARGET_XML_FILES=gdb-xml/sparc32-core.xml
TARGET_LONG_BITS=32
diff --git a/gdb-xml/sparc32-core.xml b/gdb-xml/sparc32-core.xml
new file mode 100644
index 0000000000..61964a79d1
--- /dev/null
+++ b/gdb-xml/sparc32-core.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2013-2025 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.sparc.core">
+ <reg name="g0" bitsize="32" type="uint32" regnum="0"/>
+ <reg name="g1" bitsize="32" type="uint32" regnum="1"/>
+ <reg name="g2" bitsize="32" type="uint32" regnum="2"/>
+ <reg name="g3" bitsize="32" type="uint32" regnum="3"/>
+ <reg name="g4" bitsize="32" type="uint32" regnum="4"/>
+ <reg name="g5" bitsize="32" type="uint32" regnum="5"/>
+ <reg name="g6" bitsize="32" type="uint32" regnum="6"/>
+ <reg name="g7" bitsize="32" type="uint32" regnum="7"/>
+ <reg name="o0" bitsize="32" type="uint32" regnum="8"/>
+ <reg name="o1" bitsize="32" type="uint32" regnum="9"/>
+ <reg name="o2" bitsize="32" type="uint32" regnum="10"/>
+ <reg name="o3" bitsize="32" type="uint32" regnum="11"/>
+ <reg name="o4" bitsize="32" type="uint32" regnum="12"/>
+ <reg name="o5" bitsize="32" type="uint32" regnum="13"/>
+ <reg name="sp" bitsize="32" type="uint32" regnum="14"/>
+ <reg name="o7" bitsize="32" type="uint32" regnum="15"/>
+ <reg name="l0" bitsize="32" type="uint32" regnum="16"/>
+ <reg name="l1" bitsize="32" type="uint32" regnum="17"/>
+ <reg name="l2" bitsize="32" type="uint32" regnum="18"/>
+ <reg name="l3" bitsize="32" type="uint32" regnum="19"/>
+ <reg name="l4" bitsize="32" type="uint32" regnum="20"/>
+ <reg name="l5" bitsize="32" type="uint32" regnum="21"/>
+ <reg name="l6" bitsize="32" type="uint32" regnum="22"/>
+ <reg name="l7" bitsize="32" type="uint32" regnum="23"/>
+ <reg name="i0" bitsize="32" type="uint32" regnum="24"/>
+ <reg name="i1" bitsize="32" type="uint32" regnum="25"/>
+ <reg name="i2" bitsize="32" type="uint32" regnum="26"/>
+ <reg name="i3" bitsize="32" type="uint32" regnum="27"/>
+ <reg name="i4" bitsize="32" type="uint32" regnum="28"/>
+ <reg name="i5" bitsize="32" type="uint32" regnum="29"/>
+ <reg name="fp" bitsize="32" type="uint32" regnum="30"/>
+ <reg name="i7" bitsize="32" type="uint32" regnum="31"/>
+
+ <reg name="f0" bitsize="32" type="ieee_single" regnum="32"/>
+ <reg name="f1" bitsize="32" type="ieee_single" regnum="33"/>
+ <reg name="f2" bitsize="32" type="ieee_single" regnum="34"/>
+ <reg name="f3" bitsize="32" type="ieee_single" regnum="35"/>
+ <reg name="f4" bitsize="32" type="ieee_single" regnum="36"/>
+ <reg name="f5" bitsize="32" type="ieee_single" regnum="37"/>
+ <reg name="f6" bitsize="32" type="ieee_single" regnum="38"/>
+ <reg name="f7" bitsize="32" type="ieee_single" regnum="39"/>
+ <reg name="f8" bitsize="32" type="ieee_single" regnum="40"/>
+ <reg name="f9" bitsize="32" type="ieee_single" regnum="41"/>
+ <reg name="f10" bitsize="32" type="ieee_single" regnum="42"/>
+ <reg name="f11" bitsize="32" type="ieee_single" regnum="43"/>
+ <reg name="f12" bitsize="32" type="ieee_single" regnum="44"/>
+ <reg name="f13" bitsize="32" type="ieee_single" regnum="45"/>
+ <reg name="f14" bitsize="32" type="ieee_single" regnum="46"/>
+ <reg name="f15" bitsize="32" type="ieee_single" regnum="47"/>
+ <reg name="f16" bitsize="32" type="ieee_single" regnum="48"/>
+ <reg name="f17" bitsize="32" type="ieee_single" regnum="49"/>
+ <reg name="f18" bitsize="32" type="ieee_single" regnum="50"/>
+ <reg name="f19" bitsize="32" type="ieee_single" regnum="51"/>
+ <reg name="f20" bitsize="32" type="ieee_single" regnum="52"/>
+ <reg name="f21" bitsize="32" type="ieee_single" regnum="53"/>
+ <reg name="f22" bitsize="32" type="ieee_single" regnum="54"/>
+ <reg name="f23" bitsize="32" type="ieee_single" regnum="55"/>
+ <reg name="f24" bitsize="32" type="ieee_single" regnum="56"/>
+ <reg name="f25" bitsize="32" type="ieee_single" regnum="57"/>
+ <reg name="f26" bitsize="32" type="ieee_single" regnum="58"/>
+ <reg name="f27" bitsize="32" type="ieee_single" regnum="59"/>
+ <reg name="f28" bitsize="32" type="ieee_single" regnum="60"/>
+ <reg name="f29" bitsize="32" type="ieee_single" regnum="61"/>
+ <reg name="f30" bitsize="32" type="ieee_single" regnum="62"/>
+ <reg name="f31" bitsize="32" type="ieee_single" regnum="63"/>
+
+ <reg name="y" bitsize="32" type="uint32" regnum="64"/>
+ <reg name="psr" bitsize="32" type="uint32" regnum="65"/>
+ <reg name="wim" bitsize="32" type="uint32" regnum="66"/>
+ <reg name="tbr" bitsize="32" type="uint32" regnum="67"/>
+ <reg name="pc" bitsize="32" type="code_ptr" regnum="68"/>
+ <reg name="npc" bitsize="32" type="code_ptr" regnum="69"/>
+ <reg name="fsr" bitsize="32" type="uint32" regnum="70"/>
+ <reg name="csr" bitsize="32" type="uint32" regnum="71"/>
+</feature>
diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
index 245caf2de0..6d52be9263 100644
--- a/target/sparc/cpu.c
+++ b/target/sparc/cpu.c
@@ -1093,6 +1093,7 @@ static void sparc_cpu_class_init(ObjectClass *oc, const void *data)
cc->gdb_core_xml_file = "sparc64-core.xml";
cc->gdb_num_core_regs = 86;
#else
+ cc->gdb_core_xml_file = "sparc32-core.xml";
cc->gdb_num_core_regs = 72;
#endif
cc->tcg_ops = &sparc_tcg_ops;
--
2.50.0
From: Rot127 <unisono@quyllur.org>
Commit 3/3
Signed-off-by: Rot127 <unisono@quyllur.org>
---
configs/targets/sparc32plus-linux-user.mak | 1 +
1 file changed, 1 insertion(+)
diff --git a/configs/targets/sparc32plus-linux-user.mak b/configs/targets/sparc32plus-linux-user.mak
index 7a16934fd1..0d9cf44652 100644
--- a/configs/targets/sparc32plus-linux-user.mak
+++ b/configs/targets/sparc32plus-linux-user.mak
@@ -5,4 +5,5 @@ TARGET_ABI_DIR=sparc
TARGET_SYSTBL_ABI=common,32
TARGET_SYSTBL=syscall.tbl
TARGET_BIG_ENDIAN=y
+TARGET_XML_FILES=gdb-xml/sparc64-core.xml
TARGET_LONG_BITS=64
--
2.50.0
© 2016 - 2025 Red Hat, Inc.