//=-- lsan.h --------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file is a part of LeakSanitizer. // Private header for standalone LSan RTL. // //===----------------------------------------------------------------------===// #include "lsan_thread.h" #if SANITIZER_POSIX # include "lsan_posix.h" #elif SANITIZER_FUCHSIA # include "lsan_fuchsia.h" #endif #include "sanitizer_common/sanitizer_flags.h" #include "sanitizer_common/sanitizer_stacktrace.h" #define GET_STACK_TRACE(max_size, fast) \ __sanitizer::BufferedStackTrace stack; \ stack.Unwind(StackTrace::GetCurrentPc(), GET_CURRENT_FRAME(), nullptr, fast, \ max_size); #define GET_STACK_TRACE_FATAL \ GET_STACK_TRACE(kStackTraceMax, common_flags()->fast_unwind_on_fatal) #define GET_STACK_TRACE_MALLOC \ GET_STACK_TRACE(__sanitizer::common_flags()->malloc_context_size, \ common_flags()->fast_unwind_on_malloc) #define GET_STACK_TRACE_THREAD GET_STACK_TRACE(kStackTraceMax, true) namespace __lsan { void InitializeInterceptors(); void ReplaceSystemMalloc(); void LsanOnDeadlySignal(int signo, void *siginfo, void *context); #define ENSURE_LSAN_INITED \ do { \ CHECK(!lsan_init_is_running); \ if (!lsan_inited) \ __lsan_init(); \ } while (0) } // namespace __lsan extern bool lsan_inited; extern bool lsan_init_is_running; extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __lsan_init();