brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · 8b9b706 Raw
213 lines · plain
1// The content of this file is x86_64-only:2#if defined(__x86_64__)3 4#include "sanitizer_common/sanitizer_asm.h"5 6.att_syntax7 8#if !defined(__APPLE__)9.section .text10#else11.section __TEXT,__text12#endif13 14ASM_HIDDEN(__tsan_setjmp)15#if defined(__NetBSD__)16.comm _ZN14__interception15real___setjmp14E,8,817#elif !defined(__APPLE__)18.comm _ZN14__interception11real_setjmpE,8,819#endif20#if defined(__NetBSD__)21.globl ASM_SYMBOL_INTERCEPTOR(__setjmp14)22ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__setjmp14))23ASM_SYMBOL_INTERCEPTOR(__setjmp14):24#else25.globl ASM_SYMBOL_INTERCEPTOR(setjmp)26ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp))27ASM_SYMBOL_INTERCEPTOR(setjmp):28#endif29  CFI_STARTPROC30  _CET_ENDBR31  // save env parameter32  push %rdi33  CFI_ADJUST_CFA_OFFSET(8)34  CFI_REL_OFFSET(%rdi, 0)35  // obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`36#if defined(__FreeBSD__) || defined(__NetBSD__)37  lea 8(%rsp), %rdi38#elif defined(__linux__) || defined(__APPLE__)39  lea 16(%rsp), %rdi40#else41# error "Unknown platform"42#endif43  // call tsan interceptor44  call ASM_SYMBOL(__tsan_setjmp)45  // restore env parameter46  pop %rdi47  CFI_ADJUST_CFA_OFFSET(-8)48  CFI_RESTORE(%rdi)49  // tail jump to libc setjmp50  movl $0, %eax51#if defined(__NetBSD__)52  movq _ZN14__interception15real___setjmp14E@GOTPCREL(%rip), %rdx53  jmp *(%rdx)54#elif !defined(__APPLE__)55  movq _ZN14__interception11real_setjmpE@GOTPCREL(%rip), %rdx56  jmp *(%rdx)57#else58  jmp ASM_SYMBOL(setjmp)59#endif60  CFI_ENDPROC61#if defined(__NetBSD__)62ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__setjmp14))63#else64ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp))65#endif66 67.comm _ZN14__interception12real__setjmpE,8,868.globl ASM_SYMBOL_INTERCEPTOR(_setjmp)69ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp))70ASM_SYMBOL_INTERCEPTOR(_setjmp):71  CFI_STARTPROC72  _CET_ENDBR73  // save env parameter74  push %rdi75  CFI_ADJUST_CFA_OFFSET(8)76  CFI_REL_OFFSET(%rdi, 0)77  // obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`78#if defined(__FreeBSD__) || defined(__NetBSD__)79  lea 8(%rsp), %rdi80#elif defined(__linux__) || defined(__APPLE__)81  lea 16(%rsp), %rdi82#else83# error "Unknown platform"84#endif85  // call tsan interceptor86  call ASM_SYMBOL(__tsan_setjmp)87  // restore env parameter88  pop %rdi89  CFI_ADJUST_CFA_OFFSET(-8)90  CFI_RESTORE(%rdi)91  // tail jump to libc setjmp92  movl $0, %eax93#if !defined(__APPLE__)94  movq _ZN14__interception12real__setjmpE@GOTPCREL(%rip), %rdx95  jmp *(%rdx)96#else97  jmp ASM_SYMBOL(_setjmp)98#endif99  CFI_ENDPROC100ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp))101 102#if defined(__NetBSD__)103.comm _ZN14__interception18real___sigsetjmp14E,8,8104.globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14)105ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14))106ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14):107#else108.comm _ZN14__interception14real_sigsetjmpE,8,8109.globl ASM_SYMBOL_INTERCEPTOR(sigsetjmp)110ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))111ASM_SYMBOL_INTERCEPTOR(sigsetjmp):112#endif113  CFI_STARTPROC114  _CET_ENDBR115  // save env parameter116  push %rdi117  CFI_ADJUST_CFA_OFFSET(8)118  CFI_REL_OFFSET(%rdi, 0)119  // save savesigs parameter120  push %rsi121  CFI_ADJUST_CFA_OFFSET(8)122  CFI_REL_OFFSET(%rsi, 0)123  // align stack frame124  sub $8, %rsp125  CFI_ADJUST_CFA_OFFSET(8)126  // obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`127#if defined(__FreeBSD__) || defined(__NetBSD__)128  lea 24(%rsp), %rdi129#elif defined(__linux__) || defined(__APPLE__)130  lea 32(%rsp), %rdi131#else132# error "Unknown platform"133#endif134  // call tsan interceptor135  call ASM_SYMBOL(__tsan_setjmp)136  // unalign stack frame137  add $8, %rsp138  CFI_ADJUST_CFA_OFFSET(-8)139  // restore savesigs parameter140  pop %rsi141  CFI_ADJUST_CFA_OFFSET(-8)142  CFI_RESTORE(%rsi)143  // restore env parameter144  pop %rdi145  CFI_ADJUST_CFA_OFFSET(-8)146  CFI_RESTORE(%rdi)147  // tail jump to libc sigsetjmp148  movl $0, %eax149#if defined(__NetBSD__)150  movq _ZN14__interception18real___sigsetjmp14E@GOTPCREL(%rip), %rdx151  jmp *(%rdx)152#elif !defined(__APPLE__)153  movq _ZN14__interception14real_sigsetjmpE@GOTPCREL(%rip), %rdx154  jmp *(%rdx)155#else156  jmp ASM_SYMBOL(sigsetjmp)157#endif158  CFI_ENDPROC159#if defined(__NetBSD__)160ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14))161#else162ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))163#endif164 165#if !defined(__APPLE__) && !defined(__NetBSD__)166.comm _ZN14__interception16real___sigsetjmpE,8,8167.globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)168ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))169ASM_SYMBOL_INTERCEPTOR(__sigsetjmp):170  CFI_STARTPROC171  _CET_ENDBR172  // save env parameter173  push %rdi174  CFI_ADJUST_CFA_OFFSET(8)175  CFI_REL_OFFSET(%rdi, 0)176  // save savesigs parameter177  push %rsi178  CFI_ADJUST_CFA_OFFSET(8)179  CFI_REL_OFFSET(%rsi, 0)180  // align stack frame181  sub $8, %rsp182  CFI_ADJUST_CFA_OFFSET(8)183  // obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`184#if defined(__FreeBSD__)185  lea 24(%rsp), %rdi186#else187  lea 32(%rsp), %rdi188#endif189  // call tsan interceptor190  call ASM_SYMBOL(__tsan_setjmp)191  // unalign stack frame192  add $8, %rsp193  CFI_ADJUST_CFA_OFFSET(-8)194  // restore savesigs parameter195  pop %rsi196  CFI_ADJUST_CFA_OFFSET(-8)197  CFI_RESTORE(%rsi)198  // restore env parameter199  pop %rdi200  CFI_ADJUST_CFA_OFFSET(-8)201  CFI_RESTORE(%rdi)202  // tail jump to libc sigsetjmp203  movl $0, %eax204  movq _ZN14__interception16real___sigsetjmpE@GOTPCREL(%rip), %rdx205  jmp *(%rdx)206  CFI_ENDPROC207ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))208#endif  // !defined(__APPLE__) && !defined(__NetBSD__)209 210NO_EXEC_STACK_DIRECTIVE211 212#endif213