Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/compiler-rt/lib/gwp_asan/options.h
35236 views
1
//===-- options.h -----------------------------------------------*- C++ -*-===//
2
//
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
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef GWP_ASAN_OPTIONS_H_
10
#define GWP_ASAN_OPTIONS_H_
11
12
#include <stddef.h>
13
#include <stdint.h>
14
15
namespace gwp_asan {
16
namespace options {
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);
35
36
struct Options {
37
Backtrace_t Backtrace = nullptr;
38
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
44
45
void setDefaults() {
46
#define GWP_ASAN_OPTION(Type, Name, DefaultValue, Description) \
47
Name = DefaultValue;
48
#include "gwp_asan/options.inc"
49
#undef GWP_ASAN_OPTION
50
51
Backtrace = nullptr;
52
}
53
};
54
} // namespace options
55
} // namespace gwp_asan
56
57
#endif // GWP_ASAN_OPTIONS_H_
58
59