1 //=-- lsan.h --------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file is a part of LeakSanitizer. 10 // Private header for standalone LSan RTL. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "lsan_thread.h" 15 #if SANITIZER_POSIX 16 #include "lsan_posix.h" 17 #elif SANITIZER_FUCHSIA 18 #include "lsan_fuchsia.h" 19 #endif 20 #include "sanitizer_common/sanitizer_flags.h" 21 #include "sanitizer_common/sanitizer_stacktrace.h" 22 23 #define GET_STACK_TRACE(max_size, fast) \ 24 __sanitizer::BufferedStackTrace stack; \ 25 stack.Unwind(StackTrace::GetCurrentPc(), \ 26 GET_CURRENT_FRAME(), nullptr, fast, max_size); 27 28 #define GET_STACK_TRACE_FATAL \ 29 GET_STACK_TRACE(kStackTraceMax, common_flags()->fast_unwind_on_fatal) 30 31 #define GET_STACK_TRACE_MALLOC \ 32 GET_STACK_TRACE(__sanitizer::common_flags()->malloc_context_size, \ 33 common_flags()->fast_unwind_on_malloc) 34 35 #define GET_STACK_TRACE_THREAD GET_STACK_TRACE(kStackTraceMax, true) 36 37 namespace __lsan { 38 39 void InitializeInterceptors(); 40 void ReplaceSystemMalloc(); 41 void LsanOnDeadlySignal(int signo, void *siginfo, void *context); 42 43 #define ENSURE_LSAN_INITED do { \ 44 CHECK(!lsan_init_is_running); \ 45 if (!lsan_inited) \ 46 __lsan_init(); \ 47 } while (0) 48 49 } // namespace __lsan 50 51 extern bool lsan_inited; 52 extern bool lsan_init_is_running; 53 54 extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __lsan_init(); 55