From: Srinath Parvathaneni Date: Fri, 20 Jun 2025 16:21:14 +0000 (+0100) Subject: aarch64: Support 2024 Debug Architecture system registers. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ed62a5351cfbe8468c265d4ff732ddf99acdbbbb;p=thirdparty%2Fbinutils-gdb.git 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 --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)