gas: sframe: testsuite: add testcase for .cfi_negate_ra_state

Add a new test to check that .cfi_negate_ra_state on aarch64 is handled
well (a non-empty SFrame section with valid SFrame FREs is generated).

ChangeLog:

	* testsuite/gas/cfi-sframe/cfi-sframe-aarch64-2.d: New test.
	* testsuite/gas/cfi-sframe/cfi-sframe-aarch64-2.s: Likewise.
	* testsuite/gas/cfi-sframe/cfi-sframe.exp: Adjust the list
	accordingly.
This commit is contained in:
Indu Bhagat
2022-12-16 22:02:07 -08:00
parent 49948bce0e
commit 5bec250b5a
3 changed files with 39 additions and 0 deletions

View File

@ -0,0 +1,20 @@
#as: --gsframe
#objdump: --sframe=.sframe
#name: SFrame cfi_negate_ra_state test
#...
Contents of the SFrame section .sframe:
Header :
Version: SFRAME_VERSION_1
Flags: NONE
Num FDEs: 1
Num FREs: 2
Function Index :
func idx \[0\]: pc = 0x0, size = 8 bytes
STARTPC + CFA + FP + RA +
#...
0+0004 +sp\+16 +u +u\[s\] +
#pass

View File

@ -0,0 +1,18 @@
## ARMv8.3 addded support a new security feature named Pointer Authentication. The
## main idea behind this is to use the unused bits in the pointer values.
## Each pointer is patched with a PAC before writing to memory, and is verified
## before using it.
## When the pointers are mangled, the unwinder needs to know so it can mask off
## the PAC from the pointer value to recover the return address, and
## conversely, skip doing so if the pointers are not mangled.
##
## .cfi_negate_ra_state CFI directive is used to convey this information.
##
## SFrame has support for this. This testcase ensures that the directive
## is interpreted successfully.
.cfi_startproc
.long 0
.cfi_def_cfa_offset 16
.cfi_negate_ra_state
.long 0
.cfi_endproc

View File

@ -96,4 +96,5 @@ if { [istarget "x86_64-*-*"] && [gas_sframe_check] } then {
# aarch64 specific tests
if { [istarget "aarch64*-*-*"] && [gas_sframe_check] } then {
run_dump_test "cfi-sframe-aarch64-1"
run_dump_test "cfi-sframe-aarch64-2"
}