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 | a49701db7d54967aea8a511743fedcfb9b056eea (patch) | |
tree | dab70cd2963ff5ea01065de2243e1ed0b2363c03 /lib/ExecutionEngine/MCJIT | |
parent | d4ef813fd5efc03775fea5694b06c126e429de2d (diff) | |
download | llvm-a49701db7d54967aea8a511743fedcfb9b056eea.tar.gz llvm-a49701db7d54967aea8a511743fedcfb9b056eea.tar.bz2 llvm-a49701db7d54967aea8a511743fedcfb9b056eea.tar.xz |
Revert r196639 while I investigate a bot failure.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196641 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/MCJIT')
-rw-r--r-- | lib/ExecutionEngine/MCJIT/MCJIT.cpp | 56 | ||||
-rw-r--r-- | lib/ExecutionEngine/MCJIT/MCJIT.h | 8 |
2 files changed, 7 insertions, 57 deletions
diff --git a/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/lib/ExecutionEngine/MCJIT/MCJIT.cpp index 2076a94b80..8d9c33f49a 100644 --- a/lib/ExecutionEngine/MCJIT/MCJIT.cpp +++ b/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/lib/ExecutionEngine/MCJIT/MCJIT.h b/lib/ExecutionEngine/MCJIT/MCJIT.h index f45e869cd5..86b478bff5 100644 --- a/lib/ExecutionEngine/MCJIT/MCJIT.h +++ b/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 |