14#ifndef LLVM_CLANG_BASIC_POINTERAUTHOPTIONS_H
15#define LLVM_CLANG_BASIC_POINTERAUTHOPTIONS_H
19#include "llvm/ADT/STLForwardCompat.h"
20#include "llvm/Support/ErrorHandling.h"
21#include "llvm/Target/TargetOptions.h"
59 enum class Kind :
unsigned {
91 unsigned IsAddressDiscriminated : 1;
92 unsigned IsIsaPointer : 1;
93 unsigned AuthenticatesNullValues : 1;
95 Discrimination DiscriminationKind : 2;
97 unsigned ConstantDiscriminator : 16;
103 ARM8_3Key Key,
bool IsAddressDiscriminated,
106 std::optional<uint16_t> ConstantDiscriminatorOrNone = std::nullopt,
107 bool IsIsaPointer =
false,
bool AuthenticatesNullValues =
false)
108 : TheKind(
Kind::
ARM8_3), IsAddressDiscriminated(IsAddressDiscriminated),
109 IsIsaPointer(IsIsaPointer),
110 AuthenticatesNullValues(AuthenticatesNullValues),
111 SelectedAuthenticationMode(AuthenticationMode),
112 DiscriminationKind(OtherDiscrimination), Key(
llvm::to_underlying(Key)) {
114 ConstantDiscriminatorOrNone) &&
115 "constant discrimination requires a constant!");
116 if (ConstantDiscriminatorOrNone)
117 ConstantDiscriminator = *ConstantDiscriminatorOrNone;
121 ARM8_3Key Key,
bool IsAddressDiscriminated,
123 std::optional<uint16_t> ConstantDiscriminatorOrNone = std::nullopt,
124 bool IsIsaPointer =
false,
bool AuthenticatesNullValues =
false)
127 OtherDiscrimination, ConstantDiscriminatorOrNone,
128 IsIsaPointer, AuthenticatesNullValues) {}
138 return IsAddressDiscriminated;
148 return AuthenticatesNullValues;
157 return DiscriminationKind;
162 return ConstantDiscriminator;
168 llvm_unreachable(
"calling getKey() on disabled schema");
172 llvm_unreachable(
"bad key kind");
176 return SelectedAuthenticationMode;
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 BlockDescriptorConstantDiscriminator
Constant discriminator to be used with block descriptor pointers.
constexpr uint16_t IsaPointerConstantDiscriminator
Constant discriminator to be used with objective-c isa pointers.
constexpr uint16_t SuperPointerConstantDiscriminator
Constant discriminator to be used with objective-c superclass pointers.
constexpr uint16_t MethodListPointerConstantDiscriminator
Constant discriminator to be used with method list pointers.
constexpr uint16_t ClassROConstantDiscriminator
Constant discriminator to be used with objective-c class_ro_t pointers.
constexpr uint16_t SelPointerConstantDiscriminator
Constant discriminator to be used with objective-c sel pointers.
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.
__packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 __packed_splat4 uint16_t
PointerAuthSchema BlockDescriptorPointers
The ABI for pointers to block descriptors.
PointerAuthSchema BlockHelperFunctionPointers
The ABI for block object copy/destroy function pointers.
PointerAuthSchema CXXVTablePointers
The ABI for C++ virtual table pointers (the pointer to the table itself) as installed in an actual cl...
PointerAuthSchema BlockInvocationFunctionPointers
The ABI for block invocation function pointers.
PointerAuthSchema BlockByrefHelperFunctionPointers
The ABI for __block variable copy/destroy function pointers.
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 ObjCMethodListPointer
The ABI for a reference to an Objective-C method list in _class_ro_t.
PointerAuthSchema FunctionPointers
The ABI for C function pointers.
PointerAuthSchema ObjCSuperPointers
The ABI for Objective-C superclass 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 ObjCMethodListFunctionPointers
The ABI for Objective-C method lists.
PointerAuthSchema ObjCClassROPointers
The ABI for Objective-C class_ro_t pointers.
PointerAuthSchema CXXVirtualFunctionPointers
The ABI for most C++ virtual function pointers, i.e. v-table entries.
PointerAuthSchema ObjCIsaPointers
The ABI for Objective-C isa pointers.
bool IndirectGotos
Do indirect goto label addresses need to be authenticated?