brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 124bd59 Raw
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