13 #ifndef LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H
14 #define LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H
39 struct AugmentationInfo {
40 bool AugmentationDataPresent =
false;
41 bool EHDataFieldPresent =
false;
42 uint8_t Fields[4] = {0x0, 0x0, 0x0, 0x0};
45 struct CIEInformation {
46 CIEInformation() =
default;
47 CIEInformation(
Symbol &CIESymbol) : CIESymbol(&CIESymbol) {}
48 Symbol *CIESymbol =
nullptr;
49 bool AugmentationDataPresent =
false;
50 bool LSDAPresent =
false;
51 uint8_t LSDAEncoding = 0;
52 uint8_t AddressEncoding = 0;
56 EdgeTarget() =
default;
57 EdgeTarget(
const Edge &
E) :
Target(&
E.getTarget()), Addend(
E.getAddend()) {}
70 auto I = CIEInfos.find(Address);
71 if (
I == CIEInfos.end())
72 return make_error<JITLinkError>(
"No CIE found at address " +
84 Error processCIE(ParseContext &PC,
Block &
B,
size_t RecordOffset,
85 size_t RecordLength,
size_t CIEDeltaFieldOffset,
87 Error processFDE(ParseContext &PC,
Block &
B,
size_t RecordOffset,
88 size_t RecordLength,
size_t CIEDeltaFieldOffset,
96 Error skipEncodedPointer(uint8_t PointerEncoding,
99 ParseContext &PC,
const BlockEdgeMap &BlockEdges, uint8_t PointerEncoding,
101 size_t PointerFieldOffset,
const char *FieldName);
107 unsigned PointerSize;
122 static char NullTerminatorBlockContent[];
129 #endif // LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H