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