[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