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(), GET_CURRENT_FRAME(), nullptr, fast, \ 26 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 37namespace __lsan { 38 39void InitializeInterceptors(); 40void ReplaceSystemMalloc(); 41void LsanOnDeadlySignal(int signo, void *siginfo, void *context); 42void InstallAtExitCheckLeaks(); 43void InstallAtForkHandler(); 44 45#define ENSURE_LSAN_INITED \ 46 do { \ 47 CHECK(!lsan_init_is_running); \ 48 if (!lsan_inited) \ 49 __lsan_init(); \ 50 } while (0) 51 52} // namespace __lsan 53 54extern bool lsan_inited; 55extern bool lsan_init_is_running; 56 57extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __lsan_init(); 58