13#ifndef LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H
14#define LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H
39 struct AugmentationInfo {
40 bool AugmentationDataPresent =
false;
41 bool EHDataFieldPresent =
false;
42 uint8_t Fields[4] = {0x0, 0x0, 0x0, 0x0};
45 struct CIEInformation {
46 CIEInformation() =
default;
47 CIEInformation(
Symbol &CIESymbol) : CIESymbol(&CIESymbol) {}
48 Symbol *CIESymbol =
nullptr;
49 bool AugmentationDataPresent =
false;
50 bool LSDAPresent =
false;
51 uint8_t LSDAEncoding = 0;
52 uint8_t AddressEncoding = 0;
56 EdgeTarget() =
default;
57 EdgeTarget(
const Edge &
E) :
Target(&
E.getTarget()), Addend(
E.getAddend()) {}
63 struct BlockEdgesInfo {
75 if (
I == CIEInfos.end())
76 return make_error<JITLinkError>(
"No CIE found at address " +
88 Error processCIE(ParseContext &PC,
Block &
B,
size_t CIEDeltaFieldOffset,
89 const BlockEdgesInfo &BlockEdges);
90 Error processFDE(ParseContext &PC,
Block &
B,
size_t CIEDeltaFieldOffset,
91 uint32_t CIEDelta,
const BlockEdgesInfo &BlockEdges);
98 Error skipEncodedPointer(uint8_t PointerEncoding,
101 ParseContext &PC,
const BlockEdgesInfo &BlockEdges,
103 Block &BlockToFix,
size_t PointerFieldOffset,
const char *FieldName);
109 unsigned PointerSize;
124 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(const char *Fmt, Ts &&...Vals) -> formatv_object< decltype(std::make_tuple(support::detail::build_format_adapter(std::forward< Ts >(Vals))...))>