This is an archive of the discontinued LLVM Phabricator instance.

[tsan] Fix pthread_once() on Mac OS X
ClosedPublic

Authored by melver on Aug 18 2021, 8:14 AM.

Details

Summary

Change 636428c727cd enabled BlockingRegion hooks for pthread_once().
Unfortunately this seems to cause crashes on Mac OS X which uses
pthread_once() from locations that seem to result in crashes:

ThreadSanitizer:DEADLYSIGNAL
==31465==ERROR: ThreadSanitizer: stack-overflow on address 0x7ffee73fffd8 (pc 0x00010807fd2a bp 0x7ffee7400050 sp 0x7ffee73fffb0 T93815)
#0 tsan::MetaMap::GetSync(tsan::ThreadState*, unsigned long, unsigned long, bool, bool) tsan_sync.cpp:195 (libclang_rt.tsan_osx_dynamic.dylib:x86_64+0x78d2a)
#1 tsan::MutexPreLock(tsan::ThreadState*, unsigned long, unsigned long, unsigned int) tsan_rtl_mutex.cpp:143 (libclang_rt.tsan_osx_dynamic.dylib:x86_64+0x6cefc)
#2 wrap_pthread_mutex_lock sanitizer_common_interceptors.inc:4240 (libclang_rt.tsan_osx_dynamic.dylib:x86_64+0x3dae0)
#3 flockfile <null>:2 (libsystem_c.dylib:x86_64+0x38a69)
#4 puts <null>:2 (libsystem_c.dylib:x86_64+0x3f69b)
#5 wrap_puts sanitizer_common_interceptors.inc (libclang_rt.tsan_osx_dynamic.dylib:x86_64+0x34d83)
#6 __tsan::OnPotentiallyBlockingRegionBegin() cxa_guard_acquire.cpp:8 (foo:x86_64+0x100000e48)
#7 wrap_pthread_once tsan_interceptors_posix.cpp:1512 (libclang_rt.tsan_osx_dynamic.dylib:x86_64+0x2f6e6)

From the stack trace it can be seen that the caller is unknown, and the
resulting stack-overflow seems to indicate that whoever the caller is
does not have enough stack space or otherwise is running in a limited
environment not yet ready for full instrumentation.

Fix it by reverting behaviour on Mac OS X to not call BlockingRegion
hooks from pthread_once().

Reported-by: azharudd

Diff Detail

Event Timeline

melver created this revision.Aug 18 2021, 8:14 AM
melver requested review of this revision.Aug 18 2021, 8:14 AM
Herald added a project: Restricted Project. · View Herald TranscriptAug 18 2021, 8:14 AM
Herald added a subscriber: Restricted Project. · View Herald Transcript
glider accepted this revision.Aug 19 2021, 3:39 AM

LGTM, thanks!

This revision is now accepted and ready to land.Aug 19 2021, 3:39 AM
This revision was automatically updated to reflect the committed changes.