13#ifndef LLVM_EXECUTIONENGINE_ORC_LINKGRAPHLINKINGLAYER_H
14#define LLVM_EXECUTIONENGINE_ORC_LINKGRAPHLINKINGLAYER_H
35class EHFrameRegistrar;
67 return Error::success();
88 std::unique_ptr<jitlink::JITLinkMemoryManager> MemMgr);
95 std::lock_guard<std::mutex> Lock(LayerMutex);
96 Plugins.push_back(std::move(
P));
105 std::lock_guard<std::mutex> Lock(LayerMutex);
106 auto I =
llvm::find_if(Plugins, [&](
const std::shared_ptr<Plugin> &Elem) {
107 return Elem.get() == &
P;
109 assert(
I != Plugins.end() &&
"Plugin not present");
114 void emit(std::unique_ptr<MaterializationResponsibility> R,
115 std::unique_ptr<jitlink::LinkGraph>
G)
override;
127 this->OverrideObjectFlags = OverrideObjectFlags;
144 this->AutoClaimObjectSymbols = AutoClaimObjectSymbols;
152 void emit(std::unique_ptr<MaterializationResponsibility> R,
153 std::unique_ptr<jitlink::LinkGraph>
G,
154 std::unique_ptr<MemoryBuffer> ObjBuf);
168 mutable std::mutex LayerMutex;
170 std::unique_ptr<jitlink::JITLinkMemoryManager> MemMgrOwnership;
171 bool OverrideObjectFlags =
false;
172 bool AutoClaimObjectSymbols =
false;
174 std::vector<std::shared_ptr<Plugin>> Plugins;
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
Lightweight error class with error context and mandatory checking.
Holds context for a single jitLink invocation.
Represents a finalized allocation.
Manages allocations of JIT memory.
An ExecutionSession represents a running JIT program.
Represents a JIT'd dynamic library.
Plugin instances can be added to the ObjectLinkingLayer to receive callbacks when code is loaded or e...
virtual Error notifyEmitted(MaterializationResponsibility &MR)
virtual Error notifyRemovingResources(JITDylib &JD, ResourceKey K)=0
virtual Error notifyFailed(MaterializationResponsibility &MR)=0
virtual void notifyMaterializing(MaterializationResponsibility &MR, jitlink::LinkGraph &G, jitlink::JITLinkContext &Ctx, MemoryBufferRef InputObject)
virtual void modifyPassConfig(MaterializationResponsibility &MR, jitlink::LinkGraph &G, jitlink::PassConfiguration &Config)
virtual void notifyTransferringResources(JITDylib &JD, ResourceKey DstKey, ResourceKey SrcKey)=0
LinkGraphLinkingLayer links LinkGraphs into the Executor using JITLink.
LinkGraphLinkingLayer(ExecutionSession &ES, std::unique_ptr< jitlink::JITLinkMemoryManager > MemMgr)
Construct an LinkGraphLinkingLayer.
LinkGraphLinkingLayer & setAutoClaimResponsibilityForObjectSymbols(bool AutoClaimObjectSymbols)
If set, this LinkGraphLinkingLayer instance will claim responsibility for any symbols provided by a g...
void removePlugin(Plugin &P)
Remove a plugin.
void emit(std::unique_ptr< MaterializationResponsibility > R, std::unique_ptr< jitlink::LinkGraph > G) override
Emit a LinkGraph.
LinkGraphLinkingLayer & setOverrideObjectFlagsWithResponsibilityFlags(bool OverrideObjectFlags)
Instructs this LinkgraphLinkingLayer instance to override the symbol flags found in the LinkGraph wit...
std::function< void(std::unique_ptr< MemoryBuffer >)> ReturnObjectBuffer
void emit(std::unique_ptr< MaterializationResponsibility > R, std::unique_ptr< jitlink::LinkGraph > G, std::unique_ptr< MemoryBuffer > ObjBuf)
Emit a LinkGraph with the given backing buffer.
LinkGraphLinkingLayer & addPlugin(std::shared_ptr< Plugin > P)
Add a plugin.
Tracks responsibility for materialization, and mediates interactions between MaterializationUnits and...
Listens for ResourceTracker operations.
This is an optimization pass for GlobalISel generic memory operations.
auto find_if(R &&Range, UnaryPredicate P)
Provide wrappers to std::find_if which take ranges instead of having to pass begin/end explicitly.
An LinkGraph pass configuration, consisting of a list of pre-prune, post-prune, and post-fixup passes...