9 #ifndef LLVM_CODEGEN_FAULTMAPS_H 10 #define LLVM_CODEGEN_FAULTMAPS_H 42 FunctionInfos.clear();
46 static const char *WFMP;
50 const MCExpr *FaultingOffsetExpr =
nullptr;
51 const MCExpr *HandlerOffsetExpr =
nullptr;
53 FaultInfo() =
default;
56 const MCExpr *HandlerOffset)
57 :
Kind(Kind), FaultingOffsetExpr(FaultingOffset),
58 HandlerOffsetExpr(HandlerOffset) {}
61 using FunctionFaultInfos = std::vector<FaultInfo>;
65 struct MCSymbolComparator {
71 std::map<const MCSymbol *, FunctionFaultInfos, MCSymbolComparator>
75 void emitFunctionInfo(
const MCSymbol *FnLabel,
const FunctionFaultInfos &FFI);
83 using FaultMapVersionType = uint8_t;
84 using Reserved0Type = uint8_t;
85 using Reserved1Type = uint16_t;
88 static const size_t FaultMapVersionOffset = 0;
89 static const size_t Reserved0Offset =
90 FaultMapVersionOffset +
sizeof(FaultMapVersionType);
91 static const size_t Reserved1Offset = Reserved0Offset +
sizeof(Reserved0Type);
92 static const size_t NumFunctionsOffset =
93 Reserved1Offset +
sizeof(Reserved1Type);
94 static const size_t FunctionInfosOffset =
100 template <
typename T>
static T read(
const uint8_t *P,
const uint8_t *E) {
101 assert(P +
sizeof(
T) <= E &&
"out of bounds read!");
102 return support::endian::read<T, support::little, 1>(
P);
111 static const size_t FaultKindOffset = 0;
112 static const size_t FaultingPCOffsetOffset =
114 static const size_t HandlerPCOffsetOffset =
128 return read<FaultKindType>(P + FaultKindOffset,
E);
132 return read<FaultingPCOffsetType>(P + FaultingPCOffsetOffset,
E);
136 return read<HandlerPCOffsetType>(P + HandlerPCOffsetOffset,
E);
141 using FunctionAddrType = uint64_t;
145 static const size_t FunctionAddrOffset = 0;
146 static const size_t NumFaultingPCsOffset =
147 FunctionAddrOffset +
sizeof(FunctionAddrType);
148 static const size_t ReservedOffset =
150 static const size_t FunctionFaultInfosOffset =
152 static const size_t FunctionInfoHeaderSize = FunctionFaultInfosOffset;
154 const uint8_t *P =
nullptr;
155 const uint8_t *E =
nullptr;
164 return read<FunctionAddrType>(P + FunctionAddrOffset,
E);
168 return read<NumFaultingPCsType>(P + NumFaultingPCsOffset,
E);
172 assert(Index < getNumFaultingPCs() &&
"index out of bounds!");
173 const uint8_t *Begin = P + FunctionFaultInfosOffset +
179 size_t MySize = FunctionInfoHeaderSize +
182 const uint8_t *Begin = P + MySize;
183 assert(Begin < E &&
"out of bounds!");
189 : P(Begin), E(End) {}
192 auto Version = read<FaultMapVersionType>(P + FaultMapVersionOffset,
E);
198 return read<NumFunctionsType>(P + NumFunctionsOffset,
E);
202 const uint8_t *Begin = P + FunctionInfosOffset;
217 #endif // LLVM_CODEGEN_FAULTMAPS_H FaultingPCOffsetType getFaultingPCOffset() const
This class represents lattice values for constants.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
HandlerPCOffsetType getHandlerPCOffset() const
FunctionAddrType getFunctionAddr() const
FaultKindType getFaultKind() const
Base class for the full range of assembler expressions which are needed for parsing.
FunctionInfoAccessor getFirstFunctionInfo() const
void recordFaultingOp(FaultKind FaultTy, const MCSymbol *HandlerLabel)
FaultMapParser(const uint8_t *Begin, const uint8_t *End)
NumFunctionsType getNumFunctions() const
FaultMaps(AsmPrinter &AP)
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
This class is intended to be used as a driving class for all asm writers.
FunctionFaultInfoAccessor getFunctionFaultInfoAt(uint32_t Index) const
A parser for the __llvm_faultmaps section generated by the FaultMaps class above. ...
void serializeToFaultMapSection()
FunctionFaultInfoAccessor(const uint8_t *P, const uint8_t *E)
static const char * faultTypeToString(FaultKind)
value_type read(const void *memory, endianness endian)
Read a value of a particular endianness from memory.
raw_ostream & operator<<(raw_ostream &OS, const APInt &I)
StringRef getName() const
getName - Get the symbol name.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
FaultMapVersionType getFaultMapVersion() const
This class implements an extremely fast bulk output stream that can only output to a stream...
NumFaultingPCsType getNumFaultingPCs() const
FunctionInfoAccessor getNextFunctionInfo() const
FunctionInfoAccessor(const uint8_t *P, const uint8_t *E)