class EHFrameEdgeFixer

Declaration

class EHFrameEdgeFixer { /* full declaration omitted */ };

Description

A LinkGraph pass that adds missing FDE-to-CIE, FDE-to-PC and FDE-to-LSDA edges.

Declared at: llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h:26

Member Variables

private llvm::StringRef EHFrameSectionName
private unsigned int PointerSize
private Edge::Kind Pointer32
private Edge::Kind Pointer64
private Edge::Kind Delta32
private Edge::Kind Delta64
private Edge::Kind NegDelta32

Method Overview

  • public EHFrameEdgeFixer(llvm::StringRef EHFrameSectionName, unsigned int PointerSize, Edge::Kind Pointer32, Edge::Kind Pointer64, Edge::Kind Delta32, Edge::Kind Delta64, Edge::Kind NegDelta32)
  • private Expected<llvm::jitlink::Symbol *> getOrCreateEncodedPointerEdge(llvm::jitlink::EHFrameEdgeFixer::ParseContext & PC, const llvm::jitlink::EHFrameEdgeFixer::BlockEdgeMap & BlockEdges, uint8_t PointerEncoding, llvm::BinaryStreamReader & RecordReader, llvm::jitlink::Block & BlockToFix, size_t PointerFieldOffset, const char * FieldName)
  • private Expected<llvm::jitlink::Symbol &> getOrCreateSymbol(llvm::jitlink::EHFrameEdgeFixer::ParseContext & PC, orc::ExecutorAddr Addr)
  • private Expected<llvm::jitlink::EHFrameEdgeFixer::AugmentationInfo> parseAugmentationString(llvm::BinaryStreamReader & RecordReader)
  • private llvm::Error processBlock(llvm::jitlink::EHFrameEdgeFixer::ParseContext & PC, llvm::jitlink::Block & B)
  • private llvm::Error processCIE(llvm::jitlink::EHFrameEdgeFixer::ParseContext & PC, llvm::jitlink::Block & B, size_t RecordOffset, size_t RecordLength, size_t CIEDeltaFieldOffset, const llvm::jitlink::EHFrameEdgeFixer::BlockEdgeMap & BlockEdges)
  • private llvm::Error processFDE(llvm::jitlink::EHFrameEdgeFixer::ParseContext & PC, llvm::jitlink::Block & B, size_t RecordOffset, size_t RecordLength, size_t CIEDeltaFieldOffset, uint32_t CIEDelta, const llvm::jitlink::EHFrameEdgeFixer::BlockEdgeMap & BlockEdges)
  • private Expected<uint8_t> readPointerEncoding(llvm::BinaryStreamReader & RecordReader, llvm::jitlink::Block & InBlock, const char * FieldName)
  • private llvm::Error skipEncodedPointer(uint8_t PointerEncoding, llvm::BinaryStreamReader & RecordReader)

Methods

EHFrameEdgeFixer(
    llvm::StringRef EHFrameSectionName,
    unsigned int PointerSize,
    Edge::Kind Pointer32,
    Edge::Kind Pointer64,
    Edge::Kind Delta32,
    Edge::Kind Delta64,
    Edge::Kind NegDelta32)

Description

Create an eh-frame edge fixer. If a given edge-kind is not supported on the target architecture then Edge::Invalid should be used.

Declared at: llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h:31

Parameters

llvm::StringRef EHFrameSectionName
unsigned int PointerSize
Edge::Kind Pointer32
Edge::Kind Pointer64
Edge::Kind Delta32
Edge::Kind Delta64
Edge::Kind NegDelta32

Expected<llvm::jitlink::Symbol*>
getOrCreateEncodedPointerEdge(
    llvm::jitlink::EHFrameEdgeFixer::ParseContext&
        PC,
    const llvm::jitlink::EHFrameEdgeFixer::
        BlockEdgeMap& BlockEdges,
    uint8_t PointerEncoding,
    llvm::BinaryStreamReader& RecordReader,
    llvm::jitlink::Block& BlockToFix,
    size_t PointerFieldOffset,
    const char* FieldName)

Declared at: llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h:98

Parameters

llvm::jitlink::EHFrameEdgeFixer::ParseContext& PC
const llvm::jitlink::EHFrameEdgeFixer:: BlockEdgeMap& BlockEdges
uint8_t PointerEncoding
llvm::BinaryStreamReader& RecordReader
llvm::jitlink::Block& BlockToFix
size_t PointerFieldOffset
const char* FieldName

Expected<llvm::jitlink::Symbol&>
getOrCreateSymbol(
    llvm::jitlink::EHFrameEdgeFixer::ParseContext&
        PC,
    orc::ExecutorAddr Addr)

Declared at: llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h:103

Parameters

llvm::jitlink::EHFrameEdgeFixer::ParseContext& PC
orc::ExecutorAddr Addr

Expected<llvm::jitlink::EHFrameEdgeFixer::
             AugmentationInfo>
parseAugmentationString(
    llvm::BinaryStreamReader& RecordReader)

Declared at: llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h:92

Parameters

llvm::BinaryStreamReader& RecordReader

llvm::Error processBlock(
    llvm::jitlink::EHFrameEdgeFixer::ParseContext&
        PC,
    llvm::jitlink::Block& B)

Declared at: llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h:83

Parameters

llvm::jitlink::EHFrameEdgeFixer::ParseContext& PC
llvm::jitlink::Block& B

llvm::Error processCIE(
    llvm::jitlink::EHFrameEdgeFixer::ParseContext&
        PC,
    llvm::jitlink::Block& B,
    size_t RecordOffset,
    size_t RecordLength,
    size_t CIEDeltaFieldOffset,
    const llvm::jitlink::EHFrameEdgeFixer::
        BlockEdgeMap& BlockEdges)

Declared at: llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h:84

Parameters

llvm::jitlink::EHFrameEdgeFixer::ParseContext& PC
llvm::jitlink::Block& B
size_t RecordOffset
size_t RecordLength
size_t CIEDeltaFieldOffset
const llvm::jitlink::EHFrameEdgeFixer:: BlockEdgeMap& BlockEdges

llvm::Error processFDE(
    llvm::jitlink::EHFrameEdgeFixer::ParseContext&
        PC,
    llvm::jitlink::Block& B,
    size_t RecordOffset,
    size_t RecordLength,
    size_t CIEDeltaFieldOffset,
    uint32_t CIEDelta,
    const llvm::jitlink::EHFrameEdgeFixer::
        BlockEdgeMap& BlockEdges)

Declared at: llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h:87

Parameters

llvm::jitlink::EHFrameEdgeFixer::ParseContext& PC
llvm::jitlink::Block& B
size_t RecordOffset
size_t RecordLength
size_t CIEDeltaFieldOffset
uint32_t CIEDelta
const llvm::jitlink::EHFrameEdgeFixer:: BlockEdgeMap& BlockEdges

Expected<uint8_t> readPointerEncoding(
    llvm::BinaryStreamReader& RecordReader,
    llvm::jitlink::Block& InBlock,
    const char* FieldName)

Declared at: llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h:94

Parameters

llvm::BinaryStreamReader& RecordReader
llvm::jitlink::Block& InBlock
const char* FieldName

llvm::Error skipEncodedPointer(
    uint8_t PointerEncoding,
    llvm::BinaryStreamReader& RecordReader)

Declared at: llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h:96

Parameters

uint8_t PointerEncoding
llvm::BinaryStreamReader& RecordReader