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