https://gcc.gnu.org/g:24909512101d59807f6d23a9963d64390eca8f60

commit r14-10646-g24909512101d59807f6d23a9963d64390eca8f60
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Thu Sep 5 12:20:57 2024 +0200

    libsanitizer: On aarch64 use hint #34 in prologue of libsanitizer functions
    
    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.
    
    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.
    
    (cherry picked from commit 2379cbb94b2668227c237c94c82e3c49fe39fd0f)

Diff:
---
 libsanitizer/interception/interception.h      |  4 ++--
 libsanitizer/sanitizer_common/sanitizer_asm.h | 14 ++++++++++++--
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/libsanitizer/interception/interception.h 
b/libsanitizer/interception/interception.h
index 58e969378a9..73135b34bee 100644
--- a/libsanitizer/interception/interception.h
+++ b/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"                    
\
      );
diff --git a/libsanitizer/sanitizer_common/sanitizer_asm.h 
b/libsanitizer/sanitizer_common/sanitizer_asm.h
index 3af66a4e449..30e9d15184e 100644
--- a/libsanitizer/sanitizer_common/sanitizer_asm.h
+++ b/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

Reply via email to