[llvm-branch-commits] [compiler-rt] bce25ef - Patches from emscripten 3.1.11
Sam Clegg via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Sep 6 02:21:53 PDT 2022
Author: Sam Clegg
Date: 2022-05-22T19:15:19-07:00
New Revision: bce25ef66596b013cd61c322c0098f89e43e92f6
URL: https://github.com/llvm/llvm-project/commit/bce25ef66596b013cd61c322c0098f89e43e92f6
DIFF: https://github.com/llvm/llvm-project/commit/bce25ef66596b013cd61c322c0098f89e43e92f6.diff
LOG: Patches from emscripten 3.1.11
Added:
Modified:
compiler-rt/lib/lsan/lsan_common.cpp
compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h
compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp
libcxx/include/__config
Removed:
################################################################################
diff --git a/compiler-rt/lib/lsan/lsan_common.cpp b/compiler-rt/lib/lsan/lsan_common.cpp
index b52106537a677..1a7a3d4203d4e 100644
--- a/compiler-rt/lib/lsan/lsan_common.cpp
+++ b/compiler-rt/lib/lsan/lsan_common.cpp
@@ -185,6 +185,14 @@ static uptr GetCallerPC(const StackTrace &stack) {
// valid before reporting chunks as leaked.
bool LeakSuppressionContext::SuppressInvalid(const StackTrace &stack) {
uptr caller_pc = GetCallerPC(stack);
+#if SANITIZER_EMSCRIPTEN
+ // caller_pr will always be 0 if we use malloc_context_size=0 (or 1) which
+ // we recommend under emscripten to save memory. It seems that this setting
+ // now (inadvertently?) suppreses all leaks.
+ // See https://reviews.llvm.org/D115319#3526676.
+ if (!caller_pc)
+ return false;
+#endif
// If caller_pc is unknown, this chunk may be allocated in a coroutine. Mark
// it as reachable, as we can't properly report its allocation stack anyway.
return !caller_pc ||
@@ -313,7 +321,7 @@ void ScanRangeForPointers(uptr begin, uptr end, Frontier *frontier,
#if SANITIZER_EMSCRIPTEN && !defined(__EMSCRIPTEN_PTHREADS__)
if (cache_begin <= pp && pp < cache_end) {
LOG_POINTERS("%p: skipping because it overlaps the cache %p-%p.\n",
- pp, cache_begin, cache_end);
+ (void*)pp, (void*)cache_begin, (void*)cache_end);
continue;
}
#endif
@@ -804,53 +812,6 @@ static int DoRecoverableLeakCheck() {
void DoRecoverableLeakCheckVoid() { DoRecoverableLeakCheck(); }
-<<<<<<< HEAD
-=======
-Suppression *LeakSuppressionContext::GetSuppressionForAddr(uptr addr) {
- Suppression *s = nullptr;
-
- // Suppress by module name.
- if (const char *module_name =
- Symbolizer::GetOrInit()->GetModuleNameForPc(addr))
- if (context.Match(module_name, kSuppressionLeak, &s))
- return s;
-
- // Suppress by file or function name.
- SymbolizedStack *frames = Symbolizer::GetOrInit()->SymbolizePC(addr);
- for (SymbolizedStack *cur = frames; cur; cur = cur->next) {
- if (context.Match(cur->info.function, kSuppressionLeak, &s) ||
- context.Match(cur->info.file, kSuppressionLeak, &s)) {
- break;
- }
- }
- frames->ClearAll();
- return s;
-}
-
-Suppression *LeakSuppressionContext::GetSuppressionForStack(
- u32 stack_trace_id) {
- LazyInit();
- StackTrace stack = StackDepotGet(stack_trace_id);
- for (uptr i = 0; i < stack.size; i++) {
-#if SANITIZER_EMSCRIPTEN
- // On Emscripten, the stack trace is the actual call site, not
- // the code that would be executed after the return.
- // Therefore, StackTrace::GetPreviousInstructionPc is not needed.
- Suppression *s = GetSuppressionForAddr(stack.trace[i]);
-#else
- Suppression *s = GetSuppressionForAddr(
- StackTrace::GetPreviousInstructionPc(stack.trace[i]));
-#endif
- if (s) {
- suppressed_stacks_sorted = false;
- suppressed_stacks.push_back(stack_trace_id);
- return s;
- }
- }
- return nullptr;
-}
-
->>>>>>> 2bbe2c4b7413 (Rebase of changed from emscripten-libs-12.0.0 onto llvmorg-13.0.0)
///// LeakReport implementation. /////
// A hard limit on the number of distinct leaks, to avoid quadratic complexity
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h b/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h
index 7fa8008589b63..fee66660ba277 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h
@@ -139,7 +139,7 @@ namespace __sanitizer {
typedef unsigned long long uptr;
typedef signed long long sptr;
#else
-# if (SANITIZER_WORDSIZE == 64) || SANITIZER_MAC || SANITIZER_WINDOWS
+# if (SANITIZER_WORDSIZE == 64) || SANITIZER_MAC || SANITIZER_WINDOWS || SANITIZER_EMSCRIPTEN
typedef unsigned long uptr;
typedef signed long sptr;
# else
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp
index 4269fed630051..32b96dbdf96f7 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_posix.cpp
@@ -145,11 +145,19 @@ void *MmapFixedOrDieOnFatalError(uptr fixed_addr, uptr size, const char *name) {
}
bool MprotectNoAccess(uptr addr, uptr size) {
+#if SANITIZER_EMSCRIPTEN
+ return true;
+#else
return 0 == internal_mprotect((void*)addr, size, PROT_NONE);
+#endif
}
bool MprotectReadOnly(uptr addr, uptr size) {
+#if SANITIZER_EMSCRIPTEN
+ return true;
+#else
return 0 == internal_mprotect((void *)addr, size, PROT_READ);
+#endif
}
#if !SANITIZER_MAC
diff --git a/libcxx/include/__config b/libcxx/include/__config
index dec8d499850c8..bb8d4e63d3def 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -1,6 +1,3 @@
-// XXX EMSCRIPTEN: macros that would ordinarily be added from __config_site.in
-#define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS
-
// -*- C++ -*-
//===----------------------------------------------------------------------===//
//
@@ -1150,8 +1147,8 @@ extern "C" _LIBCPP_FUNC_VIS void __sanitizer_annotate_contiguous_container(
defined(__APPLE__) || \
defined(__sun__) || \
defined(__MVS__) || \
- defined(_AIX)
- defined(__EMSCRIPTEN__) || \
+ defined(_AIX) || \
+ defined(__EMSCRIPTEN__)
# define _LIBCPP_HAS_THREAD_API_PTHREAD
# elif defined(__Fuchsia__)
// TODO(44575): Switch to C11 thread API when possible.
More information about the llvm-branch-commits
mailing list