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

78 if (I == CIEInfos.end())

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};