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