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.
This commit is contained in:
Victor Do Nascimento 2022-08-02 11:34:42 +01:00 committed by Tamar Christina
parent 3a368c4c24
commit e90f28a7a7
3 changed files with 57 additions and 0 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -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