summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Do Nascimento <Victor.DoNascimento@arm.com>2022-08-02 11:34:42 +0100
committerTamar Christina <tamar.christina@arm.com>2022-08-02 11:34:42 +0100
commite90f28a7a78666ae593fec5cf57c0b5eb4636c22 (patch)
tree556023e124ab695b6d292e997053d6b44931958d
parent3a368c4c248f6e9f4bda3a5369befa17a4560293 (diff)
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.c4
-rw-r--r--gas/testsuite/gas/arm/cfi-pacbti-m-readelf.d31
-rw-r--r--gas/testsuite/gas/arm/cfi-pacbti-m.s22
3 files changed, 57 insertions, 0 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index f1dc4eb2d5..6cdc2db307 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 (&regname, 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 0000000000..997ea75f17
--- /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 0000000000..515400d86f
--- /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