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