annotate libsanitizer/tsan/tsan_rtl_amd64.S @ 119:9d1ff3ae1824

fix conv1 example
author kono
date Thu, 08 Mar 2018 12:20:02 +0900
parents 04ced10e8804
children 84e7813d76e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // The content of this file is x86_64-only:
kono
parents:
diff changeset
2 #if defined(__x86_64__)
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 #include "sanitizer_common/sanitizer_asm.h"
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 #if !defined(__APPLE__)
kono
parents:
diff changeset
7 .section .text
kono
parents:
diff changeset
8 #else
kono
parents:
diff changeset
9 .section __TEXT,__text
kono
parents:
diff changeset
10 #endif
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 ASM_HIDDEN(__tsan_trace_switch)
kono
parents:
diff changeset
13 .globl ASM_TSAN_SYMBOL(__tsan_trace_switch_thunk)
kono
parents:
diff changeset
14 ASM_TSAN_SYMBOL(__tsan_trace_switch_thunk):
kono
parents:
diff changeset
15 CFI_STARTPROC
kono
parents:
diff changeset
16 # Save scratch registers.
kono
parents:
diff changeset
17 push %rax
kono
parents:
diff changeset
18 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
19 CFI_REL_OFFSET(%rax, 0)
kono
parents:
diff changeset
20 push %rcx
kono
parents:
diff changeset
21 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
22 CFI_REL_OFFSET(%rcx, 0)
kono
parents:
diff changeset
23 push %rdx
kono
parents:
diff changeset
24 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
25 CFI_REL_OFFSET(%rdx, 0)
kono
parents:
diff changeset
26 push %rsi
kono
parents:
diff changeset
27 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
28 CFI_REL_OFFSET(%rsi, 0)
kono
parents:
diff changeset
29 push %rdi
kono
parents:
diff changeset
30 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
31 CFI_REL_OFFSET(%rdi, 0)
kono
parents:
diff changeset
32 push %r8
kono
parents:
diff changeset
33 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
34 CFI_REL_OFFSET(%r8, 0)
kono
parents:
diff changeset
35 push %r9
kono
parents:
diff changeset
36 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
37 CFI_REL_OFFSET(%r9, 0)
kono
parents:
diff changeset
38 push %r10
kono
parents:
diff changeset
39 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
40 CFI_REL_OFFSET(%r10, 0)
kono
parents:
diff changeset
41 push %r11
kono
parents:
diff changeset
42 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
43 CFI_REL_OFFSET(%r11, 0)
kono
parents:
diff changeset
44 # Align stack frame.
kono
parents:
diff changeset
45 push %rbx # non-scratch
kono
parents:
diff changeset
46 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
47 CFI_REL_OFFSET(%rbx, 0)
kono
parents:
diff changeset
48 mov %rsp, %rbx # save current rsp
kono
parents:
diff changeset
49 CFI_DEF_CFA_REGISTER(%rbx)
kono
parents:
diff changeset
50 shr $4, %rsp # clear 4 lsb, align to 16
kono
parents:
diff changeset
51 shl $4, %rsp
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 call ASM_TSAN_SYMBOL(__tsan_trace_switch)
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 # Unalign stack frame back.
kono
parents:
diff changeset
56 mov %rbx, %rsp # restore the original rsp
kono
parents:
diff changeset
57 CFI_DEF_CFA_REGISTER(%rsp)
kono
parents:
diff changeset
58 pop %rbx
kono
parents:
diff changeset
59 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
60 # Restore scratch registers.
kono
parents:
diff changeset
61 pop %r11
kono
parents:
diff changeset
62 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
63 pop %r10
kono
parents:
diff changeset
64 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
65 pop %r9
kono
parents:
diff changeset
66 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
67 pop %r8
kono
parents:
diff changeset
68 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
69 pop %rdi
kono
parents:
diff changeset
70 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
71 pop %rsi
kono
parents:
diff changeset
72 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
73 pop %rdx
kono
parents:
diff changeset
74 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
75 pop %rcx
kono
parents:
diff changeset
76 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
77 pop %rax
kono
parents:
diff changeset
78 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
79 CFI_RESTORE(%rax)
kono
parents:
diff changeset
80 CFI_RESTORE(%rbx)
kono
parents:
diff changeset
81 CFI_RESTORE(%rcx)
kono
parents:
diff changeset
82 CFI_RESTORE(%rdx)
kono
parents:
diff changeset
83 CFI_RESTORE(%rsi)
kono
parents:
diff changeset
84 CFI_RESTORE(%rdi)
kono
parents:
diff changeset
85 CFI_RESTORE(%r8)
kono
parents:
diff changeset
86 CFI_RESTORE(%r9)
kono
parents:
diff changeset
87 CFI_RESTORE(%r10)
kono
parents:
diff changeset
88 CFI_RESTORE(%r11)
kono
parents:
diff changeset
89 ret
kono
parents:
diff changeset
90 CFI_ENDPROC
kono
parents:
diff changeset
91
kono
parents:
diff changeset
92 ASM_HIDDEN(__tsan_report_race)
kono
parents:
diff changeset
93 .globl ASM_TSAN_SYMBOL(__tsan_report_race_thunk)
kono
parents:
diff changeset
94 ASM_TSAN_SYMBOL(__tsan_report_race_thunk):
kono
parents:
diff changeset
95 CFI_STARTPROC
kono
parents:
diff changeset
96 # Save scratch registers.
kono
parents:
diff changeset
97 push %rax
kono
parents:
diff changeset
98 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
99 CFI_REL_OFFSET(%rax, 0)
kono
parents:
diff changeset
100 push %rcx
kono
parents:
diff changeset
101 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
102 CFI_REL_OFFSET(%rcx, 0)
kono
parents:
diff changeset
103 push %rdx
kono
parents:
diff changeset
104 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
105 CFI_REL_OFFSET(%rdx, 0)
kono
parents:
diff changeset
106 push %rsi
kono
parents:
diff changeset
107 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
108 CFI_REL_OFFSET(%rsi, 0)
kono
parents:
diff changeset
109 push %rdi
kono
parents:
diff changeset
110 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
111 CFI_REL_OFFSET(%rdi, 0)
kono
parents:
diff changeset
112 push %r8
kono
parents:
diff changeset
113 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
114 CFI_REL_OFFSET(%r8, 0)
kono
parents:
diff changeset
115 push %r9
kono
parents:
diff changeset
116 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
117 CFI_REL_OFFSET(%r9, 0)
kono
parents:
diff changeset
118 push %r10
kono
parents:
diff changeset
119 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
120 CFI_REL_OFFSET(%r10, 0)
kono
parents:
diff changeset
121 push %r11
kono
parents:
diff changeset
122 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
123 CFI_REL_OFFSET(%r11, 0)
kono
parents:
diff changeset
124 # Align stack frame.
kono
parents:
diff changeset
125 push %rbx # non-scratch
kono
parents:
diff changeset
126 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
127 CFI_REL_OFFSET(%rbx, 0)
kono
parents:
diff changeset
128 mov %rsp, %rbx # save current rsp
kono
parents:
diff changeset
129 CFI_DEF_CFA_REGISTER(%rbx)
kono
parents:
diff changeset
130 shr $4, %rsp # clear 4 lsb, align to 16
kono
parents:
diff changeset
131 shl $4, %rsp
kono
parents:
diff changeset
132
kono
parents:
diff changeset
133 call ASM_TSAN_SYMBOL(__tsan_report_race)
kono
parents:
diff changeset
134
kono
parents:
diff changeset
135 # Unalign stack frame back.
kono
parents:
diff changeset
136 mov %rbx, %rsp # restore the original rsp
kono
parents:
diff changeset
137 CFI_DEF_CFA_REGISTER(%rsp)
kono
parents:
diff changeset
138 pop %rbx
kono
parents:
diff changeset
139 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
140 # Restore scratch registers.
kono
parents:
diff changeset
141 pop %r11
kono
parents:
diff changeset
142 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
143 pop %r10
kono
parents:
diff changeset
144 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
145 pop %r9
kono
parents:
diff changeset
146 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
147 pop %r8
kono
parents:
diff changeset
148 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
149 pop %rdi
kono
parents:
diff changeset
150 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
151 pop %rsi
kono
parents:
diff changeset
152 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
153 pop %rdx
kono
parents:
diff changeset
154 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
155 pop %rcx
kono
parents:
diff changeset
156 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
157 pop %rax
kono
parents:
diff changeset
158 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
159 CFI_RESTORE(%rax)
kono
parents:
diff changeset
160 CFI_RESTORE(%rbx)
kono
parents:
diff changeset
161 CFI_RESTORE(%rcx)
kono
parents:
diff changeset
162 CFI_RESTORE(%rdx)
kono
parents:
diff changeset
163 CFI_RESTORE(%rsi)
kono
parents:
diff changeset
164 CFI_RESTORE(%rdi)
kono
parents:
diff changeset
165 CFI_RESTORE(%r8)
kono
parents:
diff changeset
166 CFI_RESTORE(%r9)
kono
parents:
diff changeset
167 CFI_RESTORE(%r10)
kono
parents:
diff changeset
168 CFI_RESTORE(%r11)
kono
parents:
diff changeset
169 ret
kono
parents:
diff changeset
170 CFI_ENDPROC
kono
parents:
diff changeset
171
kono
parents:
diff changeset
172 ASM_HIDDEN(__tsan_setjmp)
kono
parents:
diff changeset
173 #if !defined(__APPLE__)
kono
parents:
diff changeset
174 .comm _ZN14__interception11real_setjmpE,8,8
kono
parents:
diff changeset
175 #endif
kono
parents:
diff changeset
176 .globl ASM_TSAN_SYMBOL_INTERCEPTOR(setjmp)
kono
parents:
diff changeset
177 ASM_TYPE_FUNCTION(ASM_TSAN_SYMBOL_INTERCEPTOR(setjmp))
kono
parents:
diff changeset
178 ASM_TSAN_SYMBOL_INTERCEPTOR(setjmp):
kono
parents:
diff changeset
179 CFI_STARTPROC
kono
parents:
diff changeset
180 // save env parameter
kono
parents:
diff changeset
181 push %rdi
kono
parents:
diff changeset
182 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
183 CFI_REL_OFFSET(%rdi, 0)
kono
parents:
diff changeset
184 // obtain %rsp
kono
parents:
diff changeset
185 #if defined(__FreeBSD__)
kono
parents:
diff changeset
186 lea 8(%rsp), %rdi
kono
parents:
diff changeset
187 mov %rdi, %rsi
kono
parents:
diff changeset
188 #elif defined(__APPLE__)
kono
parents:
diff changeset
189 lea 16(%rsp), %rdi
kono
parents:
diff changeset
190 mov %rdi, %rsi
kono
parents:
diff changeset
191 #elif defined(__linux__)
kono
parents:
diff changeset
192 lea 16(%rsp), %rdi
kono
parents:
diff changeset
193 mov %rdi, %rsi
kono
parents:
diff changeset
194 xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp)
kono
parents:
diff changeset
195 rol $0x11, %rsi
kono
parents:
diff changeset
196 #else
kono
parents:
diff changeset
197 # error "Unknown platform"
kono
parents:
diff changeset
198 #endif
kono
parents:
diff changeset
199 // call tsan interceptor
kono
parents:
diff changeset
200 call ASM_TSAN_SYMBOL(__tsan_setjmp)
kono
parents:
diff changeset
201 // restore env parameter
kono
parents:
diff changeset
202 pop %rdi
kono
parents:
diff changeset
203 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
204 CFI_RESTORE(%rdi)
kono
parents:
diff changeset
205 // tail jump to libc setjmp
kono
parents:
diff changeset
206 movl $0, %eax
kono
parents:
diff changeset
207 #if !defined(__APPLE__)
kono
parents:
diff changeset
208 movq _ZN14__interception11real_setjmpE@GOTPCREL(%rip), %rdx
kono
parents:
diff changeset
209 jmp *(%rdx)
kono
parents:
diff changeset
210 #else
kono
parents:
diff changeset
211 jmp ASM_TSAN_SYMBOL(setjmp)
kono
parents:
diff changeset
212 #endif
kono
parents:
diff changeset
213 CFI_ENDPROC
kono
parents:
diff changeset
214 ASM_SIZE(ASM_TSAN_SYMBOL_INTERCEPTOR(setjmp))
kono
parents:
diff changeset
215
kono
parents:
diff changeset
216 .comm _ZN14__interception12real__setjmpE,8,8
kono
parents:
diff changeset
217 .globl ASM_TSAN_SYMBOL_INTERCEPTOR(_setjmp)
kono
parents:
diff changeset
218 ASM_TYPE_FUNCTION(ASM_TSAN_SYMBOL_INTERCEPTOR(_setjmp))
kono
parents:
diff changeset
219 ASM_TSAN_SYMBOL_INTERCEPTOR(_setjmp):
kono
parents:
diff changeset
220 CFI_STARTPROC
kono
parents:
diff changeset
221 // save env parameter
kono
parents:
diff changeset
222 push %rdi
kono
parents:
diff changeset
223 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
224 CFI_REL_OFFSET(%rdi, 0)
kono
parents:
diff changeset
225 // obtain %rsp
kono
parents:
diff changeset
226 #if defined(__FreeBSD__)
kono
parents:
diff changeset
227 lea 8(%rsp), %rdi
kono
parents:
diff changeset
228 mov %rdi, %rsi
kono
parents:
diff changeset
229 #elif defined(__APPLE__)
kono
parents:
diff changeset
230 lea 16(%rsp), %rdi
kono
parents:
diff changeset
231 mov %rdi, %rsi
kono
parents:
diff changeset
232 #elif defined(__linux__)
kono
parents:
diff changeset
233 lea 16(%rsp), %rdi
kono
parents:
diff changeset
234 mov %rdi, %rsi
kono
parents:
diff changeset
235 xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp)
kono
parents:
diff changeset
236 rol $0x11, %rsi
kono
parents:
diff changeset
237 #else
kono
parents:
diff changeset
238 # error "Unknown platform"
kono
parents:
diff changeset
239 #endif
kono
parents:
diff changeset
240 // call tsan interceptor
kono
parents:
diff changeset
241 call ASM_TSAN_SYMBOL(__tsan_setjmp)
kono
parents:
diff changeset
242 // restore env parameter
kono
parents:
diff changeset
243 pop %rdi
kono
parents:
diff changeset
244 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
245 CFI_RESTORE(%rdi)
kono
parents:
diff changeset
246 // tail jump to libc setjmp
kono
parents:
diff changeset
247 movl $0, %eax
kono
parents:
diff changeset
248 #if !defined(__APPLE__)
kono
parents:
diff changeset
249 movq _ZN14__interception12real__setjmpE@GOTPCREL(%rip), %rdx
kono
parents:
diff changeset
250 jmp *(%rdx)
kono
parents:
diff changeset
251 #else
kono
parents:
diff changeset
252 jmp ASM_TSAN_SYMBOL(_setjmp)
kono
parents:
diff changeset
253 #endif
kono
parents:
diff changeset
254 CFI_ENDPROC
kono
parents:
diff changeset
255 ASM_SIZE(ASM_TSAN_SYMBOL_INTERCEPTOR(_setjmp))
kono
parents:
diff changeset
256
kono
parents:
diff changeset
257 .comm _ZN14__interception14real_sigsetjmpE,8,8
kono
parents:
diff changeset
258 .globl ASM_TSAN_SYMBOL_INTERCEPTOR(sigsetjmp)
kono
parents:
diff changeset
259 ASM_TYPE_FUNCTION(ASM_TSAN_SYMBOL_INTERCEPTOR(sigsetjmp))
kono
parents:
diff changeset
260 ASM_TSAN_SYMBOL_INTERCEPTOR(sigsetjmp):
kono
parents:
diff changeset
261 CFI_STARTPROC
kono
parents:
diff changeset
262 // save env parameter
kono
parents:
diff changeset
263 push %rdi
kono
parents:
diff changeset
264 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
265 CFI_REL_OFFSET(%rdi, 0)
kono
parents:
diff changeset
266 // save savesigs parameter
kono
parents:
diff changeset
267 push %rsi
kono
parents:
diff changeset
268 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
269 CFI_REL_OFFSET(%rsi, 0)
kono
parents:
diff changeset
270 // align stack frame
kono
parents:
diff changeset
271 sub $8, %rsp
kono
parents:
diff changeset
272 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
273 // obtain %rsp
kono
parents:
diff changeset
274 #if defined(__FreeBSD__)
kono
parents:
diff changeset
275 lea 24(%rsp), %rdi
kono
parents:
diff changeset
276 mov %rdi, %rsi
kono
parents:
diff changeset
277 #elif defined(__APPLE__)
kono
parents:
diff changeset
278 lea 32(%rsp), %rdi
kono
parents:
diff changeset
279 mov %rdi, %rsi
kono
parents:
diff changeset
280 #elif defined(__linux__)
kono
parents:
diff changeset
281 lea 32(%rsp), %rdi
kono
parents:
diff changeset
282 mov %rdi, %rsi
kono
parents:
diff changeset
283 xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp)
kono
parents:
diff changeset
284 rol $0x11, %rsi
kono
parents:
diff changeset
285 #else
kono
parents:
diff changeset
286 # error "Unknown platform"
kono
parents:
diff changeset
287 #endif
kono
parents:
diff changeset
288 // call tsan interceptor
kono
parents:
diff changeset
289 call ASM_TSAN_SYMBOL(__tsan_setjmp)
kono
parents:
diff changeset
290 // unalign stack frame
kono
parents:
diff changeset
291 add $8, %rsp
kono
parents:
diff changeset
292 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
293 // restore savesigs parameter
kono
parents:
diff changeset
294 pop %rsi
kono
parents:
diff changeset
295 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
296 CFI_RESTORE(%rsi)
kono
parents:
diff changeset
297 // restore env parameter
kono
parents:
diff changeset
298 pop %rdi
kono
parents:
diff changeset
299 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
300 CFI_RESTORE(%rdi)
kono
parents:
diff changeset
301 // tail jump to libc sigsetjmp
kono
parents:
diff changeset
302 movl $0, %eax
kono
parents:
diff changeset
303 #if !defined(__APPLE__)
kono
parents:
diff changeset
304 movq _ZN14__interception14real_sigsetjmpE@GOTPCREL(%rip), %rdx
kono
parents:
diff changeset
305 jmp *(%rdx)
kono
parents:
diff changeset
306 #else
kono
parents:
diff changeset
307 jmp ASM_TSAN_SYMBOL(sigsetjmp)
kono
parents:
diff changeset
308 #endif
kono
parents:
diff changeset
309 CFI_ENDPROC
kono
parents:
diff changeset
310 ASM_SIZE(ASM_TSAN_SYMBOL_INTERCEPTOR(sigsetjmp))
kono
parents:
diff changeset
311
kono
parents:
diff changeset
312 #if !defined(__APPLE__)
kono
parents:
diff changeset
313 .comm _ZN14__interception16real___sigsetjmpE,8,8
kono
parents:
diff changeset
314 .globl ASM_TSAN_SYMBOL_INTERCEPTOR(__sigsetjmp)
kono
parents:
diff changeset
315 ASM_TYPE_FUNCTION(ASM_TSAN_SYMBOL_INTERCEPTOR(__sigsetjmp))
kono
parents:
diff changeset
316 ASM_TSAN_SYMBOL_INTERCEPTOR(__sigsetjmp):
kono
parents:
diff changeset
317 CFI_STARTPROC
kono
parents:
diff changeset
318 // save env parameter
kono
parents:
diff changeset
319 push %rdi
kono
parents:
diff changeset
320 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
321 CFI_REL_OFFSET(%rdi, 0)
kono
parents:
diff changeset
322 // save savesigs parameter
kono
parents:
diff changeset
323 push %rsi
kono
parents:
diff changeset
324 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
325 CFI_REL_OFFSET(%rsi, 0)
kono
parents:
diff changeset
326 // align stack frame
kono
parents:
diff changeset
327 sub $8, %rsp
kono
parents:
diff changeset
328 CFI_ADJUST_CFA_OFFSET(8)
kono
parents:
diff changeset
329 // obtain %rsp
kono
parents:
diff changeset
330 #if defined(__FreeBSD__)
kono
parents:
diff changeset
331 lea 24(%rsp), %rdi
kono
parents:
diff changeset
332 mov %rdi, %rsi
kono
parents:
diff changeset
333 #else
kono
parents:
diff changeset
334 lea 32(%rsp), %rdi
kono
parents:
diff changeset
335 mov %rdi, %rsi
kono
parents:
diff changeset
336 xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp)
kono
parents:
diff changeset
337 rol $0x11, %rsi
kono
parents:
diff changeset
338 #endif
kono
parents:
diff changeset
339 // call tsan interceptor
kono
parents:
diff changeset
340 call ASM_TSAN_SYMBOL(__tsan_setjmp)
kono
parents:
diff changeset
341 // unalign stack frame
kono
parents:
diff changeset
342 add $8, %rsp
kono
parents:
diff changeset
343 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
344 // restore savesigs parameter
kono
parents:
diff changeset
345 pop %rsi
kono
parents:
diff changeset
346 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
347 CFI_RESTORE(%rsi)
kono
parents:
diff changeset
348 // restore env parameter
kono
parents:
diff changeset
349 pop %rdi
kono
parents:
diff changeset
350 CFI_ADJUST_CFA_OFFSET(-8)
kono
parents:
diff changeset
351 CFI_RESTORE(%rdi)
kono
parents:
diff changeset
352 // tail jump to libc sigsetjmp
kono
parents:
diff changeset
353 movl $0, %eax
kono
parents:
diff changeset
354 movq _ZN14__interception16real___sigsetjmpE@GOTPCREL(%rip), %rdx
kono
parents:
diff changeset
355 jmp *(%rdx)
kono
parents:
diff changeset
356 CFI_ENDPROC
kono
parents:
diff changeset
357 ASM_SIZE(ASM_TSAN_SYMBOL_INTERCEPTOR(__sigsetjmp))
kono
parents:
diff changeset
358 #endif // !defined(__APPLE__)
kono
parents:
diff changeset
359
kono
parents:
diff changeset
360 #if defined(__FreeBSD__) || defined(__linux__)
kono
parents:
diff changeset
361 /* We do not need executable stack. */
kono
parents:
diff changeset
362 .section .note.GNU-stack,"",@progbits
kono
parents:
diff changeset
363 #endif
kono
parents:
diff changeset
364
kono
parents:
diff changeset
365 #endif