diff options
author | Vitaly Buka <vitalybuka@google.com> | 2024-06-25 09:58:32 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-25 09:58:32 -0700 |
commit | 0b049ce64653a8cbdeedaa2bfe6cc79fc6af5d40 (patch) | |
tree | 20f45f95f302be778d1394407e9798f8536006ba | |
parent | 5e2beed9a1643cd6358fb8b43feb893543d90bf3 (diff) | |
download | llvm-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.cpp | 4 | ||||
-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 |