xref: /freebsd/contrib/llvm-project/compiler-rt/lib/lsan/lsan.h (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
10b57cec5SDimitry Andric //=-- lsan.h --------------------------------------------------------------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric //
90b57cec5SDimitry Andric // This file is a part of LeakSanitizer.
100b57cec5SDimitry Andric // Private header for standalone LSan RTL.
110b57cec5SDimitry Andric //
120b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
130b57cec5SDimitry Andric 
140b57cec5SDimitry Andric #include "lsan_thread.h"
155ffd83dbSDimitry Andric #if SANITIZER_POSIX
165ffd83dbSDimitry Andric #  include "lsan_posix.h"
175ffd83dbSDimitry Andric #elif SANITIZER_FUCHSIA
185ffd83dbSDimitry Andric #  include "lsan_fuchsia.h"
195ffd83dbSDimitry Andric #endif
200b57cec5SDimitry Andric #include "sanitizer_common/sanitizer_flags.h"
210b57cec5SDimitry Andric #include "sanitizer_common/sanitizer_stacktrace.h"
220b57cec5SDimitry Andric 
230b57cec5SDimitry Andric #define GET_STACK_TRACE(max_size, fast)                                        \
240b57cec5SDimitry Andric   __sanitizer::BufferedStackTrace stack;                                       \
250eae32dcSDimitry Andric   stack.Unwind(StackTrace::GetCurrentPc(), GET_CURRENT_FRAME(), nullptr, fast, \
260eae32dcSDimitry Andric                max_size);
270b57cec5SDimitry Andric 
280b57cec5SDimitry Andric #define GET_STACK_TRACE_FATAL \
290b57cec5SDimitry Andric   GET_STACK_TRACE(kStackTraceMax, common_flags()->fast_unwind_on_fatal)
300b57cec5SDimitry Andric 
310b57cec5SDimitry Andric #define GET_STACK_TRACE_MALLOC                                      \
320b57cec5SDimitry Andric   GET_STACK_TRACE(__sanitizer::common_flags()->malloc_context_size, \
330b57cec5SDimitry Andric                   common_flags()->fast_unwind_on_malloc)
340b57cec5SDimitry Andric 
350b57cec5SDimitry Andric #define GET_STACK_TRACE_THREAD GET_STACK_TRACE(kStackTraceMax, true)
360b57cec5SDimitry Andric 
370b57cec5SDimitry Andric namespace __lsan {
380b57cec5SDimitry Andric 
390b57cec5SDimitry Andric void InitializeInterceptors();
400b57cec5SDimitry Andric void ReplaceSystemMalloc();
415ffd83dbSDimitry Andric void LsanOnDeadlySignal(int signo, void *siginfo, void *context);
4281ad6265SDimitry Andric void InstallAtExitCheckLeaks();
43*5f757f3fSDimitry Andric void InstallAtForkHandler();
440b57cec5SDimitry Andric 
450eae32dcSDimitry Andric #define ENSURE_LSAN_INITED        \
460eae32dcSDimitry Andric   do {                            \
470b57cec5SDimitry Andric     CHECK(!lsan_init_is_running); \
480b57cec5SDimitry Andric     if (!lsan_inited)             \
490b57cec5SDimitry Andric       __lsan_init();              \
500b57cec5SDimitry Andric   } while (0)
510b57cec5SDimitry Andric 
520b57cec5SDimitry Andric }  // namespace __lsan
530b57cec5SDimitry Andric 
540b57cec5SDimitry Andric extern bool lsan_inited;
550b57cec5SDimitry Andric extern bool lsan_init_is_running;
560b57cec5SDimitry Andric 
570b57cec5SDimitry Andric extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __lsan_init();
58