Skip to content

Commit 6bb13da

Browse files
committedJul 5, 2019
[TSan] Improve handling of stack pointer mangling in {set,long}jmp, pt.4
For x86_64, since we don't clobber %rsi (2nd argument) anymore, we don't have to save/restore it. Reviewed By: dvyukov Differential Revision: https://reviews.llvm.org/D63946 llvm-svn: 365229
1 parent bb65a38 commit 6bb13da

File tree

1 file changed

+4
-32
lines changed

1 file changed

+4
-32
lines changed
 

‎compiler-rt/lib/tsan/rtl/tsan_rtl_amd64.S

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -271,30 +271,16 @@ ASM_SYMBOL_INTERCEPTOR(sigsetjmp):
271271
push %rdi
272272
CFI_ADJUST_CFA_OFFSET(8)
273273
CFI_REL_OFFSET(%rdi, 0)
274-
// save savesigs parameter
275-
push %rsi
276-
CFI_ADJUST_CFA_OFFSET(8)
277-
CFI_REL_OFFSET(%rsi, 0)
278-
// align stack frame
279-
sub $8, %rsp
280-
CFI_ADJUST_CFA_OFFSET(8)
281274
// obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
282275
#if defined(__FreeBSD__) || defined(__NetBSD__)
283-
lea 24(%rsp), %rdi
276+
lea 8(%rsp), %rdi
284277
#elif defined(__linux__) || defined(__APPLE__)
285-
lea 32(%rsp), %rdi
278+
lea 16(%rsp), %rdi
286279
#else
287280
# error "Unknown platform"
288281
#endif
289282
// call tsan interceptor
290283
call ASM_SYMBOL(__tsan_setjmp)
291-
// unalign stack frame
292-
add $8, %rsp
293-
CFI_ADJUST_CFA_OFFSET(-8)
294-
// restore savesigs parameter
295-
pop %rsi
296-
CFI_ADJUST_CFA_OFFSET(-8)
297-
CFI_RESTORE(%rsi)
298284
// restore env parameter
299285
pop %rdi
300286
CFI_ADJUST_CFA_OFFSET(-8)
@@ -327,28 +313,14 @@ ASM_SYMBOL_INTERCEPTOR(__sigsetjmp):
327313
push %rdi
328314
CFI_ADJUST_CFA_OFFSET(8)
329315
CFI_REL_OFFSET(%rdi, 0)
330-
// save savesigs parameter
331-
push %rsi
332-
CFI_ADJUST_CFA_OFFSET(8)
333-
CFI_REL_OFFSET(%rsi, 0)
334-
// align stack frame
335-
sub $8, %rsp
336-
CFI_ADJUST_CFA_OFFSET(8)
337316
// obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
338317
#if defined(__FreeBSD__)
339-
lea 24(%rsp), %rdi
318+
lea 8(%rsp), %rdi
340319
#else
341-
lea 32(%rsp), %rdi
320+
lea 16(%rsp), %rdi
342321
#endif
343322
// call tsan interceptor
344323
call ASM_SYMBOL(__tsan_setjmp)
345-
// unalign stack frame
346-
add $8, %rsp
347-
CFI_ADJUST_CFA_OFFSET(-8)
348-
// restore savesigs parameter
349-
pop %rsi
350-
CFI_ADJUST_CFA_OFFSET(-8)
351-
CFI_RESTORE(%rsi)
352324
// restore env parameter
353325
pop %rdi
354326
CFI_ADJUST_CFA_OFFSET(-8)

0 commit comments

Comments
 (0)
Please sign in to comment.