226 lines · plain
1// The content of this file is AArch64-only:2#if defined(__aarch64__)3 4#include "sanitizer_common/sanitizer_asm.h"5#include "builtins/assembly.h"6 7TEXT_SECTION8#if defined(__APPLE__)9.align 310#endif11 12ASM_HIDDEN(__tsan_setjmp)13.comm _ZN14__interception11real_setjmpE,8,814.globl ASM_SYMBOL_INTERCEPTOR(setjmp)15ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp))16ASM_SYMBOL_INTERCEPTOR(setjmp):17 CFI_STARTPROC18 BTI_C19 20 // Save frame/link register21 stp x29, x30, [sp, -32]!22 CFI_DEF_CFA_OFFSET (32)23 CFI_OFFSET (29, -32)24 CFI_OFFSET (30, -24)25 26 // Adjust the SP for previous frame27 add x29, sp, 028 CFI_DEF_CFA_REGISTER (29)29 30 // Save env parameter31 str x0, [sp, 16]32 CFI_OFFSET (0, -16)33 34 // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`35 add x0, x29, 3236 37 // call tsan interceptor38 bl ASM_SYMBOL(__tsan_setjmp)39 40 // Restore env parameter41 ldr x0, [sp, 16]42 CFI_RESTORE (0)43 44 // Restore frame/link register45 ldp x29, x30, [sp], 3246 CFI_RESTORE (29)47 CFI_RESTORE (30)48 CFI_DEF_CFA (31, 0)49 50 // tail jump to libc setjmp51#if !defined(__APPLE__)52 adrp x1, :got:_ZN14__interception11real_setjmpE53 ldr x1, [x1, #:got_lo12:_ZN14__interception11real_setjmpE]54 ldr x1, [x1]55#else56 adrp x1, _setjmp@GOTPAGE57 ldr x1, [x1, _setjmp@GOTPAGEOFF]58#endif59 br x160 61 CFI_ENDPROC62ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp))63 64.comm _ZN14__interception12real__setjmpE,8,865.globl ASM_SYMBOL_INTERCEPTOR(_setjmp)66ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp))67ASM_SYMBOL_INTERCEPTOR(_setjmp):68 CFI_STARTPROC69 BTI_C70 71 // Save frame/link register72 stp x29, x30, [sp, -32]!73 CFI_DEF_CFA_OFFSET (32)74 CFI_OFFSET (29, -32)75 CFI_OFFSET (30, -24)76 77 // Adjust the SP for previous frame78 add x29, sp, 079 CFI_DEF_CFA_REGISTER (29)80 81 // Save env parameter82 str x0, [sp, 16]83 CFI_OFFSET (0, -16)84 85 // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`86 add x0, x29, 3287 88 // call tsan interceptor89 bl ASM_SYMBOL(__tsan_setjmp)90 91 // Restore env parameter92 ldr x0, [sp, 16]93 CFI_RESTORE (0)94 95 // Restore frame/link register96 ldp x29, x30, [sp], 3297 CFI_RESTORE (29)98 CFI_RESTORE (30)99 CFI_DEF_CFA (31, 0)100 101 // tail jump to libc setjmp102#if !defined(__APPLE__)103 adrp x1, :got:_ZN14__interception12real__setjmpE104 ldr x1, [x1, #:got_lo12:_ZN14__interception12real__setjmpE]105 ldr x1, [x1]106#else107 adrp x1, __setjmp@GOTPAGE108 ldr x1, [x1, __setjmp@GOTPAGEOFF]109#endif110 br x1111 112 CFI_ENDPROC113ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp))114 115.comm _ZN14__interception14real_sigsetjmpE,8,8116.globl ASM_SYMBOL_INTERCEPTOR(sigsetjmp)117ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))118ASM_SYMBOL_INTERCEPTOR(sigsetjmp):119 CFI_STARTPROC120 BTI_C121 122 // Save frame/link register123 stp x29, x30, [sp, -32]!124 CFI_DEF_CFA_OFFSET (32)125 CFI_OFFSET (29, -32)126 CFI_OFFSET (30, -24)127 128 // Adjust the SP for previous frame129 add x29, sp, 0130 CFI_DEF_CFA_REGISTER (29)131 132 // Save env and savesigs parameter133 stp x0, x1, [sp, 16]134 CFI_OFFSET (0, -16)135 CFI_OFFSET (1, -8)136 137 // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`138 add x0, x29, 32139 140 // call tsan interceptor141 bl ASM_SYMBOL(__tsan_setjmp)142 143 // Restore env and savesigs parameter144 ldp x0, x1, [sp, 16]145 CFI_RESTORE (0)146 CFI_RESTORE (1)147 148 // Restore frame/link register149 ldp x29, x30, [sp], 32150 CFI_RESTORE (29)151 CFI_RESTORE (30)152 CFI_DEF_CFA (31, 0)153 154 // tail jump to libc sigsetjmp155#if !defined(__APPLE__)156 adrp x2, :got:_ZN14__interception14real_sigsetjmpE157 ldr x2, [x2, #:got_lo12:_ZN14__interception14real_sigsetjmpE]158 ldr x2, [x2]159#else160 adrp x2, _sigsetjmp@GOTPAGE161 ldr x2, [x2, _sigsetjmp@GOTPAGEOFF]162#endif163 br x2164 CFI_ENDPROC165ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))166 167#if !defined(__APPLE__)168.comm _ZN14__interception16real___sigsetjmpE,8,8169.globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)170ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))171ASM_SYMBOL_INTERCEPTOR(__sigsetjmp):172 CFI_STARTPROC173 BTI_C174 175 // Save frame/link register176 stp x29, x30, [sp, -32]!177 CFI_DEF_CFA_OFFSET (32)178 CFI_OFFSET (29, -32)179 CFI_OFFSET (30, -24)180 181 // Adjust the SP for previous frame182 add x29, sp, 0183 CFI_DEF_CFA_REGISTER (29)184 185 // Save env and savesigs parameter186 stp x0, x1, [sp, 16]187 CFI_OFFSET (0, -16)188 CFI_OFFSET (1, -8)189 190 // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`191 add x0, x29, 32192 193 // call tsan interceptor194 bl ASM_SYMBOL(__tsan_setjmp)195 196 // Restore env and savesigs parameter197 ldp x0, x1, [sp, 16]198 CFI_RESTORE (0)199 CFI_RESTORE (1)200 201 // Restore frame/link register202 ldp x29, x30, [sp], 32203 CFI_RESTORE (29)204 CFI_RESTORE (30)205 CFI_DEF_CFA (31, 0)206 207 // tail jump to libc __sigsetjmp208#if !defined(__APPLE__)209 adrp x2, :got:_ZN14__interception16real___sigsetjmpE210 ldr x2, [x2, #:got_lo12:_ZN14__interception16real___sigsetjmpE]211 ldr x2, [x2]212#else213 adrp x2, ASM_SYMBOL(__sigsetjmp)@page214 add x2, x2, ASM_SYMBOL(__sigsetjmp)@pageoff215#endif216 br x2217 CFI_ENDPROC218ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))219#endif220 221NO_EXEC_STACK_DIRECTIVE222 223GNU_PROPERTY_BTI_PAC_GCS224 225#endif226