123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- // The content of this file is x86_64-only:
- #if defined(__x86_64__)
- #include "sanitizer_common/sanitizer_asm.h"
- #if !defined(__APPLE__)
- .section .text
- #else
- .section __TEXT,__text
- #endif
- ASM_HIDDEN(__tsan_setjmp)
- #if defined(__NetBSD__)
- .comm _ZN14__interception15real___setjmp14E,8,8
- #elif !defined(__APPLE__)
- .comm _ZN14__interception11real_setjmpE,8,8
- #endif
- #if defined(__NetBSD__)
- .globl ASM_SYMBOL_INTERCEPTOR(__setjmp14)
- ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__setjmp14))
- ASM_SYMBOL_INTERCEPTOR(__setjmp14):
- #else
- .globl ASM_SYMBOL_INTERCEPTOR(setjmp)
- ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp))
- ASM_SYMBOL_INTERCEPTOR(setjmp):
- #endif
- CFI_STARTPROC
- _CET_ENDBR
- // save env parameter
- push %rdi
- CFI_ADJUST_CFA_OFFSET(8)
- CFI_REL_OFFSET(%rdi, 0)
- // obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
- #if defined(__FreeBSD__) || defined(__NetBSD__)
- lea 8(%rsp), %rdi
- #elif defined(__linux__) || defined(__APPLE__)
- lea 16(%rsp), %rdi
- #else
- # error "Unknown platform"
- #endif
- // call tsan interceptor
- call ASM_SYMBOL(__tsan_setjmp)
- // restore env parameter
- pop %rdi
- CFI_ADJUST_CFA_OFFSET(-8)
- CFI_RESTORE(%rdi)
- // tail jump to libc setjmp
- movl $0, %eax
- #if defined(__NetBSD__)
- movq _ZN14__interception15real___setjmp14E@GOTPCREL(%rip), %rdx
- jmp *(%rdx)
- #elif !defined(__APPLE__)
- movq _ZN14__interception11real_setjmpE@GOTPCREL(%rip), %rdx
- jmp *(%rdx)
- #else
- jmp ASM_SYMBOL(setjmp)
- #endif
- CFI_ENDPROC
- #if defined(__NetBSD__)
- ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__setjmp14))
- #else
- ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp))
- #endif
- .comm _ZN14__interception12real__setjmpE,8,8
- .globl ASM_SYMBOL_INTERCEPTOR(_setjmp)
- ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp))
- ASM_SYMBOL_INTERCEPTOR(_setjmp):
- CFI_STARTPROC
- _CET_ENDBR
- // save env parameter
- push %rdi
- CFI_ADJUST_CFA_OFFSET(8)
- CFI_REL_OFFSET(%rdi, 0)
- // obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
- #if defined(__FreeBSD__) || defined(__NetBSD__)
- lea 8(%rsp), %rdi
- #elif defined(__linux__) || defined(__APPLE__)
- lea 16(%rsp), %rdi
- #else
- # error "Unknown platform"
- #endif
- // call tsan interceptor
- call ASM_SYMBOL(__tsan_setjmp)
- // restore env parameter
- pop %rdi
- CFI_ADJUST_CFA_OFFSET(-8)
- CFI_RESTORE(%rdi)
- // tail jump to libc setjmp
- movl $0, %eax
- #if !defined(__APPLE__)
- movq _ZN14__interception12real__setjmpE@GOTPCREL(%rip), %rdx
- jmp *(%rdx)
- #else
- jmp ASM_SYMBOL(_setjmp)
- #endif
- CFI_ENDPROC
- ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp))
- #if defined(__NetBSD__)
- .comm _ZN14__interception18real___sigsetjmp14E,8,8
- .globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14)
- ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14))
- ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14):
- #else
- .comm _ZN14__interception14real_sigsetjmpE,8,8
- .globl ASM_SYMBOL_INTERCEPTOR(sigsetjmp)
- ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
- ASM_SYMBOL_INTERCEPTOR(sigsetjmp):
- #endif
- CFI_STARTPROC
- _CET_ENDBR
- // save env parameter
- push %rdi
- CFI_ADJUST_CFA_OFFSET(8)
- CFI_REL_OFFSET(%rdi, 0)
- // save savesigs parameter
- push %rsi
- CFI_ADJUST_CFA_OFFSET(8)
- CFI_REL_OFFSET(%rsi, 0)
- // align stack frame
- sub $8, %rsp
- CFI_ADJUST_CFA_OFFSET(8)
- // obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
- #if defined(__FreeBSD__) || defined(__NetBSD__)
- lea 24(%rsp), %rdi
- #elif defined(__linux__) || defined(__APPLE__)
- lea 32(%rsp), %rdi
- #else
- # error "Unknown platform"
- #endif
- // call tsan interceptor
- call ASM_SYMBOL(__tsan_setjmp)
- // unalign stack frame
- add $8, %rsp
- CFI_ADJUST_CFA_OFFSET(-8)
- // restore savesigs parameter
- pop %rsi
- CFI_ADJUST_CFA_OFFSET(-8)
- CFI_RESTORE(%rsi)
- // restore env parameter
- pop %rdi
- CFI_ADJUST_CFA_OFFSET(-8)
- CFI_RESTORE(%rdi)
- // tail jump to libc sigsetjmp
- movl $0, %eax
- #if defined(__NetBSD__)
- movq _ZN14__interception18real___sigsetjmp14E@GOTPCREL(%rip), %rdx
- jmp *(%rdx)
- #elif !defined(__APPLE__)
- movq _ZN14__interception14real_sigsetjmpE@GOTPCREL(%rip), %rdx
- jmp *(%rdx)
- #else
- jmp ASM_SYMBOL(sigsetjmp)
- #endif
- CFI_ENDPROC
- #if defined(__NetBSD__)
- ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14))
- #else
- ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
- #endif
- #if !defined(__APPLE__) && !defined(__NetBSD__)
- .comm _ZN14__interception16real___sigsetjmpE,8,8
- .globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)
- ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
- ASM_SYMBOL_INTERCEPTOR(__sigsetjmp):
- CFI_STARTPROC
- _CET_ENDBR
- // save env parameter
- push %rdi
- CFI_ADJUST_CFA_OFFSET(8)
- CFI_REL_OFFSET(%rdi, 0)
- // save savesigs parameter
- push %rsi
- CFI_ADJUST_CFA_OFFSET(8)
- CFI_REL_OFFSET(%rsi, 0)
- // align stack frame
- sub $8, %rsp
- CFI_ADJUST_CFA_OFFSET(8)
- // obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
- #if defined(__FreeBSD__)
- lea 24(%rsp), %rdi
- #else
- lea 32(%rsp), %rdi
- #endif
- // call tsan interceptor
- call ASM_SYMBOL(__tsan_setjmp)
- // unalign stack frame
- add $8, %rsp
- CFI_ADJUST_CFA_OFFSET(-8)
- // restore savesigs parameter
- pop %rsi
- CFI_ADJUST_CFA_OFFSET(-8)
- CFI_RESTORE(%rsi)
- // restore env parameter
- pop %rdi
- CFI_ADJUST_CFA_OFFSET(-8)
- CFI_RESTORE(%rdi)
- // tail jump to libc sigsetjmp
- movl $0, %eax
- movq _ZN14__interception16real___sigsetjmpE@GOTPCREL(%rip), %rdx
- jmp *(%rdx)
- CFI_ENDPROC
- ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
- #endif // !defined(__APPLE__) && !defined(__NetBSD__)
- NO_EXEC_STACK_DIRECTIVE
- #endif
|