1 //===-- options.h -----------------------------------------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #ifndef GWP_ASAN_OPTIONS_H_
10 #define GWP_ASAN_OPTIONS_H_
17 // ================================ Requirements ===============================
18 // This function is required to be either implemented by the supporting
19 // allocator, or one of the two provided implementations may be used
20 // (RTGwpAsanBacktraceLibc or RTGwpAsanBacktraceSanitizerCommon).
21 // ================================ Description ================================
22 // This function shall collect the backtrace for the calling thread and place
23 // the result in `TraceBuffer`. This function should elide itself and all frames
24 // below itself from `TraceBuffer`, i.e. the caller's frame should be in
25 // TraceBuffer[0], and subsequent frames 1..n into TraceBuffer[1..n], where a
26 // maximum of `Size` frames are stored. Returns the number of frames stored into
27 // `TraceBuffer`, and zero on failure. If the return value of this function is
28 // equal to `Size`, it may indicate that the backtrace is truncated.
29 // =================================== Notes ===================================
30 // This function may directly or indirectly call malloc(), as the
31 // GuardedPoolAllocator contains a reentrancy barrier to prevent infinite
32 // recursion. Any allocation made inside this function will be served by the
33 // supporting allocator, and will not have GWP-ASan protections.
34 typedef size_t (*Backtrace_t
)(uintptr_t *TraceBuffer
, size_t Size
);
37 Backtrace_t Backtrace
= nullptr;
39 // Read the options from the included definitions file.
40 #define GWP_ASAN_OPTION(Type, Name, DefaultValue, Description) \
41 Type Name = DefaultValue;
42 #include "gwp_asan/options.inc"
43 #undef GWP_ASAN_OPTION
46 #define GWP_ASAN_OPTION(Type, Name, DefaultValue, Description) \
48 #include "gwp_asan/options.inc"
49 #undef GWP_ASAN_OPTION
54 } // namespace options
55 } // namespace gwp_asan
57 #endif // GWP_ASAN_OPTIONS_H_