| //=-- 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(); |