class ObjectLinkingLayer
Declaration
class ObjectLinkingLayer : public RTTIExtends, private ResourceManager { /* full declaration omitted */ };
Description
An ObjectLayer implementation built on JITLink. Clients can use this class to add relocatable object files to an ExecutionSession, and it typically serves as the base layer (underneath a compiling layer like IRCompileLayer) for the rest of the JIT.
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:50
Inherits from: RTTIExtends, ResourceManager
Member Variables
- private std::mutex LayerMutex
- private jitlink::JITLinkMemoryManager& MemMgr
- private std::unique_ptr<jitlink::JITLinkMemoryManager> MemMgrOwnership
- private bool OverrideObjectFlags = false
- private bool AutoClaimObjectSymbols = false
- private llvm::orc::ObjectLinkingLayer:: ReturnObjectBufferFunction ReturnObjectBuffer
- private DenseMap<llvm::orc::ResourceKey, std::vector<FinalizedAlloc>> Allocs
- private std::vector<std::unique_ptr<Plugin>> Plugins
- public static char ID
Method Overview
- public ObjectLinkingLayer(llvm::orc::ExecutionSession & ES, jitlink::JITLinkMemoryManager & MemMgr)
- public ObjectLinkingLayer(llvm::orc::ExecutionSession & ES, std::unique_ptr<jitlink::JITLinkMemoryManager> MemMgr)
- public ObjectLinkingLayer(llvm::orc::ExecutionSession & ES)
- public llvm::Error add(llvm::orc::ResourceTrackerSP, std::unique_ptr<jitlink::LinkGraph> G)
- public llvm::Error add(llvm::orc::JITDylib & JD, std::unique_ptr<jitlink::LinkGraph> G)
- public llvm::orc::ObjectLinkingLayer & addPlugin(std::unique_ptr<Plugin> P)
- public void emit(std::unique_ptr<MaterializationResponsibility> R, std::unique_ptr<MemoryBuffer> O)
- public void emit(std::unique_ptr<MaterializationResponsibility> R, std::unique_ptr<jitlink::LinkGraph> G)
- private llvm::Error handleRemoveResources(llvm::orc::ResourceKey K)
- private void handleTransferResources(llvm::orc::ResourceKey DstKey, llvm::orc::ResourceKey SrcKey)
- private void modifyPassConfig(llvm::orc::MaterializationResponsibility & MR, jitlink::LinkGraph & G, jitlink::PassConfiguration & PassConfig)
- private llvm::Error notifyEmitted(llvm::orc::MaterializationResponsibility & MR, llvm::orc::ObjectLinkingLayer::FinalizedAlloc FA)
- private void notifyLoaded(llvm::orc::MaterializationResponsibility & MR)
- public llvm::orc::ObjectLinkingLayer & setAutoClaimResponsibilityForObjectSymbols(bool AutoClaimObjectSymbols)
- public llvm::orc::ObjectLinkingLayer & setOverrideObjectFlagsWithResponsibilityFlags(bool OverrideObjectFlags)
- public void setReturnObjectBuffer(llvm::orc::ObjectLinkingLayer::ReturnObjectBufferFunction ReturnObjectBuffer)
- public ~ObjectLinkingLayer()
Methods
¶ObjectLinkingLayer(
llvm::orc::ExecutionSession& ES,
jitlink::JITLinkMemoryManager& MemMgr)
ObjectLinkingLayer(
llvm::orc::ExecutionSession& ES,
jitlink::JITLinkMemoryManager& MemMgr)
Description
Construct an ObjectLinkingLayer using a custom memory manager.
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:105
Parameters
¶ObjectLinkingLayer(
llvm::orc::ExecutionSession& ES,
std::unique_ptr<jitlink::JITLinkMemoryManager>
MemMgr)
ObjectLinkingLayer(
llvm::orc::ExecutionSession& ES,
std::unique_ptr<jitlink::JITLinkMemoryManager>
MemMgr)
Description
Construct an ObjectLinkingLayer. Takes ownership of the given JITLinkMemoryManager. This method is a temporary hack to simplify co-existence with RTDyldObjectLinkingLayer (which also owns its allocators).
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:112
Parameters
- llvm::orc::ExecutionSession& ES
- std::unique_ptr<jitlink::JITLinkMemoryManager> MemMgr
¶ObjectLinkingLayer(
llvm::orc::ExecutionSession& ES)
ObjectLinkingLayer(
llvm::orc::ExecutionSession& ES)
Description
Construct an ObjectLinkingLayer using the ExecutorProcessControl instance's memory manager.
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:102
Parameters
¶llvm::Error add(
llvm::orc::ResourceTrackerSP,
std::unique_ptr<jitlink::LinkGraph> G)
llvm::Error add(
llvm::orc::ResourceTrackerSP,
std::unique_ptr<jitlink::LinkGraph> G)
Description
Add a LinkGraph to the JITDylib targeted by the given tracker.
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:133
Parameters
- llvm::orc::ResourceTrackerSP
- std::unique_ptr<jitlink::LinkGraph> G
¶llvm::Error add(
llvm::orc::JITDylib& JD,
std::unique_ptr<jitlink::LinkGraph> G)
llvm::Error add(
llvm::orc::JITDylib& JD,
std::unique_ptr<jitlink::LinkGraph> G)
Description
Add a LinkGraph to the given JITDylib.
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:136
Parameters
- llvm::orc::JITDylib& JD
- std::unique_ptr<jitlink::LinkGraph> G
¶llvm::orc::ObjectLinkingLayer& addPlugin(
std::unique_ptr<Plugin> P)
llvm::orc::ObjectLinkingLayer& addPlugin(
std::unique_ptr<Plugin> P)
Description
Add a pass-config modifier.
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:126
Parameters
- std::unique_ptr<Plugin> P
¶void emit(std::unique_ptr<
MaterializationResponsibility> R,
std::unique_ptr<MemoryBuffer> O)
void emit(std::unique_ptr<
MaterializationResponsibility> R,
std::unique_ptr<MemoryBuffer> O)
Description
Emit an object file.
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:144
Parameters
- std::unique_ptr<MaterializationResponsibility> R
- std::unique_ptr<MemoryBuffer> O
¶void emit(std::unique_ptr<
MaterializationResponsibility> R,
std::unique_ptr<jitlink::LinkGraph> G)
void emit(std::unique_ptr<
MaterializationResponsibility> R,
std::unique_ptr<jitlink::LinkGraph> G)
Description
Emit a LinkGraph.
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:148
Parameters
- std::unique_ptr<MaterializationResponsibility> R
- std::unique_ptr<jitlink::LinkGraph> G
¶llvm::Error handleRemoveResources(
llvm::orc::ResourceKey K)
llvm::Error handleRemoveResources(
llvm::orc::ResourceKey K)
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:191
Parameters
- llvm::orc::ResourceKey K
¶void handleTransferResources(
llvm::orc::ResourceKey DstKey,
llvm::orc::ResourceKey SrcKey)
void handleTransferResources(
llvm::orc::ResourceKey DstKey,
llvm::orc::ResourceKey SrcKey)
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:192
Parameters
- llvm::orc::ResourceKey DstKey
- llvm::orc::ResourceKey SrcKey
¶void modifyPassConfig(
llvm::orc::MaterializationResponsibility& MR,
jitlink::LinkGraph& G,
jitlink::PassConfiguration& PassConfig)
void modifyPassConfig(
llvm::orc::MaterializationResponsibility& MR,
jitlink::LinkGraph& G,
jitlink::PassConfiguration& PassConfig)
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:185
Parameters
- llvm::orc::MaterializationResponsibility& MR
- jitlink::LinkGraph& G
- jitlink::PassConfiguration& PassConfig
¶llvm::Error notifyEmitted(
llvm::orc::MaterializationResponsibility& MR,
llvm::orc::ObjectLinkingLayer::FinalizedAlloc
FA)
llvm::Error notifyEmitted(
llvm::orc::MaterializationResponsibility& MR,
llvm::orc::ObjectLinkingLayer::FinalizedAlloc
FA)
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:189
Parameters
¶void notifyLoaded(
llvm::orc::MaterializationResponsibility& MR)
void notifyLoaded(
llvm::orc::MaterializationResponsibility& MR)
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:188
Parameters
¶llvm::orc::ObjectLinkingLayer&
setAutoClaimResponsibilityForObjectSymbols(
bool AutoClaimObjectSymbols)
llvm::orc::ObjectLinkingLayer&
setAutoClaimResponsibilityForObjectSymbols(
bool AutoClaimObjectSymbols)
Description
If set, this ObjectLinkingLayer instance will claim responsibility for any symbols provided by a given object file that were not already in the MaterializationResponsibility instance. Setting this flag allows higher-level program representations (e.g. LLVM IR) to be added based on only a subset of the symbols they provide, without having to write intervening layers to scan and add the additional symbols. This trades diagnostic quality for convenience however: If all symbols are enumerated up-front then clashes can be detected and reported early (and usually deterministically). If this option is set, clashes for the additional symbols may not be detected until late, and detection may depend on the flow of control through JIT'd code. Use with care.
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:177
Parameters
- bool AutoClaimObjectSymbols
¶llvm::orc::ObjectLinkingLayer&
setOverrideObjectFlagsWithResponsibilityFlags(
bool OverrideObjectFlags)
llvm::orc::ObjectLinkingLayer&
setOverrideObjectFlagsWithResponsibilityFlags(
bool OverrideObjectFlags)
Description
Instructs this ObjectLinkingLayer instance to override the symbol flags found in the AtomGraph with the flags supplied by the MaterializationResponsibility instance. This is a workaround to support symbol visibility in COFF, which does not use the libObject's SF_Exported flag. Use only when generating / adding COFF object files. FIXME: We should be able to remove this if/when COFF properly tracks exported symbols.
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:160
Parameters
- bool OverrideObjectFlags
¶void setReturnObjectBuffer(
llvm::orc::ObjectLinkingLayer::
ReturnObjectBufferFunction
ReturnObjectBuffer)
void setReturnObjectBuffer(
llvm::orc::ObjectLinkingLayer::
ReturnObjectBufferFunction
ReturnObjectBuffer)
Description
Set an object buffer return function. By default object buffers are deleted once the JIT has linked them. If a return function is set then it will be called to transfer ownership of the buffer instead.
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:121
Parameters
- llvm::orc::ObjectLinkingLayer:: ReturnObjectBufferFunction ReturnObjectBuffer
¶~ObjectLinkingLayer()
~ObjectLinkingLayer()
Description
Destruct an ObjectLinkingLayer.
Declared at: llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h:116