diff options
author | Victor Do Nascimento <Victor.DoNascimento@arm.com> | 2022-08-02 11:34:42 +0100 |
---|---|---|
committer | Tamar Christina <tamar.christina@arm.com> | 2022-08-02 11:34:42 +0100 |
commit | e90f28a7a78666ae593fec5cf57c0b5eb4636c22 (patch) | |
tree | 556023e124ab695b6d292e997053d6b44931958d | |
parent | 3a368c4c248f6e9f4bda3a5369befa17a4560293 (diff) | |
download | gdb-e90f28a7a78666ae593fec5cf57c0b5eb4636c22.zip gdb-e90f28a7a78666ae593fec5cf57c0b5eb4636c22.tar.gz gdb-e90f28a7a78666ae593fec5cf57c0b5eb4636c22.tar.bz2 |
arm: Add cfi expression support for ra_auth_code
This patch extends assembler support for the use of register names to
allow for pseudo-registers, e.g. ra_auth_code register.
This is done particularly with CFI directives in mind, allowing for
expressions of the type:
.cfi_register ra_auth_code, 12
gas/Changelog:
* config/tc-arm.c (tc_arm_regname_to_dw2regnum): Add
REG_TYPE_PSEUDO handling.
* testsuite/gas/arm/cfi-pacbti-m-readelf.d: New.
* testsuite/gas/arm/cfi-pacbti-m.s: New.
-rw-r--r-- | gas/config/tc-arm.c | 4 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/cfi-pacbti-m-readelf.d | 31 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/cfi-pacbti-m.s | 22 |
3 files changed, 57 insertions, 0 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index f1dc4eb..6cdc2db 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -27958,6 +27958,10 @@ tc_arm_regname_to_dw2regnum (char *regname) if (reg != FAIL) return reg + 256; + reg = arm_reg_parse (®name, REG_TYPE_PSEUDO); + if (reg != FAIL) + return reg; + return FAIL; } diff --git a/gas/testsuite/gas/arm/cfi-pacbti-m-readelf.d b/gas/testsuite/gas/arm/cfi-pacbti-m-readelf.d new file mode 100644 index 0000000..997ea75 --- /dev/null +++ b/gas/testsuite/gas/arm/cfi-pacbti-m-readelf.d @@ -0,0 +1,31 @@ +#readelf: -wf +#source: cfi-pacbti-m.s +#name: Call Frame information for Armv8.1-M.Mainline PACBTI extension +# This test is only valid on ELF based ports. +#notarget: *-*-pe *-*-wince +# VxWorks needs a special variant of this file. +#skip: *-*-vxworks* + +Contents of the .eh_frame section: + + +00000000 00000010 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 2 + Data alignment factor: -4 + Return address column: 14 + Augmentation data: 1b + DW_CFA_def_cfa: r13 ofs 0 + +00000014 00000020 00000018 FDE cie=00000000 pc=00000000..0000000c + DW_CFA_advance_loc: 4 to 00000004 + DW_CFA_register: r143 in r12 + DW_CFA_advance_loc: 4 to 00000008 + DW_CFA_def_cfa_offset: 8 + DW_CFA_offset: r14 at cfa-8 + DW_CFA_offset: r12 at cfa-4 + DW_CFA_advance_loc: 4 to 0000000c + DW_CFA_restore_extended: r143 + DW_CFA_restore: r14 + DW_CFA_def_cfa_offset: 0 diff --git a/gas/testsuite/gas/arm/cfi-pacbti-m.s b/gas/testsuite/gas/arm/cfi-pacbti-m.s new file mode 100644 index 0000000..515400d --- /dev/null +++ b/gas/testsuite/gas/arm/cfi-pacbti-m.s @@ -0,0 +1,22 @@ + .arch armv8.1-m.main + .arch_extension pacbti + .eabi_attribute Tag_PAC_extension, 2 + .eabi_attribute Tag_BTI_extension, 2 + .eabi_attribute Tag_BTI_use, 1 + .eabi_attribute Tag_PACRET_use, 1 + .syntax unified + .text + .thumb +.Lstart: + .cfi_startproc + pacbti ip, lr, sp + .cfi_register ra_auth_code, ip + push {ip, lr} + .cfi_def_cfa_offset 8 + .cfi_offset lr, -8 + .cfi_offset ip, -4 + pop {ip, lr} + .cfi_restore 143 + .cfi_restore 14 + .cfi_def_cfa_offset 0 + .cfi_endproc |