[binutils-gdb] aarch64: Support 2024 Debug Architecture system registers.

SRINATH PARVATHANENI sripar01@sourceware.org
Fri Jun 20 16:22:55 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ed62a5351cfbe8468c265d4ff732ddf99acdbbbb

commit ed62a5351cfbe8468c265d4ff732ddf99acdbbbb
Author: Srinath Parvathaneni <srinath.parvathaneni@arm.com>
Date:   Fri Jun 20 17:21:14 2025 +0100

    aarch64: Support 2024 Debug Architecture system registers.
    
    This patch adds support for following system registers and the spec
    can be found here[1].
    1. PMBSR_EL12, PMBSR_EL2, PMBSR_EL3, PMBMAR_EL1 depends on FEAT_SPE
       and Armv9.5-A architecture and these are enabled by passing
       -march=armv9.5-a+profile.
    2. TRBSR_EL12, TRBSR_EL2, and TRBSR_EL3 depends Armv9.5-A architecture
       and these are enabled by passing -march=armv9.5-a.
    3. HFGITR2_EL2 depends on Armv8.8-A architecture and enabled by passing
       -march=armv8.8-a.
    
    [1]: https://developer.arm.com/documentation/ddi0601/2025-03/AArch64-Registers?lang=en

Diff:
---
 gas/testsuite/gas/aarch64/sysreg/sysreg-10-bad.d |  3 ++
 gas/testsuite/gas/aarch64/sysreg/sysreg-10-bad.l |  3 ++
 gas/testsuite/gas/aarch64/sysreg/sysreg-10.d     | 12 +++++
 gas/testsuite/gas/aarch64/sysreg/sysreg-10.s     |  2 +
 gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.d  |  3 ++
 gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.l  | 61 ++++++++++++++++++++++++
 gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.s  | 26 ++++++++++
 gas/testsuite/gas/aarch64/sysreg/sysreg-9.d      | 25 ++++++++++
 gas/testsuite/gas/aarch64/sysreg/sysreg-9.s      | 14 ++++++
 opcodes/aarch64-sys-regs.def                     |  8 ++++
 10 files changed, 157 insertions(+)

