From: Rafael Espindola Date: Tue, 26 Aug 2014 21:04:04 +0000 (+0000) Subject: Give ExecutionEngine of top level buffers. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=af07403c3e22c0a89a98d0ab97359d7f561c1f1c;p=oota-llvm.git Give ExecutionEngine of top level buffers. Long term the idea if for the engine to not own the buffers, but for now this is consistent with the rest of the API. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216484 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/ExecutionEngine/ExecutionEngine.h b/include/llvm/ExecutionEngine/ExecutionEngine.h index aff4c7180cc..10918bd083d 100644 --- a/include/llvm/ExecutionEngine/ExecutionEngine.h +++ b/include/llvm/ExecutionEngine/ExecutionEngine.h @@ -189,6 +189,7 @@ public: /// /// MCJIT will take ownership of the ObjectFile. virtual void addObjectFile(std::unique_ptr O); + virtual void addObjectFile(object::OwningBinary O); /// addArchive - Add an Archive to the execution engine. /// diff --git a/lib/ExecutionEngine/ExecutionEngine.cpp b/lib/ExecutionEngine/ExecutionEngine.cpp index 5d12d69baac..a73d8ca8a2b 100644 --- a/lib/ExecutionEngine/ExecutionEngine.cpp +++ b/lib/ExecutionEngine/ExecutionEngine.cpp @@ -124,6 +124,11 @@ void ExecutionEngine::addObjectFile(std::unique_ptr O) { llvm_unreachable("ExecutionEngine subclass doesn't implement addObjectFile."); } +void +ExecutionEngine::addObjectFile(object::OwningBinary O) { + llvm_unreachable("ExecutionEngine subclass doesn't implement addObjectFile."); +} + void ExecutionEngine::addArchive(object::OwningBinary A) { llvm_unreachable("ExecutionEngine subclass doesn't implement addArchive."); } diff --git a/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/lib/ExecutionEngine/MCJIT/MCJIT.cpp index 9583fb2add6..e7cc12d71eb 100644 --- a/lib/ExecutionEngine/MCJIT/MCJIT.cpp +++ b/lib/ExecutionEngine/MCJIT/MCJIT.cpp @@ -107,8 +107,6 @@ bool MCJIT::removeModule(Module *M) { return OwnedModules.removeModule(M); } - - void MCJIT::addObjectFile(std::unique_ptr Obj) { ObjectImage *LoadedObject = Dyld.loadObject(std::move(Obj)); if (!LoadedObject || Dyld.hasError()) @@ -119,11 +117,15 @@ void MCJIT::addObjectFile(std::unique_ptr Obj) { NotifyObjectEmitted(*LoadedObject); } +void MCJIT::addObjectFile(object::OwningBinary Obj) { + addObjectFile(std::move(Obj.getBinary())); + Buffers.push_back(std::move(Obj.getBuffer())); +} + void MCJIT::addArchive(object::OwningBinary A) { Archives.push_back(std::move(A)); } - void MCJIT::setObjectCache(ObjectCache* NewCache) { MutexGuard locked(lock); ObjCache = NewCache; diff --git a/lib/ExecutionEngine/MCJIT/MCJIT.h b/lib/ExecutionEngine/MCJIT/MCJIT.h index 4bf6d2939e7..e90138473d5 100644 --- a/lib/ExecutionEngine/MCJIT/MCJIT.h +++ b/lib/ExecutionEngine/MCJIT/MCJIT.h @@ -217,6 +217,7 @@ class MCJIT : public ExecutionEngine { OwningModuleContainer OwnedModules; SmallVector, 2> Archives; + SmallVector, 2> Buffers; typedef SmallVector LoadedObjectList; LoadedObjectList LoadedObjects; @@ -240,6 +241,7 @@ public: /// @{ void addModule(std::unique_ptr M) override; void addObjectFile(std::unique_ptr O) override; + void addObjectFile(object::OwningBinary O) override; void addArchive(object::OwningBinary O) override; bool removeModule(Module *M) override; diff --git a/tools/lli/lli.cpp b/tools/lli/lli.cpp index 2713c16fd56..7abbbbbb389 100644 --- a/tools/lli/lli.cpp +++ b/tools/lli/lli.cpp @@ -529,7 +529,6 @@ int main(int argc, char **argv, char * const *envp) { EE->addModule(std::move(XMod)); } - std::vector> Buffers; for (unsigned i = 0, e = ExtraObjects.size(); i != e; ++i) { ErrorOr> Obj = object::ObjectFile::createObjectFile(ExtraObjects[i]); @@ -538,8 +537,7 @@ int main(int argc, char **argv, char * const *envp) { return 1; } object::OwningBinary &O = Obj.get(); - EE->addObjectFile(std::move(O.getBinary())); - Buffers.push_back(std::move(O.getBuffer())); + EE->addObjectFile(std::move(O)); } for (unsigned i = 0, e = ExtraArchives.size(); i != e; ++i) {