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
///
/// MCJIT will take ownership of the ObjectFile.
virtual void addObjectFile(std::unique_ptr<object::ObjectFile> O);
+ virtual void addObjectFile(object::OwningBinary<object::ObjectFile> O);
/// addArchive - Add an Archive to the execution engine.
///
llvm_unreachable("ExecutionEngine subclass doesn't implement addObjectFile.");
}
+void
+ExecutionEngine::addObjectFile(object::OwningBinary<object::ObjectFile> O) {
+ llvm_unreachable("ExecutionEngine subclass doesn't implement addObjectFile.");
+}
+
void ExecutionEngine::addArchive(object::OwningBinary<object::Archive> A) {
llvm_unreachable("ExecutionEngine subclass doesn't implement addArchive.");
}
return OwnedModules.removeModule(M);
}
-
-
void MCJIT::addObjectFile(std::unique_ptr<object::ObjectFile> Obj) {
ObjectImage *LoadedObject = Dyld.loadObject(std::move(Obj));
if (!LoadedObject || Dyld.hasError())
NotifyObjectEmitted(*LoadedObject);
}
+void MCJIT::addObjectFile(object::OwningBinary<object::ObjectFile> Obj) {
+ addObjectFile(std::move(Obj.getBinary()));
+ Buffers.push_back(std::move(Obj.getBuffer()));
+}
+
void MCJIT::addArchive(object::OwningBinary<object::Archive> A) {
Archives.push_back(std::move(A));
}
-
void MCJIT::setObjectCache(ObjectCache* NewCache) {
MutexGuard locked(lock);
ObjCache = NewCache;
OwningModuleContainer OwnedModules;
SmallVector<object::OwningBinary<object::Archive>, 2> Archives;
+ SmallVector<std::unique_ptr<MemoryBuffer>, 2> Buffers;
typedef SmallVector<ObjectImage *, 2> LoadedObjectList;
LoadedObjectList LoadedObjects;
/// @{
void addModule(std::unique_ptr<Module> M) override;
void addObjectFile(std::unique_ptr<object::ObjectFile> O) override;
+ void addObjectFile(object::OwningBinary<object::ObjectFile> O) override;
void addArchive(object::OwningBinary<object::Archive> O) override;
bool removeModule(Module *M) override;
EE->addModule(std::move(XMod));
}
- std::vector<std::unique_ptr<MemoryBuffer>> Buffers;
for (unsigned i = 0, e = ExtraObjects.size(); i != e; ++i) {
ErrorOr<object::OwningBinary<object::ObjectFile>> Obj =
object::ObjectFile::createObjectFile(ExtraObjects[i]);
return 1;
}
object::OwningBinary<object::ObjectFile> &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) {