13#ifndef LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H
14#define LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H
35 Edge::Kind Pointer32, Edge::Kind Pointer64,
36 Edge::Kind Delta32, Edge::Kind Delta64,
37 Edge::Kind NegDelta32);
42 struct AugmentationInfo {
43 bool AugmentationDataPresent =
false;
44 bool EHDataFieldPresent =
false;
45 uint8_t Fields[4] = {0x0, 0x0, 0x0, 0x0};
48 struct CIEInformation {
49 CIEInformation() =
default;
50 CIEInformation(
Symbol &CIESymbol) : CIESymbol(&CIESymbol) {}
51 Symbol *CIESymbol =
nullptr;
52 bool AugmentationDataPresent =
false;
53 bool LSDAPresent =
false;
59 EdgeTarget() =
default;
60 EdgeTarget(
const Edge &
E) :
Target(&
E.getTarget()), Addend(
E.getAddend()) {}
63 Edge::AddendT Addend = 0;
66 struct BlockEdgesInfo {
78 if (
I == CIEInfos.
end())
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);
104 ParseContext &PC,
const BlockEdgesInfo &BlockEdges,
106 Block &BlockToFix,
size_t PointerFieldOffset,
const char *FieldName);
112 unsigned PointerSize;
113 Edge::Kind Pointer32;
114 Edge::Kind Pointer64;
117 Edge::Kind NegDelta32;
127 static char NullTerminatorBlockContent[];
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
static bool InBlock(const Value *V, const BasicBlock *BB)
Provides read only access to a subclass of BinaryStream.
iterator find(const_arg_type_t< KeyT > Val)
Implements a dense probed hash-table based set.
Lightweight error class with error context and mandatory checking.
Tagged union holding either a T or a Error.
StringRef - Represent a constant reference to a string, i.e.
Target - Wrapper for Target specific information.
Enables easy lookup of blocks by addresses.
An Addressable with content and edges.
Error operator()(LinkGraph &G)
EHFrameEdgeFixer(StringRef EHFrameSectionName, unsigned PointerSize, Edge::Kind Pointer32, Edge::Kind Pointer64, Edge::Kind Delta32, Edge::Kind Delta64, Edge::Kind NegDelta32)
Create an eh-frame edge fixer.
Represents fixups and constraints in the LinkGraph.
Represents an address in the executor process.
This is an optimization pass for GlobalISel generic memory operations.
auto formatv(bool Validate, const char *Fmt, Ts &&...Vals)
Error make_error(ArgTs &&... Args)
Make a Error instance representing failure using the given error info type.