Index: compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp =================================================================== --- compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp +++ compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp @@ -15,6 +15,7 @@ #if SANITIZER_POSIX +#include "sanitizer_atomic.h" #include "sanitizer_common.h" #include "sanitizer_flags.h" #include "sanitizer_platform_limits_netbsd.h" @@ -166,9 +167,14 @@ #if !SANITIZER_GO // TODO(glider): different tools may require different altstack size. static uptr GetAltStackSize() { - // SIGSTKSZ is not enough. - static const uptr kAltStackSize = SIGSTKSZ * 4; - return kAltStackSize; + static atomic_uintptr_t kAltStackSize{0}; + uptr ret = atomic_load(&kAltStackSize, memory_order_relaxed); + if (ret == 0) { + // SIGSTKSZ is not enough. + ret = SIGSTKSZ * 4; + atomic_store(&kAltStackSize, ret, memory_order_relaxed); + } + return ret; } void SetAlternateSignalStack() {