[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.
This commit is contained in:
John Brawn
2025-06-27 13:26:09 +01:00
committed by GitHub
parent d8ca77e2b9
commit ec1c73b2ec
9 changed files with 14 additions and 8 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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