[compiler-rt] ccc83ac - tsan: print a meaningful frame for stack races

Dmitry Vyukov via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 28 08:08:04 PDT 2021


Author: Dmitry Vyukov
Date: 2021-09-28T17:08:00+02:00
New Revision: ccc83ac7c501c8e117753af0729414350aa9c117

URL: https://github.com/llvm/llvm-project/commit/ccc83ac7c501c8e117753af0729414350aa9c117
DIFF: https://github.com/llvm/llvm-project/commit/ccc83ac7c501c8e117753af0729414350aa9c117.diff

LOG: tsan: print a meaningful frame for stack races

Depends on D110631.

Differential Revision: https://reviews.llvm.org/D110632

Added: 
    

Modified: 
    compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cpp b/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cpp
index 67b12c804fb2..61133a4a3e7e 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cpp
+++ b/compiler-rt/lib/tsan/rtl/tsan_rtl_thread.cpp
@@ -138,6 +138,8 @@ void ThreadContext::OnCreated(void *arg) {
   creation_stack_id = CurrentStackId(args->thr, args->pc);
 }
 
+extern "C" void __tsan_stack_initialization() {}
+
 struct OnStartedArgs {
   ThreadState *thr;
   uptr stk_addr;
@@ -173,9 +175,15 @@ void ThreadStart(ThreadState *thr, Tid tid, tid_t os_id,
 #endif
 
 #if !SANITIZER_GO
+  // Don't imitate stack/TLS writes for the main thread,
+  // because its initialization is synchronized with all
+  // subsequent threads anyway.
   if (tid != kMainTid) {
-    if (stk_addr && stk_size)
-      MemoryRangeImitateWrite(thr, /*pc=*/1, stk_addr, stk_size);
+    if (stk_addr && stk_size) {
+      const uptr pc = StackTrace::GetNextInstructionPc(
+          reinterpret_cast<uptr>(__tsan_stack_initialization));
+      MemoryRangeImitateWrite(thr, pc, stk_addr, stk_size);
+    }
 
     if (tls_addr && tls_size)
       ImitateTlsWrite(thr, tls_addr, tls_size);


        


More information about the llvm-commits mailing list