[llvm-commits] [compiler-rt] r163090 - in /compiler-rt/trunk/lib/tsan/rtl: tsan_rtl.h tsan_rtl_amd64.S
Dmitry Vyukov
dvyukov at google.com
Sun Sep 2 04:24:07 PDT 2012
Author: dvyukov
Date: Sun Sep 2 06:24:07 2012
New Revision: 163090
URL: http://llvm.org/viewvc/llvm-project?rev=163090&view=rev
Log:
tsan: insert cfi directives into assembly (not fully working for now, though)
Modified:
compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h
compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_amd64.S
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h?rev=163090&r1=163089&r2=163090&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.h Sun Sep 2 06:24:07 2012
@@ -510,9 +510,12 @@
// The caller may not create the stack frame for itself at all,
// so we create a reserve stack frame for it (1024b must be enough).
#define HACKY_CALL(f) \
- __asm__ __volatile__("sub $0x400, %%rsp;" \
+ __asm__ __volatile__("sub $1024, %%rsp;" \
+ "/*.cfi_adjust_cfa_offset 1024;*/" \
"call " #f "_thunk;" \
- "add $0x400, %%rsp;" ::: "memory");
+ "add $1024, %%rsp;" \
+ "/*.cfi_adjust_cfa_offset -1024;*/" \
+ ::: "memory", "cc");
#else
#define HACKY_CALL(f) f()
#endif
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_amd64.S
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_amd64.S?rev=163090&r1=163089&r2=163090&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_amd64.S (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_amd64.S Sun Sep 2 06:24:07 2012
@@ -2,19 +2,41 @@
.globl __tsan_trace_switch_thunk
__tsan_trace_switch_thunk:
+ .cfi_startproc
# Save scratch registers.
push %rax
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %rax, 0
push %rcx
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %rcx, 0
push %rdx
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %rdx, 0
push %rsi
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %rsi, 0
push %rdi
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %rdi, 0
push %r8
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %r8, 0
push %r9
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %r9, 0
push %r10
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %r10, 0
push %r11
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %r11, 0
# Align stack frame.
push %rbx # non-scratch
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %rbx, 0
mov %rsp, %rbx # save current rsp
+ .cfi_def_cfa_register %rbx
shr $4, %rsp # clear 4 lsb, align to 16
shl $4, %rsp
@@ -22,34 +44,78 @@
# Unalign stack frame back.
mov %rbx, %rsp # restore the original rsp
+ .cfi_def_cfa_register %rsp
pop %rbx
+ .cfi_adjust_cfa_offset -8
# Restore scratch registers.
pop %r11
+ .cfi_adjust_cfa_offset -8
pop %r10
+ .cfi_adjust_cfa_offset -8
pop %r9
+ .cfi_adjust_cfa_offset -8
pop %r8
+ .cfi_adjust_cfa_offset -8
pop %rdi
+ .cfi_adjust_cfa_offset -8
pop %rsi
+ .cfi_adjust_cfa_offset -8
pop %rdx
+ .cfi_adjust_cfa_offset -8
pop %rcx
+ .cfi_adjust_cfa_offset -8
pop %rax
+ .cfi_adjust_cfa_offset -8
+ .cfi_restore %rax
+ .cfi_restore %rbx
+ .cfi_restore %rcx
+ .cfi_restore %rdx
+ .cfi_restore %rsi
+ .cfi_restore %rdi
+ .cfi_restore %r8
+ .cfi_restore %r9
+ .cfi_restore %r10
+ .cfi_restore %r11
ret
+ .cfi_endproc
.globl __tsan_report_race_thunk
__tsan_report_race_thunk:
+ .cfi_startproc
# Save scratch registers.
push %rax
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %rax, 0
push %rcx
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %rcx, 0
push %rdx
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %rdx, 0
push %rsi
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %rsi, 0
push %rdi
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %rdi, 0
push %r8
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %r8, 0
push %r9
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %r9, 0
push %r10
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %r10, 0
push %r11
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %r11, 0
# Align stack frame.
push %rbx # non-scratch
+ .cfi_adjust_cfa_offset 8
+ .cfi_rel_offset %rbx, 0
mov %rsp, %rbx # save current rsp
+ .cfi_def_cfa_register %rbx
shr $4, %rsp # clear 4 lsb, align to 16
shl $4, %rsp
@@ -57,18 +123,40 @@
# Unalign stack frame back.
mov %rbx, %rsp # restore the original rsp
+ .cfi_def_cfa_register %rsp
pop %rbx
+ .cfi_adjust_cfa_offset -8
# Restore scratch registers.
pop %r11
+ .cfi_adjust_cfa_offset -8
pop %r10
+ .cfi_adjust_cfa_offset -8
pop %r9
+ .cfi_adjust_cfa_offset -8
pop %r8
+ .cfi_adjust_cfa_offset -8
pop %rdi
+ .cfi_adjust_cfa_offset -8
pop %rsi
+ .cfi_adjust_cfa_offset -8
pop %rdx
+ .cfi_adjust_cfa_offset -8
pop %rcx
+ .cfi_adjust_cfa_offset -8
pop %rax
+ .cfi_adjust_cfa_offset -8
+ .cfi_restore %rax
+ .cfi_restore %rbx
+ .cfi_restore %rcx
+ .cfi_restore %rdx
+ .cfi_restore %rsi
+ .cfi_restore %rdi
+ .cfi_restore %r8
+ .cfi_restore %r9
+ .cfi_restore %r10
+ .cfi_restore %r11
ret
+ .cfi_endproc
#ifdef __linux__
/* We do not need executable stack. */
More information about the llvm-commits
mailing list