Jakub Jelinek <ja...@redhat.com> writes: > Hi! > > When gcc is built with -mbranch-protection=standard, running sanitized > programs doesn't work properly on bti enabled kernels. > > This has been fixed upstream with > https://github.com/llvm/llvm-project/pull/84061 > > The following patch cherry picks that from upstream, ok for trunk/14.3?
Yes, thanks! Richard > For trunk we should eventually do a full merge from upstream, but I'm hoping > they will first fix up the _BitInt libubsan support mess. > > 2024-09-05 Jakub Jelinek <ja...@redhat.com> > > * sanitizer_common/sanitizer_asm.h: Cherry-pick llvm-project revision > 1c792d24e0a228ad49cc004a1c26bbd7cd87f030. > * interception/interception.h: Likewise. > > --- libsanitizer/sanitizer_common/sanitizer_asm.h > +++ libsanitizer/sanitizer_common/sanitizer_asm.h > @@ -42,6 +42,16 @@ > # define CFI_RESTORE(reg) > #endif > > +#if defined(__aarch64__) && defined(__ARM_FEATURE_BTI_DEFAULT) > +# define ASM_STARTPROC CFI_STARTPROC; hint #34 > +# define C_ASM_STARTPROC SANITIZER_STRINGIFY(CFI_STARTPROC) "\nhint #34" > +#else > +# define ASM_STARTPROC CFI_STARTPROC > +# define C_ASM_STARTPROC SANITIZER_STRINGIFY(CFI_STARTPROC) > +#endif > +#define ASM_ENDPROC CFI_ENDPROC > +#define C_ASM_ENDPROC SANITIZER_STRINGIFY(CFI_ENDPROC) > + > #if defined(__x86_64__) || defined(__i386__) || defined(__sparc__) > # define ASM_TAIL_CALL jmp > #elif defined(__arm__) || defined(__aarch64__) || defined(__mips__) || \ > @@ -114,9 +124,9 @@ > .globl __interceptor_trampoline_##name; > \ > ASM_TYPE_FUNCTION(__interceptor_trampoline_##name); > \ > __interceptor_trampoline_##name: > \ > - CFI_STARTPROC; > \ > + ASM_STARTPROC; > \ > ASM_TAIL_CALL ASM_PREEMPTIBLE_SYM(__interceptor_##name); > \ > - CFI_ENDPROC; > \ > + ASM_ENDPROC; > \ > ASM_SIZE(__interceptor_trampoline_##name) > # define ASM_INTERCEPTOR_TRAMPOLINE_SUPPORT 1 > # endif // Architecture supports interceptor trampoline > --- libsanitizer/interception/interception.h > +++ libsanitizer/interception/interception.h > @@ -204,11 +204,11 @@ const interpose_substitution substitution_##func_name[] > \ > ".type " SANITIZER_STRINGIFY(TRAMPOLINE(func)) ", " > \ > ASM_TYPE_FUNCTION_STR "\n" > \ > SANITIZER_STRINGIFY(TRAMPOLINE(func)) ":\n" > \ > - SANITIZER_STRINGIFY(CFI_STARTPROC) "\n" > \ > + C_ASM_STARTPROC "\n" > \ > C_ASM_TAIL_CALL(SANITIZER_STRINGIFY(TRAMPOLINE(func)), > \ > "__interceptor_" > \ > SANITIZER_STRINGIFY(ASM_PREEMPTIBLE_SYM(func))) > "\n" \ > - SANITIZER_STRINGIFY(CFI_ENDPROC) "\n" > \ > + C_ASM_ENDPROC "\n" > \ > ".size " SANITIZER_STRINGIFY(TRAMPOLINE(func)) ", " > \ > ".-" SANITIZER_STRINGIFY(TRAMPOLINE(func)) "\n" > \ > ); > > Jakub