58 lines · c
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-exception6//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_POSIX16# include "lsan_posix.h"17#elif SANITIZER_FUCHSIA18# include "lsan_fuchsia.h"19#endif20#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 __lsan53 54extern bool lsan_inited;55extern bool lsan_init_is_running;56 57extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __lsan_init();58