clang: include/clang/Basic/PointerAuthOptions.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef LLVM_CLANG_BASIC_POINTERAUTHOPTIONS_H
15#define LLVM_CLANG_BASIC_POINTERAUTHOPTIONS_H
16
19#include "llvm/ADT/STLForwardCompat.h"
20#include "llvm/Support/ErrorHandling.h"
21#include "llvm/Target/TargetOptions.h"
22#include
23
25
26
27
29
31
32
33
34
36
38public:
39 enum class Kind : unsigned {
42 };
43
44
45
46
52 };
53
54
56
58
59
61
62
64
65
67 };
68
69private:
70 Kind TheKind : 2;
71 unsigned IsAddressDiscriminated : 1;
72 unsigned IsIsaPointer : 1;
73 unsigned AuthenticatesNullValues : 1;
76 unsigned Key : 2;
77 unsigned ConstantDiscriminator : 16;
78
79public:
81
83 ARM8_3Key Key, bool IsAddressDiscriminated,
86 std::optional<uint16_t> ConstantDiscriminatorOrNone = std::nullopt,
87 bool IsIsaPointer = false, bool AuthenticatesNullValues = false)
88 : TheKind(Kind::ARM8_3), IsAddressDiscriminated(IsAddressDiscriminated),
89 IsIsaPointer(IsIsaPointer),
90 AuthenticatesNullValues(AuthenticatesNullValues),
91 SelectedAuthenticationMode(AuthenticationMode),
92 DiscriminationKind(OtherDiscrimination), Key(llvm::to_underlying(Key)) {
94 ConstantDiscriminatorOrNone) &&
95 "constant discrimination requires a constant!");
96 if (ConstantDiscriminatorOrNone)
97 ConstantDiscriminator = *ConstantDiscriminatorOrNone;
98 }
99
101 ARM8_3Key Key, bool IsAddressDiscriminated,
103 std::optional<uint16_t> ConstantDiscriminatorOrNone = std::nullopt,
104 bool IsIsaPointer = false, bool AuthenticatesNullValues = false)
107 OtherDiscrimination, ConstantDiscriminatorOrNone,
108 IsIsaPointer, AuthenticatesNullValues) {}
109
111
113
115
118 return IsAddressDiscriminated;
119 }
120
123 return IsIsaPointer;
124 }
125
128 return AuthenticatesNullValues;
129 }
130
133 }
134
137 return DiscriminationKind;
138 }
139
142 return ConstantDiscriminator;
143 }
144
148 llvm_unreachable("calling getKey() on disabled schema");
151 }
152 llvm_unreachable("bad key kind");
153 }
154
156 return SelectedAuthenticationMode;
157 }
158
162 }
163};
164
166
168
169
171
172
174
175
177
178
180
181
182
184
185
186
187
188
190
191
193
194
196
197
199
200
202
203
205};
206
207}
208
209#endif
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
Defines the clang::LangOptions interface.
Discrimination getOtherDiscrimination() const
bool isAddressDiscriminated() const
ARM8_3Key getARM8_3Key() const
PointerAuthSchema(ARM8_3Key Key, bool IsAddressDiscriminated, Discrimination OtherDiscrimination, std::optional< uint16_t > ConstantDiscriminatorOrNone=std::nullopt, bool IsIsaPointer=false, bool AuthenticatesNullValues=false)
Discrimination
Forms of extra discrimination.
@ None
No additional discrimination.
@ Type
Include a hash of the entity's type.
@ Decl
Include a hash of the entity's identity.
@ Constant
Discriminate using a constant value.
bool authenticatesNullValues() const
ARM8_3Key
Hardware pointer-signing keys in ARM8.3.
PointerAuthSchema(ARM8_3Key Key, bool IsAddressDiscriminated, PointerAuthenticationMode AuthenticationMode, Discrimination OtherDiscrimination, std::optional< uint16_t > ConstantDiscriminatorOrNone=std::nullopt, bool IsIsaPointer=false, bool AuthenticatesNullValues=false)
PointerAuthenticationMode getAuthenticationMode() const
uint16_t getConstantDiscrimination() const
bool hasOtherDiscrimination() const
bool isIsaPointer() const
The JSON file list parser is used to communicate input to InstallAPI.
constexpr uint16_t InitFiniPointerConstantDiscriminator
Constant discriminator to be used with function pointers in .init_array and .fini_array.
constexpr unsigned PointerAuthKeyNone
constexpr uint16_t StdTypeInfoVTablePointerConstantDiscrimination
Constant discriminator for std::type_info vtable pointers: 0xB1EA/45546 The value is ptrauth_string_d...
PointerAuthenticationMode
Diagnostic wrappers for TextAPI types for error reporting.
PointerAuthSchema CXXVTablePointers
The ABI for C++ virtual table pointers (the pointer to the table itself) as installed in an actual cl...
PointerAuthSchema InitFiniPointers
The ABI for function addresses in .init_array and .fini_array.
PointerAuthSchema CXXVTTVTablePointers
The ABI for C++ virtual table pointers as installed in a VTT.
bool ReturnAddresses
Should return addresses be authenticated?
PointerAuthSchema CXXTypeInfoVTablePointer
TypeInfo has external ABI requirements and is emitted without actually having parsed the libcxx defin...
bool AArch64JumpTableHardening
Use hardened lowering for jump-table dispatch?
PointerAuthSchema FunctionPointers
The ABI for C function pointers.
bool AuthTraps
Do authentication failures cause a trap?
PointerAuthSchema CXXMemberFunctionPointers
The ABI for C++ member function pointers.
PointerAuthSchema CXXVirtualVariadicFunctionPointers
The ABI for variadic C++ virtual function pointers.
PointerAuthSchema CXXVirtualFunctionPointers
The ABI for most C++ virtual function pointers, i.e. v-table entries.
bool IndirectGotos
Do indirect goto label addresses need to be authenticated?