mirror of
https://github.com/intel/llvm.git
synced 2026-01-18 16:50:51 +08:00
[AArch64][SME] Add BTI and No Exec Stack markers to sme-abi.S (#84895)
Adding BTI landing pads compiler-rt is built with -mbranch-protectoin. Tabulators are changed to 2 spaces for consistency.
This commit is contained in:
@@ -26,9 +26,10 @@
|
||||
// abort(). Note that there is no need to preserve any state before the call,
|
||||
// because the function does not return.
|
||||
DEFINE_COMPILERRT_PRIVATE_FUNCTION(do_abort)
|
||||
.cfi_startproc
|
||||
.variant_pcs SYMBOL_NAME(do_abort)
|
||||
stp x29, x30, [sp, #-32]!
|
||||
.cfi_startproc
|
||||
.variant_pcs SYMBOL_NAME(do_abort)
|
||||
BTI_C
|
||||
stp x29, x30, [sp, #-32]!
|
||||
cntd x0
|
||||
// Store VG to a stack location that we describe with .cfi_offset
|
||||
str x0, [sp, #16]
|
||||
@@ -36,22 +37,23 @@ DEFINE_COMPILERRT_PRIVATE_FUNCTION(do_abort)
|
||||
.cfi_offset w30, -24
|
||||
.cfi_offset w29, -32
|
||||
.cfi_offset 46, -16
|
||||
bl __arm_sme_state
|
||||
tbz x0, #0, 2f
|
||||
bl __arm_sme_state
|
||||
tbz x0, #0, 2f
|
||||
1:
|
||||
smstop sm
|
||||
smstop sm
|
||||
2:
|
||||
// We can't make this into a tail-call because the unwinder would
|
||||
// need to restore the value of VG.
|
||||
bl SYMBOL_NAME(abort)
|
||||
.cfi_endproc
|
||||
bl SYMBOL_NAME(abort)
|
||||
.cfi_endproc
|
||||
END_COMPILERRT_FUNCTION(do_abort)
|
||||
|
||||
// __arm_sme_state fills the result registers based on a local
|
||||
// that is set as part of the compiler-rt startup code.
|
||||
// __aarch64_has_sme_and_tpidr2_el0
|
||||
DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(__arm_sme_state)
|
||||
.variant_pcs __arm_sme_state
|
||||
.variant_pcs __arm_sme_state
|
||||
BTI_C
|
||||
mov x0, xzr
|
||||
mov x1, xzr
|
||||
|
||||
@@ -68,7 +70,8 @@ DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(__arm_sme_state)
|
||||
END_COMPILERRT_OUTLINE_FUNCTION(__arm_sme_state)
|
||||
|
||||
DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(__arm_tpidr2_restore)
|
||||
.variant_pcs __arm_tpidr2_restore
|
||||
.variant_pcs __arm_tpidr2_restore
|
||||
BTI_C
|
||||
// If TPIDR2_EL0 is nonnull, the subroutine aborts in some platform-specific
|
||||
// manner.
|
||||
mrs x14, TPIDR2_EL0
|
||||
@@ -103,7 +106,8 @@ DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(__arm_tpidr2_restore)
|
||||
END_COMPILERRT_OUTLINE_FUNCTION(__arm_tpidr2_restore)
|
||||
|
||||
DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(__arm_tpidr2_save)
|
||||
.variant_pcs __arm_tpidr2_restore
|
||||
.variant_pcs __arm_tpidr2_restore
|
||||
BTI_C
|
||||
// If the current thread does not have access to TPIDR2_EL0, the subroutine
|
||||
// does nothing.
|
||||
adrp x14, TPIDR2_SYMBOL
|
||||
@@ -143,7 +147,8 @@ DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(__arm_tpidr2_save)
|
||||
END_COMPILERRT_OUTLINE_FUNCTION(__arm_tpidr2_save)
|
||||
|
||||
DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(__arm_za_disable)
|
||||
.variant_pcs __arm_tpidr2_restore
|
||||
.variant_pcs __arm_tpidr2_restore
|
||||
BTI_C
|
||||
// If the current thread does not have access to SME, the subroutine does
|
||||
// nothing.
|
||||
adrp x14, TPIDR2_SYMBOL
|
||||
@@ -174,3 +179,8 @@ DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(__arm_za_disable)
|
||||
0:
|
||||
ret
|
||||
END_COMPILERRT_OUTLINE_FUNCTION(__arm_za_disable)
|
||||
|
||||
NO_EXEC_STACK_DIRECTIVE
|
||||
|
||||
// GNU property note for BTI and PAC
|
||||
GNU_PROPERTY_BTI_PAC
|
||||
|
||||
Reference in New Issue
Block a user