13#ifndef LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H
14#define LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H
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()) {}
66 struct BlockEdgesInfo {
78 if (
I == CIEInfos.end())
79 return make_error<JITLinkError>(
"No CIE found at address " +
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;
127 static char NullTerminatorBlockContent[];
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
static bool InBlock(const Value *V, const BasicBlock *BB)
Provides read only access to a subclass of BinaryStream.
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.
A LinkGraph pass that adds missing FDE-to-CIE, FDE-to-PC and FDE-to-LSDA edges.
Error operator()(LinkGraph &G)
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)