1#include "sanitizer_common/sanitizer_asm.h" 2 3.section .text 4 5.comm _ZN14__interception11real_setjmpE,8,8 6.globl ASM_SYMBOL_INTERCEPTOR(setjmp) 7ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp)) 8ASM_SYMBOL_INTERCEPTOR(setjmp): 9 CFI_STARTPROC 10 11 // Save frame pointer and return address register 12 addi sp, sp, -32 13 sd ra, 24(sp) 14 sd s0, 16(sp) 15 CFI_DEF_CFA_OFFSET (32) 16 CFI_OFFSET (1, -8) 17 CFI_OFFSET (8, -16) 18 19 // Adjust the SP for previous frame 20 addi s0, sp, 32 21 CFI_DEF_CFA_REGISTER (8) 22 23 // Save env parameter 24 sd a0, 8(sp) 25 CFI_OFFSET (10, -24) 26 27 // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)` 28 addi a0, s0, 0 29 30 // call tsan interceptor 31 call ASM_SYMBOL(__tsan_setjmp) 32 33 // Restore env parameter 34 ld a0, 8(sp) 35 CFI_RESTORE (10) 36 37 // Restore frame/link register 38 ld s0, 16(sp) 39 ld ra, 24(sp) 40 addi sp, sp, 32 41 CFI_RESTORE (8) 42 CFI_RESTORE (1) 43 CFI_DEF_CFA (2, 0) 44 45 // tail jump to libc setjmp 46 la t1, _ZN14__interception11real_setjmpE 47 ld t1, 0(t1) 48 jr t1 49 50 CFI_ENDPROC 51ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp)) 52 53.comm _ZN14__interception12real__setjmpE,8,8 54.globl ASM_SYMBOL_INTERCEPTOR(_setjmp) 55ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp)) 56ASM_SYMBOL_INTERCEPTOR(_setjmp): 57 CFI_STARTPROC 58 59 // Save frame pointer and return address register 60 addi sp, sp, -32 61 sd ra, 24(sp) 62 sd s0, 16(sp) 63 CFI_DEF_CFA_OFFSET (32) 64 CFI_OFFSET (1, -8) 65 CFI_OFFSET (8, -16) 66 67 // Adjust the SP for previous frame 68 addi s0, sp, 32 69 CFI_DEF_CFA_REGISTER (8) 70 71 // Save env parameter 72 sd a0, 8(sp) 73 CFI_OFFSET (10, -24) 74 75 // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)` 76 addi a0, s0, 0 77 78 // call tsan interceptor 79 call ASM_SYMBOL(__tsan_setjmp) 80 81 // Restore env parameter 82 ld a0, 8(sp) 83 CFI_RESTORE (10) 84 85 // Restore frame/link register 86 ld s0, 16(sp) 87 ld ra, 24(sp) 88 addi sp, sp, 32 89 CFI_RESTORE (8) 90 CFI_RESTORE (1) 91 CFI_DEF_CFA (2, 0) 92 93 // tail jump to libc setjmp 94 la t1, _ZN14__interception12real__setjmpE 95 ld t1, 0(t1) 96 jr t1 97 98 CFI_ENDPROC 99ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp)) 100 101.comm _ZN14__interception14real_sigsetjmpE,8,8 102.globl ASM_SYMBOL_INTERCEPTOR(sigsetjmp) 103ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp)) 104ASM_SYMBOL_INTERCEPTOR(sigsetjmp): 105 CFI_STARTPROC 106 107 // Save frame pointer and return address register 108 addi sp, sp, -32 109 sd ra, 24(sp) 110 sd s0, 16(sp) 111 CFI_DEF_CFA_OFFSET (32) 112 CFI_OFFSET (1, -8) 113 CFI_OFFSET (8, -16) 114 115 // Adjust the SP for previous frame 116 addi s0, sp, 32 117 CFI_DEF_CFA_REGISTER (8) 118 119 // Save env parameter 120 sd a0, 8(sp) 121 sd a1, 0(sp) 122 CFI_OFFSET (10, -24) 123 CFI_OFFSET (11, -32) 124 125 // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)` 126 addi a0, s0, 0 127 128 // call tsan interceptor 129 call ASM_SYMBOL(__tsan_setjmp) 130 131 // Restore env parameter 132 ld a0, 8(sp) 133 ld a1, 0(sp) 134 CFI_RESTORE (10) 135 CFI_RESTORE (11) 136 137 // Restore frame/link register 138 ld s0, 16(sp) 139 ld ra, 24(sp) 140 addi sp, sp, 32 141 CFI_RESTORE (8) 142 CFI_RESTORE (1) 143 CFI_DEF_CFA (2, 0) 144 145 // tail jump to libc setjmp 146 la t1, _ZN14__interception14real_sigsetjmpE 147 ld t1, 0(t1) 148 jr t1 149 150 CFI_ENDPROC 151ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp)) 152 153.comm _ZN14__interception16real___sigsetjmpE,8,8 154.globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp) 155ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)) 156ASM_SYMBOL_INTERCEPTOR(__sigsetjmp): 157 CFI_STARTPROC 158 159 // Save frame pointer and return address register 160 addi sp, sp, -32 161 sd ra, 24(sp) 162 sd s0, 16(sp) 163 CFI_DEF_CFA_OFFSET (32) 164 CFI_OFFSET (1, -8) 165 CFI_OFFSET (8, -16) 166 167 // Adjust the SP for previous frame 168 addi s0, sp, 32 169 CFI_DEF_CFA_REGISTER (8) 170 171 // Save env parameter 172 sd a0, 8(sp) 173 sd a1, 0(sp) 174 CFI_OFFSET (10, -24) 175 CFI_OFFSET (11, -32) 176 177 // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)` 178 addi a0, s0, 0 179 180 // call tsan interceptor 181 call ASM_SYMBOL(__tsan_setjmp) 182 183 // Restore env parameter 184 ld a0, 8(sp) 185 ld a1, 0(sp) 186 CFI_RESTORE (10) 187 CFI_RESTORE (11) 188 189 // Restore frame/link register 190 ld s0, 16(sp) 191 ld ra, 24(sp) 192 addi sp, sp, 32 193 CFI_RESTORE (8) 194 CFI_RESTORE (1) 195 CFI_DEF_CFA (2, 0) 196 197 // tail jump to libc setjmp 198 la t1, _ZN14__interception16real___sigsetjmpE 199 ld t1, 0(t1) 200 jr t1 201 202 CFI_ENDPROC 203ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)) 204