From b848f57a213265e8d2de8909a950cc21eb165197 Mon Sep 17 00:00:00 2001 From: Heejin Ahn Date: Tue, 22 Aug 2023 17:23:02 -0700 Subject: [PATCH] Add downstream compiler-rt changes from emscripten --- compiler-rt/lib/asan/asan_flags.cpp | 16 ++++++---------- compiler-rt/lib/asan/asan_thread.cpp | 6 ++++++ compiler-rt/lib/lsan/lsan.cpp | 10 +++------- compiler-rt/lib/lsan/lsan_common.cpp | 4 +++- compiler-rt/lib/lsan/lsan_thread.cpp | 6 ++++++ .../sanitizer_symbolizer_report.cpp | 14 +++++--------- .../sanitizer_common/sanitizer_thread_registry.h | 2 ++ compiler-rt/lib/ubsan/ubsan_flags.cpp | 10 +++------- 8 files changed, 34 insertions(+), 34 deletions(-) diff --git a/compiler-rt/lib/asan/asan_flags.cpp b/compiler-rt/lib/asan/asan_flags.cpp index 6bad4c5763dbb..5c743500733ef 100644 --- a/compiler-rt/lib/asan/asan_flags.cpp +++ b/compiler-rt/lib/asan/asan_flags.cpp @@ -23,8 +23,8 @@ #include "ubsan/ubsan_platform.h" #if SANITIZER_EMSCRIPTEN -extern "C" void emscripten_builtin_free(void *); -#include +#include +#include "emscripten_internal.h" #endif @@ -130,20 +130,16 @@ void InitializeFlags() { // Override from Emscripten Module. // TODO: add EM_ASM_I64 and avoid using a double for a 64-bit pointer. #define MAKE_OPTION_LOAD(parser, name) \ - options = (char*)(long)EM_ASM_DOUBLE({ \ - return withBuiltinMalloc(function () { \ - return stringToNewUTF8(Module[name] || ""); \ - }); \ - }); \ + options = _emscripten_sanitizer_get_option(name); \ parser.ParseString(options); \ emscripten_builtin_free(options); - MAKE_OPTION_LOAD(asan_parser, 'ASAN_OPTIONS'); + MAKE_OPTION_LOAD(asan_parser, "ASAN_OPTIONS"); #if CAN_SANITIZE_LEAKS - MAKE_OPTION_LOAD(lsan_parser, 'LSAN_OPTIONS'); + MAKE_OPTION_LOAD(lsan_parser, "LSAN_OPTIONS"); #endif #if CAN_SANITIZE_UB - MAKE_OPTION_LOAD(ubsan_parser, 'UBSAN_OPTIONS'); + MAKE_OPTION_LOAD(ubsan_parser, "UBSAN_OPTIONS"); #endif #else // Override from command line. diff --git a/compiler-rt/lib/asan/asan_thread.cpp b/compiler-rt/lib/asan/asan_thread.cpp index fc8c0f5782d44..c991c085a3fd9 100644 --- a/compiler-rt/lib/asan/asan_thread.cpp +++ b/compiler-rt/lib/asan/asan_thread.cpp @@ -583,6 +583,12 @@ void FinishThreadLocked(u32 tid) { } // namespace __lsan +namespace __sanitizer { +ThreadRegistry *GetThreadRegistryLocked() { + return __lsan::GetAsanThreadRegistryLocked(); +} +} // namespace __sanitizer + // ---------------------- Interface ---------------- {{{1 using namespace __asan; diff --git a/compiler-rt/lib/lsan/lsan.cpp b/compiler-rt/lib/lsan/lsan.cpp index 6f7576fcc7d25..8ec353d071382 100644 --- a/compiler-rt/lib/lsan/lsan.cpp +++ b/compiler-rt/lib/lsan/lsan.cpp @@ -21,8 +21,8 @@ #include "sanitizer_common/sanitizer_interface_internal.h" #if SANITIZER_EMSCRIPTEN -extern "C" void emscripten_builtin_free(void *); -#include +#include "emscripten_internal.h" +#include #endif bool lsan_inited; @@ -82,11 +82,7 @@ static void InitializeFlags() { const char *lsan_default_options = __lsan_default_options(); parser.ParseString(lsan_default_options); #if SANITIZER_EMSCRIPTEN - char *options = (char*) EM_ASM_PTR({ - return withBuiltinMalloc(function () { - return stringToNewUTF8(Module['LSAN_OPTIONS'] || ""); - }); - }); + char *options = _emscripten_sanitizer_get_option("LSAN_OPTIONS"); parser.ParseString(options); emscripten_builtin_free(options); #else diff --git a/compiler-rt/lib/lsan/lsan_common.cpp b/compiler-rt/lib/lsan/lsan_common.cpp index 4986e50ee4fe2..8d6f3b9f73a4b 100644 --- a/compiler-rt/lib/lsan/lsan_common.cpp +++ b/compiler-rt/lib/lsan/lsan_common.cpp @@ -405,7 +405,9 @@ extern "C" SANITIZER_WEAK_ATTRIBUTE void __libc_iterate_dynamic_tls( pid_t, void (*cb)(void *, void *, uptr, void *), void *); # endif -#if !SANITIZER_EMSCRIPTEN +#if SANITIZER_EMSCRIPTEN +void ProcessThreads(SuspendedThreadsList const &, Frontier *, tid_t, uptr); +#else static void ProcessThreadRegistry(Frontier *frontier) { InternalMmapVector ptrs; GetAdditionalThreadContextPtrsLocked(&ptrs); diff --git a/compiler-rt/lib/lsan/lsan_thread.cpp b/compiler-rt/lib/lsan/lsan_thread.cpp index 137c7e4e4f12c..2b694ba5e4071 100644 --- a/compiler-rt/lib/lsan/lsan_thread.cpp +++ b/compiler-rt/lib/lsan/lsan_thread.cpp @@ -100,3 +100,9 @@ void GetRunningThreadsLocked(InternalMmapVector *threads) { } } // namespace __lsan + +namespace __sanitizer { +ThreadRegistry *GetThreadRegistryLocked() { + return __lsan::GetLsanThreadRegistryLocked(); +} +} // namespace __sanitizer diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp index eab54d37e9410..f23fd0ada8b25 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp @@ -25,6 +25,10 @@ # include #endif +#if SANITIZER_EMSCRIPTEN +#include "emscripten_internal.h" +#endif + namespace __sanitizer { #if !SANITIZER_GO @@ -41,17 +45,9 @@ void ReportErrorSummary(const char *error_type, const AddressInfo &info, #endif #if SANITIZER_EMSCRIPTEN -#include static inline bool ReportSupportsColors() { - return !!EM_ASM_INT({ - var setting = Module['printWithColors']; - if (setting != null) { - return setting; - } else { - return ENVIRONMENT_IS_NODE && process.stderr.isTTY; - } - }); + return _emscripten_sanitizer_use_colors(); } #elif !SANITIZER_FUCHSIA diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_thread_registry.h b/compiler-rt/lib/sanitizer_common/sanitizer_thread_registry.h index 2c7e5c276fa1c..fe1ce8bc6cb11 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_thread_registry.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_thread_registry.h @@ -163,6 +163,8 @@ class SANITIZER_MUTEX ThreadRegistry { typedef GenericScopedLock ThreadRegistryLock; +ThreadRegistry *GetThreadRegistryLocked(); + } // namespace __sanitizer #endif // SANITIZER_THREAD_REGISTRY_H diff --git a/compiler-rt/lib/ubsan/ubsan_flags.cpp b/compiler-rt/lib/ubsan/ubsan_flags.cpp index e18213cb769f4..407a9e48c96af 100644 --- a/compiler-rt/lib/ubsan/ubsan_flags.cpp +++ b/compiler-rt/lib/ubsan/ubsan_flags.cpp @@ -20,8 +20,8 @@ #include #if SANITIZER_EMSCRIPTEN -extern "C" void emscripten_builtin_free(void *); -#include +#include +#include "emscripten_internal.h" #endif namespace __ubsan { @@ -77,11 +77,7 @@ void InitializeFlags() { parser.ParseString(__ubsan_default_options()); // Override from environment variable. #if SANITIZER_EMSCRIPTEN - char *options = (char*) EM_ASM_PTR({ - return withBuiltinMalloc(function () { - return stringToNewUTF8(Module['UBSAN_OPTIONS'] || ""); - }); - }); + char* options = _emscripten_sanitizer_get_option("UBSAN_OPTIONS"); parser.ParseString(options); emscripten_builtin_free(options); #else