diff --git a/llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h b/llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h --- a/llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h @@ -46,7 +46,7 @@ public: /// Function object for receiving object-loaded notifications. - using NotifyLoadedFunction = std::function; + using NotifyLoadedFunction = std::function; /// Function object for receiving finalization notifications. using NotifyEmittedFunction = std::function; @@ -114,6 +114,13 @@ JITTargetAddress EHFrameAddr = 0; }; + void notifyLoaded(VModuleKey K, std::unique_ptr O) { + ObjBuffers.push_back(std::move(O)); // FIXME: avoid deletion + + if (NotifyLoaded) + NotifyLoaded(K, ObjBuffers.back()->getMemBufferRef()); + } + void notifyFinalized(ObjectResources OR) { ObjResources.push_back(std::move(OR)); } @@ -126,6 +133,7 @@ bool OverrideObjectFlags = false; bool AutoClaimObjectSymbols = false; std::vector ObjResources; + std::vector> ObjBuffers; // FIXME: add to ObjResources? }; } // end namespace orc diff --git a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp --- a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp +++ b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp @@ -132,9 +132,7 @@ return notifyFailed(std::move(Err)); MR.resolve(InternedResult); - - if (Layer.NotifyLoaded) - Layer.NotifyLoaded(MR.getVModuleKey()); + Layer.notifyLoaded(MR.getVModuleKey(), std::move(ObjBuffer)); } void notifyFinalized(