aboutsummaryrefslogtreecommitdiff
path: root/compiler-rt
diff options
context:
space:
mode:
authorDani <daniel.kiss@arm.com>2024-03-12 12:36:05 +0100
committerGitHub <noreply@github.com>2024-03-12 12:36:05 +0100
commita7ef83f005beeb3b1c7f34d44167b5abc5b6c4e5 (patch)
treec98c3fc1145f29f403f849b0ab8cc9ebde8476e5 /compiler-rt
parent3358838446428976a41390fde98fe5b04b08a132 (diff)
downloadllvm-a7ef83f005beeb3b1c7f34d44167b5abc5b6c4e5.zip
llvm-a7ef83f005beeb3b1c7f34d44167b5abc5b6c4e5.tar.gz
llvm-a7ef83f005beeb3b1c7f34d44167b5abc5b6c4e5.tar.bz2
[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.
Diffstat (limited to 'compiler-rt')
-rw-r--r--compiler-rt/lib/builtins/aarch64/sme-abi.S34
1 files changed, 22 insertions, 12 deletions
diff --git a/compiler-rt/lib/builtins/aarch64/sme-abi.S b/compiler-rt/lib/builtins/aarch64/sme-abi.S
index d470eca..4c0ff66 100644
--- a/compiler-rt/lib/builtins/aarch64/sme-abi.S
+++ b/compiler-rt/lib/builtins/aarch64/sme-abi.S
@@ -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