D154390-pre-R6
authorLLVM Packaging Team <pkg-llvm-team@lists.alioth.debian.org>
Thu, 11 Jan 2024 13:15:09 +0000 (14:15 +0100)
committerSylvestre Ledru <sylvestre@debian.org>
Thu, 11 Jan 2024 13:15:09 +0000 (14:15 +0100)
see https://reviews.llvm.org/D158491, still unreviewed upstream

see https://reviews.llvm.org/D158491, still unreviewed upstream

Gbp-Pq: Topic mips
Gbp-Pq: Name D154390-pre-R6.diff

compiler-rt/lib/interception/interception.h
compiler-rt/lib/sanitizer_common/sanitizer_asm.h

index 069f73d276f3c40b8881d5389e6bdc5d7ac15c31..fbbc52b34c6f5d9367e8368b3da77b562b9a88d8 100644 (file)
@@ -199,8 +199,9 @@ const interpose_substitution substitution_##func_name[]             \
        ".type  " SANITIZER_STRINGIFY(TRAMPOLINE(func)) ", %function\n"         \
        SANITIZER_STRINGIFY(TRAMPOLINE(func)) ":\n"                             \
        SANITIZER_STRINGIFY(CFI_STARTPROC) "\n"                                 \
-       SANITIZER_STRINGIFY(ASM_TAIL_CALL) " __interceptor_"                    \
-         SANITIZER_STRINGIFY(ASM_PREEMPTIBLE_SYM(func)) "\n"                   \
+       C_ASM_TAIL_CALL(SANITIZER_STRINGIFY(TRAMPOLINE(func)),                  \
+                       "__interceptor_"                                        \
+                         SANITIZER_STRINGIFY(ASM_PREEMPTIBLE_SYM(func))) "\n"  \
        SANITIZER_STRINGIFY(CFI_ENDPROC) "\n"                                   \
        ".size  " SANITIZER_STRINGIFY(TRAMPOLINE(func)) ", "                    \
             ".-" SANITIZER_STRINGIFY(TRAMPOLINE(func)) "\n"                    \
index 3c9bbdc9678b09a6e93647122caeca2bc1095ddc..c4e28e13a72f3ea7c1533db2ed54ee1ef9884dbd 100644 (file)
@@ -44,6 +44,8 @@
 
 #if defined(__x86_64__) || defined(__i386__) || defined(__sparc__)
 # define ASM_TAIL_CALL jmp
+#elif defined(__mips__) && __mips_isa_rev >= 6
+# define ASM_TAIL_CALL bc
 #elif defined(__arm__) || defined(__aarch64__) || defined(__mips__) || \
     defined(__powerpc__) || defined(__loongarch_lp64)
 # define ASM_TAIL_CALL b
 # define ASM_TAIL_CALL tail
 #endif
 
+#if defined(__mips64) && __mips_isa_rev < 6
+# define C_ASM_TAIL_CALL(tfunc, ifunc)                        \
+    "lui $t8, %hi(%neg(%gp_rel(" tfunc ")))\n"                \
+    "daddu $t8, $t8, $t9\n"                                   \
+    "daddu $t8, $t8, %lo(%neg(%gp_rel(" tfunc ")))\n"         \
+    "ld $t9, %got_disp(" ifunc ")($t8)\n"                     \
+    "jr $t9\n"
+#elif defined(__mips__) && __mips_isa_rev < 6
+# define C_ASM_TAIL_CALL(tfunc, ifunc)                        \
+    ".set    noreorder\n"                                     \
+    ".cpload $t9\n"                                           \
+    ".set    reorder\n"                                       \
+    "lw $t9, %got(" ifunc ")($gp)\n"                          \
+    "jr $t9\n"
+#elif defined(ASM_TAIL_CALL)
+#  define C_ASM_TAIL_CALL(tfunc, ifunc) \
+    SANITIZER_STRINGIFY(ASM_TAIL_CALL) " " ifunc
+#endif
+
 #if defined(__ELF__) && defined(__x86_64__) || defined(__i386__) || \
     defined(__riscv)
 # define ASM_PREEMPTIBLE_SYM(sym) sym@plt