diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 10:51:19 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 10:51:19 +0000 |
commit | eb11fae6d08f479c0799db45860a98af528fa6e7 (patch) | |
tree | 44d492a50c8c1a7eb8e2d17ea3360ec4d066f042 /include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h | |
parent | b8a2042aa938069e862750553db0e4d82d25822c (diff) |
Notes
Diffstat (limited to 'include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h')
-rw-r--r-- | include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h | 59 |
1 files changed, 25 insertions, 34 deletions
diff --git a/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h b/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h index 17255954a99f..955e77607a18 100644 --- a/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h +++ b/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h @@ -306,8 +306,7 @@ public: using ObjHandleT = RemoteObjectLayerAPI::ObjHandleT; using RemoteSymbol = RemoteObjectLayerAPI::RemoteSymbol; - using ObjectPtr = - std::shared_ptr<object::OwningBinary<object::ObjectFile>>; + using ObjectPtr = std::unique_ptr<MemoryBuffer>; /// Create a RemoteObjectClientLayer that communicates with a /// RemoteObjectServerLayer instance via the given RPCEndpoint. @@ -323,15 +322,15 @@ public: *this, &ThisT::lookupInLogicalDylib); } - /// @brief Add an object to the JIT. + /// Add an object to the JIT. /// /// @return A handle that can be used to refer to the loaded object (for /// symbol searching, finalization, freeing memory, etc.). Expected<ObjHandleT> - addObject(ObjectPtr Object, std::shared_ptr<JITSymbolResolver> Resolver) { - StringRef ObjBuffer = Object->getBinary()->getData(); + addObject(ObjectPtr ObjBuffer, + std::shared_ptr<LegacyJITSymbolResolver> Resolver) { if (auto HandleOrErr = - this->Remote.template callB<AddObject>(ObjBuffer)) { + this->Remote.template callB<AddObject>(ObjBuffer->getBuffer())) { auto &Handle = *HandleOrErr; // FIXME: Return an error for this: assert(!Resolvers.count(Handle) && "Handle already in use?"); @@ -341,26 +340,26 @@ public: return HandleOrErr.takeError(); } - /// @brief Remove the given object from the JIT. + /// Remove the given object from the JIT. Error removeObject(ObjHandleT H) { return this->Remote.template callB<RemoveObject>(H); } - /// @brief Search for the given named symbol. + /// Search for the given named symbol. JITSymbol findSymbol(StringRef Name, bool ExportedSymbolsOnly) { return remoteToJITSymbol( this->Remote.template callB<FindSymbol>(Name, ExportedSymbolsOnly)); } - /// @brief Search for the given named symbol within the given context. + /// Search for the given named symbol within the given context. JITSymbol findSymbolIn(ObjHandleT H, StringRef Name, bool ExportedSymbolsOnly) { return remoteToJITSymbol( this->Remote.template callB<FindSymbolIn>(H, Name, ExportedSymbolsOnly)); } - /// @brief Immediately emit and finalize the object with the given handle. + /// Immediately emit and finalize the object with the given handle. Error emitAndFinalize(ObjHandleT H) { return this->Remote.template callB<EmitAndFinalize>(H); } @@ -386,7 +385,8 @@ private: } std::map<remote::ResourceIdMgr::ResourceId, - std::shared_ptr<JITSymbolResolver>> Resolvers; + std::shared_ptr<LegacyJITSymbolResolver>> + Resolvers; }; /// RemoteObjectServerLayer acts as a server and handling RPC calls for the @@ -459,30 +459,21 @@ private: Expected<ObjHandleT> addObject(std::string ObjBuffer) { auto Buffer = llvm::make_unique<StringMemoryBuffer>(std::move(ObjBuffer)); - if (auto ObjectOrErr = - object::ObjectFile::createObjectFile(Buffer->getMemBufferRef())) { - auto Object = - std::make_shared<object::OwningBinary<object::ObjectFile>>( - std::move(*ObjectOrErr), std::move(Buffer)); - - auto Id = HandleIdMgr.getNext(); - assert(!BaseLayerHandles.count(Id) && "Id already in use?"); - - auto Resolver = - createLambdaResolver( - [this, Id](const std::string &Name) { return lookup(Id, Name); }, - [this, Id](const std::string &Name) { - return lookupInLogicalDylib(Id, Name); - }); - - if (auto HandleOrErr = - BaseLayer.addObject(std::move(Object), std::move(Resolver))) { - BaseLayerHandles[Id] = std::move(*HandleOrErr); - return Id; - } else - return teeLog(HandleOrErr.takeError()); + auto Id = HandleIdMgr.getNext(); + assert(!BaseLayerHandles.count(Id) && "Id already in use?"); + + auto Resolver = createLambdaResolver( + [this, Id](const std::string &Name) { return lookup(Id, Name); }, + [this, Id](const std::string &Name) { + return lookupInLogicalDylib(Id, Name); + }); + + if (auto HandleOrErr = + BaseLayer.addObject(std::move(Buffer), std::move(Resolver))) { + BaseLayerHandles[Id] = std::move(*HandleOrErr); + return Id; } else - return teeLog(ObjectOrErr.takeError()); + return teeLog(HandleOrErr.takeError()); } Error removeObject(ObjHandleT H) { |