[compiler-rt] ec1c73b - [compiler-rt][ARM] Only use bxaut when the target has pacbti (#146057)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 27 05:26:12 PDT 2025
Author: John Brawn
Date: 2025-06-27T13:26:09+01:00
New Revision: ec1c73b2ecb3c3fb04a09c18e2411c067bf22fce
URL: https://github.com/llvm/llvm-project/commit/ec1c73b2ecb3c3fb04a09c18e2411c067bf22fce
DIFF: https://github.com/llvm/llvm-project/commit/ec1c73b2ecb3c3fb04a09c18e2411c067bf22fce.diff
LOG: [compiler-rt][ARM] Only use bxaut when the target has pacbti (#146057)
Most pacbti instructions are a nop when the target does not have pacbti,
and thus safe to execute, but bxaut is an undefined instruction. When we
don't have pacbti (e.g. if we're compiling compiler-rt with
-mbranch-protection=standard in order to be forward-compatible with
pacbti while still working on targets without it) then we need to use
separate aut and bx instructions.
Added:
Modified:
compiler-rt/lib/builtins/arm/aeabi_cdcmp.S
compiler-rt/lib/builtins/arm/aeabi_cfcmp.S
compiler-rt/lib/builtins/arm/aeabi_dcmp.S
compiler-rt/lib/builtins/arm/aeabi_fcmp.S
compiler-rt/lib/builtins/arm/aeabi_idivmod.S
compiler-rt/lib/builtins/arm/aeabi_ldivmod.S
compiler-rt/lib/builtins/arm/aeabi_uidivmod.S
compiler-rt/lib/builtins/arm/aeabi_uldivmod.S
compiler-rt/lib/builtins/assembly.h
Removed:
################################################################################
diff --git a/compiler-rt/lib/builtins/arm/aeabi_cdcmp.S b/compiler-rt/lib/builtins/arm/aeabi_cdcmp.S
index 19311396b2015..0271afe7844f2 100644
--- a/compiler-rt/lib/builtins/arm/aeabi_cdcmp.S
+++ b/compiler-rt/lib/builtins/arm/aeabi_cdcmp.S
@@ -128,7 +128,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cdcmple)
msr APSR_nzcvq, ip
#if defined(__ARM_FEATURE_PAC_DEFAULT)
pop {r0-r3, r12, lr}
- bxaut r12, lr, sp
+ PAC_RETURN
#else
pop {r0-r3}
POP_PC()
diff --git a/compiler-rt/lib/builtins/arm/aeabi_cfcmp.S b/compiler-rt/lib/builtins/arm/aeabi_cfcmp.S
index ca382968cf5d9..5cb7d16042f42 100644
--- a/compiler-rt/lib/builtins/arm/aeabi_cfcmp.S
+++ b/compiler-rt/lib/builtins/arm/aeabi_cfcmp.S
@@ -128,7 +128,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmple)
msr APSR_nzcvq, ip
#if defined(__ARM_FEATURE_PAC_DEFAULT)
pop {r0-r3, r12, lr}
- bxaut r12, lr, sp
+ PAC_RETURN
#else
pop {r0-r3}
POP_PC()
diff --git a/compiler-rt/lib/builtins/arm/aeabi_dcmp.S b/compiler-rt/lib/builtins/arm/aeabi_dcmp.S
index 4d1cc77d9a28b..2ed13789d2f38 100644
--- a/compiler-rt/lib/builtins/arm/aeabi_dcmp.S
+++ b/compiler-rt/lib/builtins/arm/aeabi_dcmp.S
@@ -29,7 +29,7 @@
# define PROLOGUE PACBTI_LANDING SEPARATOR \
push { r12, lr }
# define EPILOGUE pop { r12, lr } SEPARATOR \
- bxaut r12, lr, sp
+ PAC_RETURN
#elif defined(__ARM_FEATURE_BTI_DEFAULT)
# define PROLOGUE PACBTI_LANDING SEPARATOR \
push { r4, lr }
diff --git a/compiler-rt/lib/builtins/arm/aeabi_fcmp.S b/compiler-rt/lib/builtins/arm/aeabi_fcmp.S
index 190a111d3447a..0e3d399a552b4 100644
--- a/compiler-rt/lib/builtins/arm/aeabi_fcmp.S
+++ b/compiler-rt/lib/builtins/arm/aeabi_fcmp.S
@@ -29,7 +29,7 @@
# define PROLOGUE PACBTI_LANDING SEPARATOR \
push { r12, lr }
# define EPILOGUE pop { r12, lr } SEPARATOR \
- bxaut r12, lr, sp
+ PAC_RETURN
#elif defined(__ARM_FEATURE_BTI_DEFAULT)
# define PROLOGUE PACBTI_LANDING SEPARATOR \
push { r4, lr }
diff --git a/compiler-rt/lib/builtins/arm/aeabi_idivmod.S b/compiler-rt/lib/builtins/arm/aeabi_idivmod.S
index 4b82c946b1eb7..d95b1db0b459a 100644
--- a/compiler-rt/lib/builtins/arm/aeabi_idivmod.S
+++ b/compiler-rt/lib/builtins/arm/aeabi_idivmod.S
@@ -49,7 +49,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_idivmod)
add sp, sp, #4
#if defined(__ARM_FEATURE_PAC_DEFAULT)
pop { r12, lr }
- bxaut r12, lr, sp
+ PAC_RETURN
#else
pop { pc }
#endif
diff --git a/compiler-rt/lib/builtins/arm/aeabi_ldivmod.S b/compiler-rt/lib/builtins/arm/aeabi_ldivmod.S
index c11ead68ff8fb..4fbfe3f1d2656 100644
--- a/compiler-rt/lib/builtins/arm/aeabi_ldivmod.S
+++ b/compiler-rt/lib/builtins/arm/aeabi_ldivmod.S
@@ -45,7 +45,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_ldivmod)
add sp, sp, #16
#if defined(__ARM_FEATURE_PAC_DEFAULT)
pop {r6, r12, lr}
- bxaut r12, lr, sp
+ PAC_RETURN
#else
pop {r6, pc}
#endif
diff --git a/compiler-rt/lib/builtins/arm/aeabi_uidivmod.S b/compiler-rt/lib/builtins/arm/aeabi_uidivmod.S
index db2eecb3234f7..f77beab774115 100644
--- a/compiler-rt/lib/builtins/arm/aeabi_uidivmod.S
+++ b/compiler-rt/lib/builtins/arm/aeabi_uidivmod.S
@@ -56,7 +56,7 @@ LOCAL_LABEL(case_denom_larger):
add sp, sp, #4
#if defined(__ARM_FEATURE_PAC_DEFAULT)
pop { r12, lr }
- bxaut r12, lr, sp
+ PAC_RETURN
#else
pop { pc }
#endif
diff --git a/compiler-rt/lib/builtins/arm/aeabi_uldivmod.S b/compiler-rt/lib/builtins/arm/aeabi_uldivmod.S
index 66da6a39ef5df..e019ba721b75d 100644
--- a/compiler-rt/lib/builtins/arm/aeabi_uldivmod.S
+++ b/compiler-rt/lib/builtins/arm/aeabi_uldivmod.S
@@ -45,7 +45,7 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_uldivmod)
add sp, sp, #16
#if defined(__ARM_FEATURE_PAC_DEFAULT)
pop {r6, r12, lr}
- bxaut r12, lr, sp
+ PAC_RETURN
#else
pop {r6, pc}
#endif
diff --git a/compiler-rt/lib/builtins/assembly.h b/compiler-rt/lib/builtins/assembly.h
index 714bcd4d5c1f6..89372f18c84b2 100644
--- a/compiler-rt/lib/builtins/assembly.h
+++ b/compiler-rt/lib/builtins/assembly.h
@@ -205,6 +205,12 @@
#define PACBTI_LANDING
#endif
+#if defined(__ARM_FEATURE_PAUTH)
+#define PAC_RETURN bxaut r12, lr, sp
+#else
+#define PAC_RETURN aut r12, lr, sp SEPARATOR bx lr
+#endif
+
#else // !defined(__arm)
#define DECLARE_FUNC_ENCODING
#define DEFINE_CODE_STATE
More information about the llvm-commits
mailing list