diff options
Diffstat (limited to 'llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h')
| -rw-r--r-- | llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h b/llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h index 55cf7fc63ee7..49fbf650e7a7 100644 --- a/llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h +++ b/llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h @@ -60,7 +60,11 @@ private: Edge::AddendT Addend = 0; }; - using BlockEdgeMap = DenseMap<Edge::OffsetT, EdgeTarget>; + struct BlockEdgesInfo { + DenseMap<Edge::OffsetT, EdgeTarget> TargetMap; + DenseSet<Edge::OffsetT> Multiple; + }; + using CIEInfosMap = DenseMap<orc::ExecutorAddr, CIEInformation>; struct ParseContext { @@ -81,12 +85,10 @@ private: }; Error processBlock(ParseContext &PC, Block &B); - Error processCIE(ParseContext &PC, Block &B, size_t RecordOffset, - size_t RecordLength, size_t CIEDeltaFieldOffset, - const BlockEdgeMap &BlockEdges); - Error processFDE(ParseContext &PC, Block &B, size_t RecordOffset, - size_t RecordLength, size_t CIEDeltaFieldOffset, - uint32_t CIEDelta, const BlockEdgeMap &BlockEdges); + Error processCIE(ParseContext &PC, Block &B, size_t CIEDeltaFieldOffset, + const BlockEdgesInfo &BlockEdges); + Error processFDE(ParseContext &PC, Block &B, size_t CIEDeltaFieldOffset, + uint32_t CIEDelta, const BlockEdgesInfo &BlockEdges); Expected<AugmentationInfo> parseAugmentationString(BinaryStreamReader &RecordReader); @@ -96,9 +98,9 @@ private: Error skipEncodedPointer(uint8_t PointerEncoding, BinaryStreamReader &RecordReader); Expected<Symbol *> getOrCreateEncodedPointerEdge( - ParseContext &PC, const BlockEdgeMap &BlockEdges, uint8_t PointerEncoding, - BinaryStreamReader &RecordReader, Block &BlockToFix, - size_t PointerFieldOffset, const char *FieldName); + ParseContext &PC, const BlockEdgesInfo &BlockEdges, + uint8_t PointerEncoding, BinaryStreamReader &RecordReader, + Block &BlockToFix, size_t PointerFieldOffset, const char *FieldName); Expected<Symbol &> getOrCreateSymbol(ParseContext &PC, orc::ExecutorAddr Addr); |
