xref: /freebsd-src/contrib/llvm-project/compiler-rt/lib/gwp_asan/optional/segv_handler.h (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
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