1e8d8bef9SDimitry Andric //===-- segv_handler.h ------------------------------------------*- C++ -*-===// 25ffd83dbSDimitry Andric // 35ffd83dbSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45ffd83dbSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 55ffd83dbSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65ffd83dbSDimitry Andric // 75ffd83dbSDimitry Andric //===----------------------------------------------------------------------===// 85ffd83dbSDimitry Andric 9e8d8bef9SDimitry Andric #ifndef GWP_ASAN_OPTIONAL_SEGV_HANDLER_H_ 10e8d8bef9SDimitry Andric #define GWP_ASAN_OPTIONAL_SEGV_HANDLER_H_ 115ffd83dbSDimitry Andric 125ffd83dbSDimitry Andric #include "gwp_asan/guarded_pool_allocator.h" 13e8d8bef9SDimitry Andric #include "gwp_asan/optional/backtrace.h" 14e8d8bef9SDimitry Andric #include "gwp_asan/optional/printf.h" 155ffd83dbSDimitry Andric 165ffd83dbSDimitry Andric namespace gwp_asan { 17e8d8bef9SDimitry Andric namespace segv_handler { 185ffd83dbSDimitry Andric // Install the SIGSEGV crash handler for printing use-after-free and heap- 195ffd83dbSDimitry Andric // buffer-{under|over}flow exceptions if the user asked for it. This is platform 205ffd83dbSDimitry Andric // specific as even though POSIX and Windows both support registering handlers 215ffd83dbSDimitry Andric // through signal(), we have to use platform-specific signal handlers to obtain 225ffd83dbSDimitry Andric // the address that caused the SIGSEGV exception. GPA->init() must be called 235ffd83dbSDimitry Andric // before this function. 245ffd83dbSDimitry Andric void installSignalHandlers(gwp_asan::GuardedPoolAllocator *GPA, Printf_t Printf, 25e8d8bef9SDimitry Andric gwp_asan::backtrace::PrintBacktrace_t PrintBacktrace, 26*bdd1243dSDimitry Andric gwp_asan::backtrace::SegvBacktrace_t SegvBacktrace, 27*bdd1243dSDimitry Andric bool Recoverable = false); 285ffd83dbSDimitry Andric 29e8d8bef9SDimitry Andric // Uninistall the signal handlers, test-only. 305ffd83dbSDimitry Andric void uninstallSignalHandlers(); 31e8d8bef9SDimitry Andric } // namespace segv_handler 325ffd83dbSDimitry Andric } // namespace gwp_asan 335ffd83dbSDimitry Andric 34e8d8bef9SDimitry Andric #endif // GWP_ASAN_OPTIONAL_SEGV_HANDLER_H_ 35