diff --git a/gas/testsuite/gas/aarch64/sysreg/sysreg-10-bad.d b/gas/testsuite/gas/aarch64/sysreg/sysreg-10-bad.d
new file mode 100644
index 00000000000..628de52d2ca
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sysreg/sysreg-10-bad.d
@@ -0,0 +1,3 @@
+#source: sysreg-10.s
+#as: -march=armv8.7-a -I$srcdir/$subdir
+#error_output: sysreg-10-bad.l
diff --git a/gas/testsuite/gas/aarch64/sysreg/sysreg-10-bad.l b/gas/testsuite/gas/aarch64/sysreg/sysreg-10-bad.l
new file mode 100644
index 00000000000..c3387cb6ea7
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sysreg/sysreg-10-bad.l
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*: Error: selected processor does not support system register name 'hfgitr2_el2'
+.*: Error: selected processor does not support system register name 'hfgitr2_el2'
diff --git a/gas/testsuite/gas/aarch64/sysreg/sysreg-10.d b/gas/testsuite/gas/aarch64/sysreg/sysreg-10.d
new file mode 100644
index 00000000000..f07df916485
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sysreg/sysreg-10.d
@@ -0,0 +1,12 @@
+#source: sysreg-10.s
+#as: -march=armv8.8-a -I$srcdir/$subdir
+#objdump: -dr
+
+[^:]+:     file format .*
+
+
+[^:]+:
+
+[^:]+:
+.*:	d53c31e0 	mrs	x0, hfgitr2_el2
+.*:	d51c31e0 	msr	hfgitr2_el2, x0
diff --git a/gas/testsuite/gas/aarch64/sysreg/sysreg-10.s b/gas/testsuite/gas/aarch64/sysreg/sysreg-10.s
new file mode 100644
index 00000000000..bab756470fb
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sysreg/sysreg-10.s
@@ -0,0 +1,2 @@
+	mrs	x0, hfgitr2_el2
+	msr	hfgitr2_el2, x0
diff --git a/gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.d b/gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.d
new file mode 100644
index 00000000000..a1ebac603c6
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.d
@@ -0,0 +1,3 @@
+#source: sysreg-9-bad.s
+#as: -I$srcdir/$subdir
+#error_output: sysreg-9-bad.l
diff --git a/gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.l b/gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.l
new file mode 100644
index 00000000000..b4874c28c7d
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.l
@@ -0,0 +1,61 @@
+.*: Assembler messages:
+.*: Error: selected processor does not support system register name 'pmbmar_el1'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbmar_el1'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el12'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el12'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el2'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el2'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el3'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el3'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbmar_el1'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbmar_el1'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el12'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el12'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el2'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el2'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el3'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el3'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbmar_el1'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbmar_el1'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el12'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el12'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el2'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el2'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el3'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'pmbsr_el3'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'trbsr_el12'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'trbsr_el12'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'trbsr_el2'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'trbsr_el2'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'trbsr_el3'
+.*:  Info: macro invoked from here
+.*: Error: selected processor does not support system register name 'trbsr_el3'
+.*:  Info: macro invoked from here
diff --git a/gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.s b/gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.s
new file mode 100644
index 00000000000..9429b446850
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.s
@@ -0,0 +1,26 @@
+.include "sysreg-test-utils.inc"
+
+.text
+
+.arch	armv9.4-a+profile
+rw_sys_reg pmbmar_el1
+rw_sys_reg pmbsr_el12
+rw_sys_reg pmbsr_el2
+rw_sys_reg pmbsr_el3
+
+.arch	armv9.5-a
+rw_sys_reg pmbmar_el1
+rw_sys_reg pmbsr_el12
+rw_sys_reg pmbsr_el2
+rw_sys_reg pmbsr_el3
+
+.arch	armv9.4-a
+rw_sys_reg pmbmar_el1
+rw_sys_reg pmbsr_el12
+rw_sys_reg pmbsr_el2
+rw_sys_reg pmbsr_el3
+
+.arch	armv9.4-a
+rw_sys_reg trbsr_el12
+rw_sys_reg trbsr_el2
+rw_sys_reg trbsr_el3
diff --git a/gas/testsuite/gas/aarch64/sysreg/sysreg-9.d b/gas/testsuite/gas/aarch64/sysreg/sysreg-9.d
new file mode 100644
index 00000000000..61b63ce3eec
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sysreg/sysreg-9.d
@@ -0,0 +1,25 @@
+#source: sysreg-9.s
+#as: -I$srcdir/$subdir
+#objdump: -dr
+
+
+[^:]+:     file format .*
+
+
+[^:]+:
+
+[^:]+:
+.*:	d5189aa0 	msr	pmbmar_el1, x0
+.*:	d5389aa0 	mrs	x0, pmbmar_el1
+.*:	d51d9a60 	msr	pmbsr_el12, x0
+.*:	d53d9a60 	mrs	x0, pmbsr_el12
+.*:	d51c9a60 	msr	pmbsr_el2, x0
+.*:	d53c9a60 	mrs	x0, pmbsr_el2
+.*:	d51e9a60 	msr	pmbsr_el3, x0
+.*:	d53e9a60 	mrs	x0, pmbsr_el3
+.*:	d51d9b60 	msr	trbsr_el12, x0
+.*:	d53d9b60 	mrs	x0, trbsr_el12
+.*:	d51c9b60 	msr	trbsr_el2, x0
+.*:	d53c9b60 	mrs	x0, trbsr_el2
+.*:	d51e9b60 	msr	trbsr_el3, x0
+.*:	d53e9b60 	mrs	x0, trbsr_el3
diff --git a/gas/testsuite/gas/aarch64/sysreg/sysreg-9.s b/gas/testsuite/gas/aarch64/sysreg/sysreg-9.s
new file mode 100644
index 00000000000..85a7335735a
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sysreg/sysreg-9.s
@@ -0,0 +1,14 @@
+.include "sysreg-test-utils.inc"
+
+.text
+
+.arch	armv9.5-a+profile
+rw_sys_reg pmbmar_el1
+rw_sys_reg pmbsr_el12
+rw_sys_reg pmbsr_el2
+rw_sys_reg pmbsr_el3
+
+.arch	armv9.5-a
+rw_sys_reg trbsr_el12
+rw_sys_reg trbsr_el2
+rw_sys_reg trbsr_el3
diff --git a/opcodes/aarch64-sys-regs.def b/opcodes/aarch64-sys-regs.def
index 964c0325d72..5cb2342ba9b 100644
--- a/opcodes/aarch64-sys-regs.def
+++ b/opcodes/aarch64-sys-regs.def
@@ -449,6 +449,7 @@
   SYSREG ("hdfgwtr_el2",	CPENC (3,4,3,1,5),	F_ARCHEXT,		AARCH64_FEATURE (V8_6A))
   SYSREG ("hdfgwtr2_el2",	CPENC (3,4,3,1,1),	F_ARCHEXT,		AARCH64_FEATURE (FGT2))
   SYSREG ("hfgitr_el2",		CPENC (3,4,1,1,6),	F_ARCHEXT,		AARCH64_FEATURE (V8_6A))
