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?