aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2024-06-25 09:58:32 -0700
committerGitHub <noreply@github.com>2024-06-25 09:58:32 -0700
commit0b049ce64653a8cbdeedaa2bfe6cc79fc6af5d40 (patch)
tree20f45f95f302be778d1394407e9798f8536006ba
parent5e2beed9a1643cd6358fb8b43feb893543d90bf3 (diff)
downloadllvm-0b049ce64653a8cbdeedaa2bfe6cc79fc6af5d40.zip
llvm-0b049ce64653a8cbdeedaa2bfe6cc79fc6af5d40.tar.gz
llvm-0b049ce64653a8cbdeedaa2bfe6cc79fc6af5d40.tar.bz2
[tsan] Test `__tsan_test_only_on_fork` only on Mac (#96597)
According to https://reviews.llvm.org/D114250 this was to handle Mac specific issue, however the test is Linux only. The test effectively prevents to lock main allocator on fork, but we do that on Linux for other sanitizers for years, and need to do the same for TSAN to avoid deadlocks.
-rw-r--r--compiler-rt/lib/tsan/rtl/tsan_rtl.cpp4
-rw-r--r--compiler-rt/test/tsan/Darwin/fork_deadlock.cpp (renamed from compiler-rt/test/tsan/Linux/fork_deadlock.cpp)0
2 files changed, 4 insertions, 0 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp b/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp
index fd9441d..2d5992b 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp
+++ b/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp
@@ -35,8 +35,10 @@ extern "C" void __tsan_resume() {
__tsan_resumed = 1;
}
+#if SANITIZER_APPLE
SANITIZER_WEAK_DEFAULT_IMPL
void __tsan_test_only_on_fork() {}
+#endif
namespace __tsan {
@@ -828,7 +830,9 @@ void ForkBefore(ThreadState* thr, uptr pc) SANITIZER_NO_THREAD_SAFETY_ANALYSIS {
// Disables memory write in OnUserAlloc/Free.
thr->ignore_reads_and_writes++;
+# if SANITIZER_APPLE
__tsan_test_only_on_fork();
+# endif
}
static void ForkAfter(ThreadState* thr) SANITIZER_NO_THREAD_SAFETY_ANALYSIS {
diff --git a/compiler-rt/test/tsan/Linux/fork_deadlock.cpp b/compiler-rt/test/tsan/Darwin/fork_deadlock.cpp
index 9525070..9525070 100644
--- a/compiler-rt/test/tsan/Linux/fork_deadlock.cpp
+++ b/compiler-rt/test/tsan/Darwin/fork_deadlock.cpp