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) |
7 | ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp)) |
8 | ASM_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 |
51 | ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp)) |
52 | |
53 | .comm _ZN14__interception12real__setjmpE,8,8 |
54 | .globl ASM_SYMBOL_INTERCEPTOR(_setjmp) |
55 | ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp)) |
56 | ASM_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 |
99 | ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp)) |
100 | |
101 | .comm _ZN14__interception14real_sigsetjmpE,8,8 |
102 | .globl ASM_SYMBOL_INTERCEPTOR(sigsetjmp) |
103 | ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp)) |
104 | ASM_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 |
151 | ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp)) |
152 | |
153 | .comm _ZN14__interception16real___sigsetjmpE,8,8 |
154 | .globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp) |
155 | ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)) |
156 | ASM_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 |
203 | ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)) |
204 | |