[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