File tree Expand file tree Collapse file tree 2 files changed +24
-2
lines changed Expand file tree Collapse file tree 2 files changed +24
-2
lines changed Original file line number Diff line number Diff line change @@ -199,8 +199,9 @@ const interpose_substitution substitution_##func_name[] \
199
199
".type " SANITIZER_STRINGIFY(TRAMPOLINE(func)) ", %function\n" \
200
200
SANITIZER_STRINGIFY(TRAMPOLINE(func)) ":\n" \
201
201
SANITIZER_STRINGIFY(CFI_STARTPROC) "\n" \
202
- SANITIZER_STRINGIFY(ASM_TAIL_CALL) " __interceptor_" \
203
- SANITIZER_STRINGIFY(ASM_PREEMPTIBLE_SYM(func)) "\n" \
202
+ C_ASM_TAIL_CALL(SANITIZER_STRINGIFY(TRAMPOLINE(func)), \
203
+ "__interceptor_" \
204
+ SANITIZER_STRINGIFY(ASM_PREEMPTIBLE_SYM(func))) "\n" \
204
205
SANITIZER_STRINGIFY(CFI_ENDPROC) "\n" \
205
206
".size " SANITIZER_STRINGIFY(TRAMPOLINE(func)) ", " \
206
207
".-" SANITIZER_STRINGIFY(TRAMPOLINE(func)) "\n" \
Original file line number Diff line number Diff line change 44
44
45
45
#if defined(__x86_64__) || defined(__i386__) || defined(__sparc__)
46
46
# define ASM_TAIL_CALL jmp
47
+ #elif defined(__mips__) && __mips_isa_rev >= 6
48
+ # define ASM_TAIL_CALL bc
47
49
#elif defined(__arm__) || defined(__aarch64__) || defined(__mips__) || \
48
50
defined (__powerpc__) || defined(__loongarch_lp64)
49
51
# define ASM_TAIL_CALL b
53
55
# define ASM_TAIL_CALL tail
54
56
#endif
55
57
58
+ #if defined(__mips64) && __mips_isa_rev < 6
59
+ # define C_ASM_TAIL_CALL (tfunc, ifunc ) \
60
+ " lui $t8, %hi(%neg(%gp_rel(" tfunc " )))\n " \
61
+ " daddu $t8, $t8, $t9\n " \
62
+ " daddu $t8, $t8, %lo(%neg(%gp_rel(" tfunc " )))\n " \
63
+ " ld $t9, %got_disp(" ifunc " )($t8)\n " \
64
+ " jr $t9\n "
65
+ #elif defined(__mips__) && __mips_isa_rev < 6
66
+ # define C_ASM_TAIL_CALL (tfunc, ifunc ) \
67
+ " .set noreorder\n " \
68
+ " .cpload $t9\n " \
69
+ " .set reorder\n " \
70
+ " lw $t9, %got(" ifunc " )($gp)\n " \
71
+ " jr $t9\n "
72
+ #elif defined(ASM_TAIL_CALL)
73
+ # define C_ASM_TAIL_CALL (tfunc, ifunc ) \
74
+ SANITIZER_STRINGIFY (ASM_TAIL_CALL) " " ifunc
75
+ #endif
76
+
56
77
#if defined(__ELF__) && defined(__x86_64__) || defined(__i386__) || \
57
78
defined (__riscv)
58
79
# define ASM_PREEMPTIBLE_SYM (sym ) sym@plt
You can’t perform that action at this time.
0 commit comments