xref: /openbsd-src/gnu/llvm/compiler-rt/lib/lsan/lsan.h (revision 810390e339a5425391477d5d41c78d7cab2424ac)
13cab2bb3Spatrick //=-- lsan.h --------------------------------------------------------------===//
23cab2bb3Spatrick //
33cab2bb3Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
43cab2bb3Spatrick // See https://llvm.org/LICENSE.txt for license information.
53cab2bb3Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
63cab2bb3Spatrick //
73cab2bb3Spatrick //===----------------------------------------------------------------------===//
83cab2bb3Spatrick //
93cab2bb3Spatrick // This file is a part of LeakSanitizer.
103cab2bb3Spatrick // Private header for standalone LSan RTL.
113cab2bb3Spatrick //
123cab2bb3Spatrick //===----------------------------------------------------------------------===//
133cab2bb3Spatrick 
143cab2bb3Spatrick #include "lsan_thread.h"
151f9cb04fSpatrick #if SANITIZER_POSIX
161f9cb04fSpatrick #  include "lsan_posix.h"
171f9cb04fSpatrick #elif SANITIZER_FUCHSIA
181f9cb04fSpatrick #  include "lsan_fuchsia.h"
191f9cb04fSpatrick #endif
203cab2bb3Spatrick #include "sanitizer_common/sanitizer_flags.h"
213cab2bb3Spatrick #include "sanitizer_common/sanitizer_stacktrace.h"
223cab2bb3Spatrick 
233cab2bb3Spatrick #define GET_STACK_TRACE(max_size, fast)                                        \
243cab2bb3Spatrick   __sanitizer::BufferedStackTrace stack;                                       \
25*810390e3Srobert   stack.Unwind(StackTrace::GetCurrentPc(), GET_CURRENT_FRAME(), nullptr, fast, \
26*810390e3Srobert                max_size);
273cab2bb3Spatrick 
283cab2bb3Spatrick #define GET_STACK_TRACE_FATAL \
293cab2bb3Spatrick   GET_STACK_TRACE(kStackTraceMax, common_flags()->fast_unwind_on_fatal)
303cab2bb3Spatrick 
313cab2bb3Spatrick #define GET_STACK_TRACE_MALLOC                                      \
323cab2bb3Spatrick   GET_STACK_TRACE(__sanitizer::common_flags()->malloc_context_size, \
333cab2bb3Spatrick                   common_flags()->fast_unwind_on_malloc)
343cab2bb3Spatrick 
353cab2bb3Spatrick #define GET_STACK_TRACE_THREAD GET_STACK_TRACE(kStackTraceMax, true)
363cab2bb3Spatrick 
373cab2bb3Spatrick namespace __lsan {
383cab2bb3Spatrick 
393cab2bb3Spatrick void InitializeInterceptors();
403cab2bb3Spatrick void ReplaceSystemMalloc();
411f9cb04fSpatrick void LsanOnDeadlySignal(int signo, void *siginfo, void *context);
42*810390e3Srobert void InstallAtExitCheckLeaks();
433cab2bb3Spatrick 
44*810390e3Srobert #define ENSURE_LSAN_INITED        \
45*810390e3Srobert   do {                            \
463cab2bb3Spatrick     CHECK(!lsan_init_is_running); \
473cab2bb3Spatrick     if (!lsan_inited)             \
483cab2bb3Spatrick       __lsan_init();              \
493cab2bb3Spatrick   } while (0)
503cab2bb3Spatrick 
513cab2bb3Spatrick }  // namespace __lsan
523cab2bb3Spatrick 
533cab2bb3Spatrick extern bool lsan_inited;
543cab2bb3Spatrick extern bool lsan_init_is_running;
553cab2bb3Spatrick 
563cab2bb3Spatrick extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __lsan_init();
57