LLVM: lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h Source File (original) (raw)
27public:
28
29
30
31
32
33
35 Edge::Kind Pointer32, Edge::Kind Pointer64,
36 Edge::Kind Delta32, Edge::Kind Delta64,
37 Edge::Kind NegDelta32);
39
40private:
41
42 struct AugmentationInfo {
43 bool AugmentationDataPresent = false;
44 bool EHDataFieldPresent = false;
45 uint8_t Fields[4] = {0x0, 0x0, 0x0, 0x0};
46 };
47
48 struct CIEInformation {
49 CIEInformation() = default;
50 CIEInformation(Symbol &CIESymbol) : CIESymbol(&CIESymbol) {}
51 Symbol *CIESymbol = nullptr;
52 bool AugmentationDataPresent = false;
53 bool LSDAPresent = false;
55 uint8_t AddressEncoding = 0;
56 };
57
58 struct EdgeTarget {
59 EdgeTarget() = default;
60 EdgeTarget(const Edge &E) : Target(&E.getTarget()), Addend(E.getAddend()) {}
61
63 Edge::AddendT Addend = 0;
64 };
65
66 struct BlockEdgesInfo {
69 };
70
72
73 struct ParseContext {
75
81 return &I->second;
82 }
83
85 CIEInfosMap CIEInfos;
88 };
89
90 Error processBlock(ParseContext &PC, Block &B);
91 Error processCIE(ParseContext &PC, Block &B, size_t CIEDeltaFieldOffset,
92 const BlockEdgesInfo &BlockEdges);
93 Error processFDE(ParseContext &PC, Block &B, size_t CIEDeltaFieldOffset,
94 uint32_t CIEDelta, const BlockEdgesInfo &BlockEdges);
95
98
101 Error skipEncodedPointer(uint8_t PointerEncoding,
104 ParseContext &PC, const BlockEdgesInfo &BlockEdges,
106 Block &BlockToFix, size_t PointerFieldOffset, const char *FieldName);
107
110
112 unsigned PointerSize;
113 Edge::Kind Pointer32;
114 Edge::Kind Pointer64;
115 Edge::Kind Delta32;
116 Edge::Kind Delta64;
117 Edge::Kind NegDelta32;
118};
122public:
125
126private:
127 static char NullTerminatorBlockContent[];
129};