forked from OSchip/llvm-project
Revert "[lsan] On Fuchsia, don't use atexit hook for leak checks"
This reverts commit0caad9fe44
. This reverts commitc96d0cceb6
. Causes linker errors which were not fixed by the subsequent commit either: /home/nikic/llvm-project/compiler-rt/lib/asan/asan_rtl.cpp:503: error: undefined reference to '__asan::InstallAtExitCheckLeaks()'
This commit is contained in:
parent
2efc09c909
commit
f161e84c10
|
@ -14,16 +14,15 @@
|
|||
#include "sanitizer_common/sanitizer_fuchsia.h"
|
||||
#if SANITIZER_FUCHSIA
|
||||
|
||||
#include <limits.h>
|
||||
#include <zircon/sanitizer.h>
|
||||
#include <zircon/syscalls.h>
|
||||
#include <zircon/threads.h>
|
||||
|
||||
#include "asan_interceptors.h"
|
||||
#include "asan_internal.h"
|
||||
#include "asan_stack.h"
|
||||
#include "asan_thread.h"
|
||||
#include "lsan/lsan_common.h"
|
||||
|
||||
#include <limits.h>
|
||||
#include <zircon/sanitizer.h>
|
||||
#include <zircon/syscalls.h>
|
||||
#include <zircon/threads.h>
|
||||
|
||||
namespace __asan {
|
||||
|
||||
|
@ -32,8 +31,7 @@ namespace __asan {
|
|||
// AsanInitInternal->InitializeHighMemEnd (asan_rtl.cpp).
|
||||
// Just do some additional sanity checks here.
|
||||
void InitializeShadowMemory() {
|
||||
if (Verbosity())
|
||||
PrintAddressSpaceLayout();
|
||||
if (Verbosity()) PrintAddressSpaceLayout();
|
||||
|
||||
// Make sure SHADOW_OFFSET doesn't use __asan_shadow_memory_dynamic_address.
|
||||
__asan_shadow_memory_dynamic_address = kDefaultShadowSentinel;
|
||||
|
@ -150,8 +148,7 @@ static void *BeforeThreadCreateHook(uptr user_id, bool detached,
|
|||
uptr stack_size) {
|
||||
EnsureMainThreadIDIsCorrect();
|
||||
// Strict init-order checking is thread-hostile.
|
||||
if (flags()->strict_init_order)
|
||||
StopInitOrderChecking();
|
||||
if (flags()->strict_init_order) StopInitOrderChecking();
|
||||
|
||||
GET_STACK_TRACE_THREAD;
|
||||
u32 parent_tid = GetCurrentTidOrInvalid();
|
||||
|
@ -205,18 +202,8 @@ void FlushUnneededASanShadowMemory(uptr p, uptr size) {
|
|||
__sanitizer_fill_shadow(p, size, 0, 0);
|
||||
}
|
||||
|
||||
// On Fuchsia, leak detection is done by a special hook after atexit hooks.
|
||||
// So this doesn't install any atexit hook like on other platforms.
|
||||
void InstallAtExitCheckLeaks() {}
|
||||
|
||||
} // namespace __asan
|
||||
|
||||
namespace __lsan {
|
||||
|
||||
bool UseExitcodeOnLeak() { return __asan::flags()->halt_on_error; }
|
||||
|
||||
} // namespace __lsan
|
||||
|
||||
// These are declared (in extern "C") by <zircon/sanitizer.h>.
|
||||
// The system runtime will call our definitions directly.
|
||||
|
||||
|
|
|
@ -123,8 +123,6 @@ void *AsanDlSymNext(const char *sym);
|
|||
// `dlopen()` specific initialization inside this function.
|
||||
bool HandleDlopenInit();
|
||||
|
||||
void InstallAtExitCheckLeaks();
|
||||
|
||||
// Add convenient macro for interface functions that may be represented as
|
||||
// weak hooks.
|
||||
#define ASAN_MALLOC_HOOK(ptr, size) \
|
||||
|
|
|
@ -140,18 +140,6 @@ void PlatformTSDDtor(void *tsd) {
|
|||
AsanThread::TSDDtor(tsd);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CAN_SANITIZE_LEAKS
|
||||
void InstallAtExitCheckLeaks() {
|
||||
if (common_flags()->detect_leaks && common_flags()->leak_check_at_exit) {
|
||||
if (flags()->halt_on_error)
|
||||
Atexit(__lsan::DoLeakCheck);
|
||||
else
|
||||
Atexit(__lsan::DoRecoverableLeakCheckVoid);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace __asan
|
||||
|
||||
#endif // SANITIZER_POSIX
|
||||
|
|
|
@ -498,10 +498,15 @@ static void AsanInitInternal() {
|
|||
force_interface_symbols(); // no-op.
|
||||
SanitizerInitializeUnwinder();
|
||||
|
||||
#if CAN_SANITIZE_LEAKS
|
||||
__lsan::InitCommonLsan();
|
||||
InstallAtExitCheckLeaks();
|
||||
#endif
|
||||
if (CAN_SANITIZE_LEAKS) {
|
||||
__lsan::InitCommonLsan();
|
||||
if (common_flags()->detect_leaks && common_flags()->leak_check_at_exit) {
|
||||
if (flags()->halt_on_error)
|
||||
Atexit(__lsan::DoLeakCheck);
|
||||
else
|
||||
Atexit(__lsan::DoRecoverableLeakCheckVoid);
|
||||
}
|
||||
}
|
||||
|
||||
#if CAN_SANITIZE_UB
|
||||
__ubsan::InitAsPlugin();
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
//===-- asan_win.cpp
|
||||
//------------------------------------------------------===//>
|
||||
//===-- asan_win.cpp ------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
|
@ -15,9 +14,10 @@
|
|||
#include "sanitizer_common/sanitizer_platform.h"
|
||||
#if SANITIZER_WINDOWS
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <stdlib.h>
|
||||
#include <windows.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "asan_interceptors.h"
|
||||
#include "asan_internal.h"
|
||||
#include "asan_mapping.h"
|
||||
|
@ -49,8 +49,8 @@ uptr __asan_get_shadow_memory_dynamic_address() {
|
|||
static LPTOP_LEVEL_EXCEPTION_FILTER default_seh_handler;
|
||||
static LPTOP_LEVEL_EXCEPTION_FILTER user_seh_handler;
|
||||
|
||||
extern "C" SANITIZER_INTERFACE_ATTRIBUTE long __asan_unhandled_exception_filter(
|
||||
EXCEPTION_POINTERS *info) {
|
||||
extern "C" SANITIZER_INTERFACE_ATTRIBUTE
|
||||
long __asan_unhandled_exception_filter(EXCEPTION_POINTERS *info) {
|
||||
EXCEPTION_RECORD *exception_record = info->ExceptionRecord;
|
||||
CONTEXT *context = info->ContextRecord;
|
||||
|
||||
|
@ -187,8 +187,6 @@ void InitializePlatformInterceptors() {
|
|||
}
|
||||
}
|
||||
|
||||
void InstallAtExitCheckLeaks() {}
|
||||
|
||||
void AsanApplyToGlobals(globals_op_fptr op, const void *needle) {
|
||||
UNIMPLEMENTED();
|
||||
}
|
||||
|
|
|
@ -103,7 +103,9 @@ extern "C" void __lsan_init() {
|
|||
InitializeThreadRegistry();
|
||||
InstallDeadlySignalHandlers(LsanOnDeadlySignal);
|
||||
InitializeMainThread();
|
||||
InstallAtExitCheckLeaks();
|
||||
|
||||
if (common_flags()->detect_leaks && common_flags()->leak_check_at_exit)
|
||||
Atexit(DoLeakCheck);
|
||||
|
||||
InitializeCoverage(common_flags()->coverage, common_flags()->coverage_dir);
|
||||
|
||||
|
|
|
@ -39,7 +39,6 @@ namespace __lsan {
|
|||
void InitializeInterceptors();
|
||||
void ReplaceSystemMalloc();
|
||||
void LsanOnDeadlySignal(int signo, void *siginfo, void *context);
|
||||
void InstallAtExitCheckLeaks();
|
||||
|
||||
#define ENSURE_LSAN_INITED do { \
|
||||
CHECK(!lsan_init_is_running); \
|
||||
|
|
|
@ -51,16 +51,7 @@ void ProcessPlatformSpecificAllocations(Frontier *frontier) {}
|
|||
// behavior and causes rare race conditions.
|
||||
void HandleLeaks() {}
|
||||
|
||||
// This is defined differently in asan_fuchsia.cpp and lsan_fuchsia.cpp.
|
||||
bool UseExitcodeOnLeak();
|
||||
|
||||
int ExitHook(int status) {
|
||||
if (common_flags()->detect_leaks && common_flags()->leak_check_at_exit) {
|
||||
if (UseExitcodeOnLeak())
|
||||
DoLeakCheck();
|
||||
else
|
||||
DoRecoverableLeakCheckVoid();
|
||||
}
|
||||
return status == 0 && HasReportedLeaks() ? common_flags()->exitcode : status;
|
||||
}
|
||||
|
||||
|
|
|
@ -76,13 +76,6 @@ void GetAllThreadAllocatorCachesLocked(InternalMmapVector<uptr> *caches) {
|
|||
caches);
|
||||
}
|
||||
|
||||
// On Fuchsia, leak detection is done by a special hook after atexit hooks.
|
||||
// So this doesn't install any atexit hook like on other platforms.
|
||||
void InstallAtExitCheckLeaks() {}
|
||||
|
||||
// ASan defines this to check its `halt_on_error` flag.
|
||||
bool UseExitcodeOnLeak() { return true; }
|
||||
|
||||
} // namespace __lsan
|
||||
|
||||
// These are declared (in extern "C") by <zircon/sanitizer.h>.
|
||||
|
|
|
@ -91,11 +91,6 @@ void LsanOnDeadlySignal(int signo, void *siginfo, void *context) {
|
|||
nullptr);
|
||||
}
|
||||
|
||||
void InstallAtExitCheckLeaks() {
|
||||
if (common_flags()->detect_leaks && common_flags()->leak_check_at_exit)
|
||||
Atexit(DoLeakCheck);
|
||||
}
|
||||
|
||||
} // namespace __lsan
|
||||
|
||||
#endif // SANITIZER_POSIX
|
||||
|
|
Loading…
Reference in New Issue