diff options
author | Lang Hames <lhames@gmail.com> | 2013-12-07 04:25:19 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2013-12-07 04:25:19 +0000 |
commit | 567befd88fd6e21ab9c02c5db51a753b9430dc68 (patch) | |
tree | 3db9b3f5c5daf9894e1cc5512baf6e31308b56f3 /llvm/lib/ExecutionEngine/MCJIT | |
parent | 2ce64a7d9e2dd1fa614680da69dafbe682687e13 (diff) | |
download | bcm5719-llvm-567befd88fd6e21ab9c02c5db51a753b9430dc68.tar.gz bcm5719-llvm-567befd88fd6e21ab9c02c5db51a753b9430dc68.zip |
Revert r196639 while I investigate a bot failure.
llvm-svn: 196641
Diffstat (limited to 'llvm/lib/ExecutionEngine/MCJIT')
-rw-r--r-- | llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp | 56 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/MCJIT/MCJIT.h | 8 |
2 files changed, 7 insertions, 57 deletions
diff --git a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp index 2076a94b80b..8d9c33f49a3 100644 --- a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp +++ b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp @@ -21,7 +21,6 @@ #include "llvm/IR/Function.h" #include "llvm/IR/Module.h" #include "llvm/MC/MCAsmInfo.h" -#include "llvm/Object/Archive.h" #include "llvm/Support/DynamicLibrary.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/MemoryBuffer.h" @@ -79,24 +78,15 @@ MCJIT::~MCJIT() { Modules.clear(); Dyld.deregisterEHFrames(); - LoadedObjectList::iterator it, end; - for (it = LoadedObjects.begin(), end = LoadedObjects.end(); it != end; ++it) { - ObjectImage *Obj = *it; + LoadedObjectMap::iterator it, end = LoadedObjects.end(); + for (it = LoadedObjects.begin(); it != end; ++it) { + ObjectImage *Obj = it->second; if (Obj) { NotifyFreeingObject(*Obj); delete Obj; } } LoadedObjects.clear(); - - - SmallVector<object::Archive *, 2>::iterator ArIt, ArEnd; - for (ArIt = Archives.begin(), ArEnd = Archives.end(); ArIt != ArEnd; ++ArIt) { - object::Archive *A = *ArIt; - delete A; - } - Archives.clear(); - delete TM; } @@ -112,21 +102,6 @@ bool MCJIT::removeModule(Module *M) { -void MCJIT::addObjectFile(object::ObjectFile *Obj) { - ObjectImage *LoadedObject = Dyld.loadObject(Obj); - if (!LoadedObject) - report_fatal_error(Dyld.getErrorString()); - - LoadedObjects.push_back(LoadedObject); - - NotifyObjectEmitted(*LoadedObject); -} - -void MCJIT::addArchive(object::Archive *A) { - Archives.push_back(A); -} - - void MCJIT::setObjectCache(ObjectCache* NewCache) { MutexGuard locked(lock); ObjCache = NewCache; @@ -196,9 +171,9 @@ void MCJIT::generateCodeForModule(Module *M) { } // Load the object into the dynamic linker. - // MCJIT now owns the ObjectImage pointer (via its LoadedObjects list). + // MCJIT now owns the ObjectImage pointer (via its LoadedObjects map). ObjectImage *LoadedObject = Dyld.loadObject(ObjectToLoad.take()); - LoadedObjects.push_back(LoadedObject); + LoadedObjects[M] = LoadedObject; if (!LoadedObject) report_fatal_error(Dyld.getErrorString()); @@ -296,27 +271,6 @@ uint64_t MCJIT::getSymbolAddress(const std::string &Name, if (Addr) return Addr; - SmallVector<object::Archive*, 2>::iterator I, E; - for (I = Archives.begin(), E = Archives.end(); I != E; ++I) { - object::Archive *A = *I; - // Look for our symbols in each Archive - object::Archive::child_iterator ChildIt = A->findSym(Name); - if (ChildIt != A->end_children()) { - OwningPtr<object::Binary> ChildBin; - // FIXME: Support nested archives? - if (!ChildIt->getAsBinary(ChildBin) && ChildBin->isObject()) { - object::ObjectFile *OF = reinterpret_cast<object::ObjectFile *>( - ChildBin.take()); - // This causes the object file to be loaded. - addObjectFile(OF); - // The address should be here now. - Addr = getExistingSymbolAddress(Name); - if (Addr) - return Addr; - } - } - } - // If it hasn't already been generated, see if it's in one of our modules. Module *M = findModuleForSymbol(Name, CheckFunctionsOnly); if (!M) diff --git a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.h b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.h index f45e869cd5f..86b478bff56 100644 --- a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.h +++ b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.h @@ -206,10 +206,8 @@ class MCJIT : public ExecutionEngine { OwningModuleContainer OwnedModules; - SmallVector<object::Archive*, 2> Archives; - - typedef SmallVector<ObjectImage *, 2> LoadedObjectList; - LoadedObjectList LoadedObjects; + typedef DenseMap<Module *, ObjectImage *> LoadedObjectMap; + LoadedObjectMap LoadedObjects; // An optional ObjectCache to be notified of compiled objects and used to // perform lookup of pre-compiled code to avoid re-compilation. @@ -229,8 +227,6 @@ public: /// @name ExecutionEngine interface implementation /// @{ virtual void addModule(Module *M); - virtual void addObjectFile(object::ObjectFile *O); - virtual void addArchive(object::Archive *O); virtual bool removeModule(Module *M); /// FindFunctionNamed - Search all of the active modules to find the one that |