9#ifndef LLVM_OBJECT_FAULTMAPPARSER_H
10#define LLVM_OBJECT_FAULTMAPPARSER_H
27 using FaultMapVersionType =
uint8_t;
32 static const size_t FaultMapVersionOffset = 0;
33 static const size_t Reserved0Offset =
34 FaultMapVersionOffset +
sizeof(FaultMapVersionType);
35 static const size_t Reserved1Offset = Reserved0Offset +
sizeof(Reserved0Type);
36 static const size_t NumFunctionsOffset =
37 Reserved1Offset +
sizeof(Reserved1Type);
38 static const size_t FunctionInfosOffset =
39 NumFunctionsOffset +
sizeof(NumFunctionsType);
44 template <
typename T>
static T read(
const uint8_t *P,
const uint8_t *E) {
45 assert(P +
sizeof(
T) <= E &&
"out of bounds read!");
59 using FaultingPCOffsetType =
uint32_t;
60 using HandlerPCOffsetType =
uint32_t;
62 static const size_t FaultKindOffset = 0;
63 static const size_t FaultingPCOffsetOffset =
64 FaultKindOffset +
sizeof(FaultKindType);
65 static const size_t HandlerPCOffsetOffset =
66 FaultingPCOffsetOffset +
sizeof(FaultingPCOffsetType);
73 HandlerPCOffsetOffset +
sizeof(HandlerPCOffsetType);
79 return read<FaultKindType>(P + FaultKindOffset, E);
83 return read<FaultingPCOffsetType>(P + FaultingPCOffsetOffset, E);
87 return read<HandlerPCOffsetType>(P + HandlerPCOffsetOffset, E);
96 static const size_t FunctionAddrOffset = 0;
97 static const size_t NumFaultingPCsOffset =
98 FunctionAddrOffset +
sizeof(FunctionAddrType);
99 static const size_t ReservedOffset =
100 NumFaultingPCsOffset +
sizeof(NumFaultingPCsType);
101 static const size_t FunctionFaultInfosOffset =
102 ReservedOffset +
sizeof(ReservedType);
103 static const size_t FunctionInfoHeaderSize = FunctionFaultInfosOffset;
115 return read<FunctionAddrType>(P + FunctionAddrOffset, E);
119 return read<NumFaultingPCsType>(P + NumFaultingPCsOffset, E);
124 const uint8_t *Begin = P + FunctionFaultInfosOffset +
130 size_t MySize = FunctionInfoHeaderSize +
133 const uint8_t *Begin = P + MySize;
134 assert(Begin < E &&
"out of bounds!");
140 : P(Begin), E(End) {}
143 auto Version = read<FaultMapVersionType>(P + FaultMapVersionOffset, E);
149 return read<NumFunctionsType>(P + NumFunctionsOffset, E);
153 const uint8_t *Begin = P + FunctionInfosOffset;
159operator<<(raw_ostream &OS,
const FaultMapParser::FunctionFaultInfoAccessor &);
162 const FaultMapParser::FunctionInfoAccessor &);
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
FunctionFaultInfoAccessor(const uint8_t *P, const uint8_t *E)
FaultKindType getFaultKind() const
HandlerPCOffsetType getHandlerPCOffset() const
FaultingPCOffsetType getFaultingPCOffset() const
FunctionInfoAccessor(const uint8_t *P, const uint8_t *E)
FunctionInfoAccessor getNextFunctionInfo() const
FunctionAddrType getFunctionAddr() const
NumFaultingPCsType getNumFaultingPCs() const
FunctionFaultInfoAccessor getFunctionFaultInfoAt(uint32_t Index) const
FunctionInfoAccessor()=default
NumFunctionsType getNumFunctions() const
FunctionInfoAccessor getFirstFunctionInfo() const
FaultMapParser(const uint8_t *Begin, const uint8_t *End)
FaultMapVersionType getFaultMapVersion() const
This class implements an extremely fast bulk output stream that can only output to a stream.
value_type read(const void *memory, endianness endian)
Read a value of a particular endianness from memory.
This is an optimization pass for GlobalISel generic memory operations.
FunctionAddr VTableAddr uintptr_t uintptr_t Version
raw_ostream & operator<<(raw_ostream &OS, const APFixedPoint &FX)