diff options
author | Sudakshina Das <sudi.das@arm.com> | 2018-11-12 13:26:01 +0000 |
---|---|---|
committer | Sudakshina Das <sudi.das@arm.com> | 2018-11-12 13:26:01 +0000 |
commit | 70f3d23af74dd6a1f90aec8748424cf0b5a953a5 (patch) | |
tree | 18a41867a7d54c63f487fbb4f1a53e74697852fc /opcodes | |
parent | 503ba600259856b41a88b56922e094ea826df270 (diff) | |
download | gdb-70f3d23af74dd6a1f90aec8748424cf0b5a953a5.zip gdb-70f3d23af74dd6a1f90aec8748424cf0b5a953a5.tar.gz gdb-70f3d23af74dd6a1f90aec8748424cf0b5a953a5.tar.bz2 |
[BINUTILS, AARCH64, 7/8] Add system registers for Memory Tagging Extension
This patch is part of the patch series to add support for ARMv8.5-A
Memory Tagging Extensions which is an optional extension to
ARMv8.5-A and is enabled using the +memtag command line option.
This patch adds all the system registers that are part of this
extension and are accessible via the MRS/MSR instructions:
- TCO
- TFSRE0_SL1
- TFSR_EL1
- TFSR_EL2
- TFSR_EL3
- TFSR_EL12
- RGSR_EL1
- GCR_EL1
TCO is also accessible with the MSR(immediate) instruction.
*** opcodes/ChangeLog ***
2018-11-12 Sudakshina Das <sudi.das@arm.com>
* aarch64-opc.c (aarch64_sys_regs): New entries for TCO,
TFSRE0_SL1, TFSR_EL1, TFSR_EL2, TFSR_EL3, TFSR_EL12,
RGSR_EL1 and GCR_EL1.
(aarch64_sys_reg_supported_p): New check for above.
(aarch64_pstatefields): New entry for TCO.
(aarch64_pstatefield_supported_p): New check for above.
*** gas/ChangeLog ***
2018-11-12 Sudakshina Das <sudi.das@arm.com>
* testsuite/gas/aarch64/sysreg-4.s: Test TCO, TFSRE0_SL1,
TFSR_EL1, TFSR_EL2, TFSR_EL3, TFSR_EL12, RGSR_EL1 and
GCR_EL1 MSR and MRS.
* testsuite/gas/aarch64/sysreg-4.d: Likewise.
* testsuite/gas/aarch64/illegal-sysreg-4.l: Likewise.
Diffstat (limited to 'opcodes')
-rw-r--r-- | opcodes/ChangeLog | 9 | ||||
-rw-r--r-- | opcodes/aarch64-opc.c | 26 |
2 files changed, 35 insertions, 0 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 0b5daa9..6908a0a 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,5 +1,14 @@ 2018-11-12 Sudakshina Das <sudi.das@arm.com> + * aarch64-opc.c (aarch64_sys_regs): New entries for TCO, + TFSRE0_SL1, TFSR_EL1, TFSR_EL2, TFSR_EL3, TFSR_EL12, + RGSR_EL1 and GCR_EL1. + (aarch64_sys_reg_supported_p): New check for above. + (aarch64_pstatefields): New entry for TCO. + (aarch64_pstatefield_supported_p): New check for above. + +2018-11-12 Sudakshina Das <sudi.das@arm.com> + * aarch64-asm.c (aarch64_ins_addr_simple_2): New. * aarch64-asm.h (ins_addr_simple_2): Declare the above. * aarch64-dis.c (aarch64_ext_addr_simple_2): New. diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c index 3bc2ccc..b11bc33 100644 --- a/opcodes/aarch64-opc.c +++ b/opcodes/aarch64-opc.c @@ -3929,6 +3929,14 @@ const aarch64_sys_reg aarch64_sys_regs [] = { "contextidr_el12", CPENC (3, 5, C13, C0, 1), F_ARCHEXT }, { "rndr", CPENC(3,3,C2,C4,0), F_ARCHEXT | F_REG_READ }, /* RO */ { "rndrrs", CPENC(3,3,C2,C4,1), F_ARCHEXT | F_REG_READ }, /* RO */ + { "tco", CPENC(3,3,C4,C2,7), F_ARCHEXT }, + { "tfsre0_el1", CPENC(3,0,C6,C6,1), F_ARCHEXT }, + { "tfsr_el1", CPENC(3,0,C6,C5,0), F_ARCHEXT }, + { "tfsr_el2", CPENC(3,4,C6,C5,0), F_ARCHEXT }, + { "tfsr_el3", CPENC(3,6,C6,C6,0), F_ARCHEXT }, + { "tfsr_el12", CPENC(3,5,C6,C6,0), F_ARCHEXT }, + { "rgsr_el1", CPENC(3,0,C1,C0,5), F_ARCHEXT }, + { "gcr_el1", CPENC(3,0,C1,C0,6), F_ARCHEXT }, { "tpidr_el0", CPENC(3,3,C13,C0,2), 0 }, { "tpidrro_el0", CPENC(3,3,C13,C0,3), 0 }, /* RW */ { "tpidr_el1", CPENC(3,0,C13,C0,4), 0 }, @@ -4392,6 +4400,18 @@ aarch64_sys_reg_supported_p (const aarch64_feature_set features, && AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_5))) return FALSE; + /* System Registers in ARMv8.5-A with AARCH64_FEATURE_MEMTAG. */ + if ((reg->value == CPENC (3, 3, C4, C2, 7) + || reg->value == CPENC (3, 0, C6, C6, 1) + || reg->value == CPENC (3, 0, C6, C5, 0) + || reg->value == CPENC (3, 4, C6, C5, 0) + || reg->value == CPENC (3, 6, C6, C6, 0) + || reg->value == CPENC (3, 5, C6, C6, 0) + || reg->value == CPENC (3, 0, C1, C0, 5) + || reg->value == CPENC (3, 0, C1, C0, 6)) + && !(AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_MEMTAG))) + return FALSE; + return TRUE; } @@ -4411,6 +4431,7 @@ const aarch64_sys_reg aarch64_pstatefields [] = { "uao", 0x03, F_ARCHEXT }, { "ssbs", 0x19, F_ARCHEXT }, { "dit", 0x1a, F_ARCHEXT }, + { "tco", 0x1c, F_ARCHEXT }, { 0, CPENC(0,0,0,0,0), 0 }, }; @@ -4441,6 +4462,11 @@ aarch64_pstatefield_supported_p (const aarch64_feature_set features, && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_4)) return FALSE; + /* TCO. Values are from aarch64_pstatefields. */ + if (reg->value == 0x1c + && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_MEMTAG)) + return FALSE; + return TRUE; } |