+  SYSREG ("hfgitr2_el2",	CPENC (3,4,3,1,7),	F_ARCHEXT,		AARCH64_FEATURE (V8_8A))
   SYSREG ("hfgrtr_el2",		CPENC (3,4,1,1,4),	F_ARCHEXT,		AARCH64_FEATURE (V8_6A))
   SYSREG ("hfgrtr2_el2",	CPENC (3,4,3,1,2),	F_ARCHEXT,		AARCH64_FEATURE (FGT2))
   SYSREG ("hfgwtr_el2",		CPENC (3,4,1,1,5),	F_ARCHEXT,		AARCH64_FEATURE (V8_6A))
@@ -638,8 +639,12 @@
   SYSREG ("pfar_el2",		CPENC (3,4,6,0,5),      F_ARCHEXT,              AARCH64_FEATURE (PFAR))
   SYSREG ("pmbidr_el1",		CPENC (3,0,9,10,7),	F_REG_READ|F_ARCHEXT,	AARCH64_FEATURE (PROFILE))
   SYSREG ("pmblimitr_el1",	CPENC (3,0,9,10,0),	F_ARCHEXT,		AARCH64_FEATURE (PROFILE))
+  SYSREG ("pmbmar_el1",		CPENC (3,0,9,10,5),	F_ARCHEXT,		AARCH64_FEATURES (2, PROFILE, V9_5A))
   SYSREG ("pmbptr_el1",		CPENC (3,0,9,10,1),	F_ARCHEXT,		AARCH64_FEATURE (PROFILE))
   SYSREG ("pmbsr_el1",		CPENC (3,0,9,10,3),	F_ARCHEXT,		AARCH64_FEATURE (PROFILE))
+  SYSREG ("pmbsr_el12",		CPENC (3,5,9,10,3),	F_ARCHEXT,		AARCH64_FEATURES (2, V9_5A, PROFILE))
+  SYSREG ("pmbsr_el2",		CPENC (3,4,9,10,3),	F_ARCHEXT,		AARCH64_FEATURES (2, V9_5A, PROFILE))
+  SYSREG ("pmbsr_el3",		CPENC (3,6,9,10,3),	F_ARCHEXT,		AARCH64_FEATURES (2, V9_5A, PROFILE))
   SYSREG ("pmccfiltr_el0",	CPENC (3,3,14,15,7),	0,			AARCH64_NO_FEATURES)
   SYSREG ("pmccntr_el0",	CPENC (3,3,9,13,0),	0,			AARCH64_NO_FEATURES)
   SYSREG ("pmccntsvr_el1",	CPENC (2,0,14,11,7),	F_REG_READ|F_ARCHEXT,	AARCH64_FEATURE (PMUv3_SS))
@@ -1007,6 +1012,9 @@
   SYSREG ("trbmar_el1",		CPENC (3,0,9,11,4),	0,			AARCH64_NO_FEATURES)
   SYSREG ("trbptr_el1",		CPENC (3,0,9,11,1),	0,			AARCH64_NO_FEATURES)
   SYSREG ("trbsr_el1",		CPENC (3,0,9,11,3),	0,			AARCH64_NO_FEATURES)
+  SYSREG ("trbsr_el12",		CPENC (3,5,9,11,3),	F_ARCHEXT,		AARCH64_FEATURE (V9_5A))
+  SYSREG ("trbsr_el2",		CPENC (3,4,9,11,3),	F_ARCHEXT,		AARCH64_FEATURE (V9_5A))
+  SYSREG ("trbsr_el3",		CPENC (3,6,9,11,3),	F_ARCHEXT,		AARCH64_FEATURE (V9_5A))
   SYSREG ("trbtrg_el1",		CPENC (3,0,9,11,6),	0,			AARCH64_NO_FEATURES)
   SYSREG ("trcacatr0",		CPENC (2,1,2,0,2),	0,			AARCH64_NO_FEATURES)
   SYSREG ("trcacatr1",		CPENC (2,1,2,2,2),	0,			AARCH64_NO_FEATURES)


More information about the Binutils-cvs mailing list