#include "sanitizer_common/sanitizer_asm.h" #define CFA_OFFSET 160 #define R2_REL_OFFSET 16 #define R3_REL_OFFSET 24 #define R14_REL_OFFSET 112 #define R15_REL_OFFSET 120 #define FRAME_SIZE 160 .text ASM_HIDDEN(__tsan_setjmp) .macro intercept symbol, real .comm \real, 8, 8 .globl ASM_SYMBOL_INTERCEPTOR(\symbol) ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(\symbol)) ASM_SYMBOL_INTERCEPTOR(\symbol): CFI_STARTPROC stmg %r2, %r3, R2_REL_OFFSET(%r15) CFI_REL_OFFSET(%r2, R2_REL_OFFSET) CFI_REL_OFFSET(%r3, R3_REL_OFFSET) stmg %r14, %r15, R14_REL_OFFSET(%r15) CFI_REL_OFFSET(%r14, R14_REL_OFFSET) CFI_REL_OFFSET(%r15, R15_REL_OFFSET) aghi %r15, -FRAME_SIZE CFI_ADJUST_CFA_OFFSET(FRAME_SIZE) la %r2, FRAME_SIZE(%r15) brasl %r14, ASM_SYMBOL(__tsan_setjmp) lmg %r14, %r15, FRAME_SIZE + R14_REL_OFFSET(%r15) CFI_RESTORE(%r14) CFI_RESTORE(%r15) CFI_DEF_CFA_OFFSET(CFA_OFFSET) lmg %r2, %r3, R2_REL_OFFSET(%r15) CFI_RESTORE(%r2) CFI_RESTORE(%r3) larl %r1, \real lg %r1, 0(%r1) br %r1 CFI_ENDPROC ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(\symbol)) .endm intercept setjmp, _ZN14__interception11real_setjmpE intercept _setjmp, _ZN14__interception12real__setjmpE intercept sigsetjmp, _ZN14__interception14real_sigsetjmpE intercept __sigsetjmp, _ZN14__interception16real___sigsetjmpE NO_EXEC_STACK_DIRECTIVE