summaryrefslogtreecommitdiff
path: root/lib/ExecutionEngine/MCJIT/MCJIT.cpp
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2013-12-07 04:25:19 +0000
committerLang Hames <lhames@gmail.com>2013-12-07 04:25:19 +0000
commita49701db7d54967aea8a511743fedcfb9b056eea (patch)
treedab70cd2963ff5ea01065de2243e1ed0b2363c03 /lib/ExecutionEngine/MCJIT/MCJIT.cpp
parentd4ef813fd5efc03775fea5694b06c126e429de2d (diff)
downloadllvm-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/MCJIT.cpp')
-rw-r--r--lib/ExecutionEngine/MCJIT/MCJIT.cpp56
1 files changed, 5 insertions, 51 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)