From: Peter Collingbourne Date: Sat, 18 Mar 2023 03:48:21 +0000 (-0700) Subject: sanitizer_common: Use plain thread_local for __sancov_lowest_stack definition. X-Git-Tag: upstream/17.0.6~14206 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=402dd79a293dc23f0ccf521d79386880e4969584;p=platform%2Fupstream%2Fllvm.git sanitizer_common: Use plain thread_local for __sancov_lowest_stack definition. We can't use initial-exec for the definition of __sancov_lowest_stack because it gets linked into shared libraries such as the UBSan and HWASan runtimes on Android. I think we can expect plain thread_local to work unconditionally in sanitizer_common as several other sanitizers are already using it, so drop the platform-dependent macro and just use thread_local in the definition. Differential Revision: https://reviews.llvm.org/D146351 --- diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cpp index 956b48e..f2dd6b2 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cpp @@ -282,7 +282,11 @@ SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_pcs_init, const uptr* beg, // Weak definition for code instrumented with -fsanitize-coverage=stack-depth // and later linked with code containing a strong definition. // E.g., -fsanitize=fuzzer-no-link +// FIXME: Update Apple deployment target so that thread_local is always +// supported, and remove the #if. +#if !SANITIZER_APPLE SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE -SANITIZER_TLS_INITIAL_EXEC_ATTRIBUTE uptr __sancov_lowest_stack; +thread_local uptr __sancov_lowest_stack; +#endif #endif // !SANITIZER_FUCHSIA diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h b/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h index 6b80082..98186c4 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h @@ -37,15 +37,6 @@ # define SANITIZER_WEAK_ATTRIBUTE __attribute__((weak)) #endif -// TLS is handled differently on different platforms -#if SANITIZER_LINUX || SANITIZER_NETBSD || \ - SANITIZER_FREEBSD -# define SANITIZER_TLS_INITIAL_EXEC_ATTRIBUTE \ - __attribute__((tls_model("initial-exec"))) thread_local -#else -# define SANITIZER_TLS_INITIAL_EXEC_ATTRIBUTE -#endif - //--------------------------- WEAK FUNCTIONS ---------------------------------// // When working with weak functions, to simplify the code and make it more // portable, when possible define a default implementation using this macro: