[PATCH v2] aarch64: Support 2024 Debug Architecture system registers.
Alice Carlotti
alice.carlotti@arm.com
Mon Jun 16 14:05:05 GMT 2025
More information about the Binutils mailing list
Mon Jun 16 14:05:05 GMT 2025
- Previous message (by thread): [PATCH v2] aarch64: Support 2024 Debug Architecture system registers.
- Next message (by thread): [PATCH v1] aarch64: Add supports for FEAT_PoPS feature and DC instructions.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Thu, Jun 05, 2025 at 04:01:55PM +0100, Srinath Parvathaneni wrote: > Changes from v1->v2: > 1. Modified the subject of the patch. > 2. Added new testcases for the new sysregs instead of using the > existing testcases. > 3. Modified the guarding of few sysregs by including "PROFILE" > (FEAT_SPE) in their guarding condition as per spec. > 4. Also included the support for PMBSR_EL12 and TRBSR_EL12 > 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. > > Regression tested for aarch64-none-elf target and found no regressions. > > Ok for binutils-master? > > Regards, > Srinath. > > [1]: https://developer.arm.com/documentation/ddi0601/2025-03/AArch64-Registers?lang=en > --- > .../gas/aarch64/sysreg/sysreg-10-bad.d | 3 + > .../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/aarch64/sysreg/sysreg-9-bad.d | 3 + > .../gas/aarch64/sysreg/sysreg-9-bad.l | 61 +++++++++++++++++++ > .../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(+) > create mode 100644 gas/testsuite/gas/aarch64/sysreg/sysreg-10-bad.d > create mode 100644 gas/testsuite/gas/aarch64/sysreg/sysreg-10-bad.l > create mode 100644 gas/testsuite/gas/aarch64/sysreg/sysreg-10.d > create mode 100644 gas/testsuite/gas/aarch64/sysreg/sysreg-10.s > create mode 100644 gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.d > create mode 100644 gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.l > create mode 100644 gas/testsuite/gas/aarch64/sysreg/sysreg-9-bad.s > create mode 100644 gas/testsuite/gas/aarch64/sysreg/sysreg-9.d > create mode 100644 gas/testsuite/gas/aarch64/sysreg/sysreg-9.s > > 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..535283b50cf > --- /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 sys_reg=pmbmar_el1 r=1 w=1 You don't need the default values or the sys_reg parameter name, so this can just be: rw_sys_reg pmbar_el1 (and similarly for the other macro calls). Ok with that change (here and in sysreg-9.s). Alice > +rw_sys_reg sys_reg=pmbsr_el12 r=1 w=1 > +rw_sys_reg sys_reg=pmbsr_el2 r=1 w=1 > +rw_sys_reg sys_reg=pmbsr_el3 r=1 w=1 > + > +.arch armv9.5-a > +rw_sys_reg sys_reg=pmbmar_el1 r=1 w=1 > +rw_sys_reg sys_reg=pmbsr_el12 r=1 w=1 > +rw_sys_reg sys_reg=pmbsr_el2 r=1 w=1 > +rw_sys_reg sys_reg=pmbsr_el3 r=1 w=1 > + > +.arch armv9.4-a > +rw_sys_reg sys_reg=pmbmar_el1 r=1 w=1 > +rw_sys_reg sys_reg=pmbsr_el12 r=1 w=1 > +rw_sys_reg sys_reg=pmbsr_el2 r=1 w=1 > +rw_sys_reg sys_reg=pmbsr_el3 r=1 w=1 > + > +.arch armv9.4-a > +rw_sys_reg sys_reg=trbsr_el12 r=1 w=1 > +rw_sys_reg sys_reg=trbsr_el2 r=1 w=1 > +rw_sys_reg sys_reg=trbsr_el3 r=1 w=1 > 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..2166f532826 > --- /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 sys_reg=pmbmar_el1 r=1 w=1 > +rw_sys_reg sys_reg=pmbsr_el12 r=1 w=1 > +rw_sys_reg sys_reg=pmbsr_el2 r=1 w=1 > +rw_sys_reg sys_reg=pmbsr_el3 r=1 w=1 > + > +.arch armv9.5-a > +rw_sys_reg sys_reg=trbsr_el12 r=1 w=1 > +rw_sys_reg sys_reg=trbsr_el2 r=1 w=1 > +rw_sys_reg sys_reg=trbsr_el3 r=1 w=1 > diff --git a/opcodes/aarch64-sys-regs.def b/opcodes/aarch64-sys-regs.def > index 9713ff08d1a..4da843a7be4 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)) > @@ -628,8 +629,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)) > @@ -997,6 +1002,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)
- Previous message (by thread): [PATCH v2] aarch64: Support 2024 Debug Architecture system registers.
- Next message (by thread): [PATCH v1] aarch64: Add supports for FEAT_PoPS feature and DC instructions.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list