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()) {}
71 if (
I == CIEInfos.end())
72 return make_error<JITLinkError>(
"No CIE found at address " +
84 Error processCIE(ParseContext &PC,
Block &
B,
size_t RecordOffset,
85 size_t RecordLength,
size_t CIEDeltaFieldOffset,
87 Error processFDE(ParseContext &PC,
Block &
B,
size_t RecordOffset,
88 size_t RecordLength,
size_t CIEDeltaFieldOffset,
96 Error skipEncodedPointer(uint8_t PointerEncoding,
99 ParseContext &PC,
const BlockEdgeMap &BlockEdges, uint8_t PointerEncoding,
101 size_t PointerFieldOffset,
const char *FieldName);
107 unsigned PointerSize;
122 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.
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(detail::build_format_adapter(std::forward< Ts >(Vals))...))>