aboutsummaryrefslogtreecommitdiff
path: root/lib/ExecutionEngine
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ExecutionEngine')
-rw-r--r--lib/ExecutionEngine/ExecutionEngine.cpp17
-rw-r--r--lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp7
-rw-r--r--lib/ExecutionEngine/JIT/Intercept.cpp4
-rw-r--r--lib/ExecutionEngine/JIT/JIT.cpp4
4 files changed, 20 insertions, 12 deletions
diff --git a/lib/ExecutionEngine/ExecutionEngine.cpp b/lib/ExecutionEngine/ExecutionEngine.cpp
index 812bec184d..e4ff7d4c4b 100644
--- a/lib/ExecutionEngine/ExecutionEngine.cpp
+++ b/lib/ExecutionEngine/ExecutionEngine.cpp
@@ -19,13 +19,13 @@
#include "llvm/DerivedTypes.h"
#include "llvm/Module.h"
#include "llvm/ModuleProvider.h"
+#include "llvm/ADT/Statistic.h"
#include "llvm/CodeGen/IntrinsicLowering.h"
#include "llvm/ExecutionEngine/ExecutionEngine.h"
#include "llvm/ExecutionEngine/GenericValue.h"
-#include "llvm/Target/TargetData.h"
#include "llvm/Support/Debug.h"
-#include "llvm/ADT/Statistic.h"
-#include "llvm/Support/DynamicLinker.h"
+#include "llvm/System/DynamicLibrary.h"
+#include "llvm/Target/TargetData.h"
using namespace llvm;
namespace {
@@ -151,7 +151,13 @@ ExecutionEngine *ExecutionEngine::create(ModuleProvider *MP,
}
}
- if (EE == 0) delete IL;
+ if (EE == 0)
+ delete IL;
+ else
+ // Make sure we can resolve symbols in the program as well. The zero arg
+ // to the function tells DynamicLibrary to load the program, not a library.
+ sys::DynamicLibrary::LoadLibraryPermanently(0);
+
return EE;
}
@@ -502,7 +508,8 @@ void ExecutionEngine::emitGlobals() {
} else {
// External variable reference. Try to use the dynamic loader to
// get a pointer to it.
- if (void *SymAddr = GetAddressOfSymbol(I->getName().c_str()))
+ if (void *SymAddr = sys::DynamicLibrary::SearchForAddressOfSymbol(
+ I->getName().c_str()))
addGlobalMapping(I, SymAddr);
else {
std::cerr << "Could not resolve external global address: "
diff --git a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
index 2f3469ca85..91975547e5 100644
--- a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
+++ b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
@@ -22,8 +22,8 @@
#include "Interpreter.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Module.h"
+#include "llvm/System/DynamicLibrary.h"
#include "llvm/Target/TargetData.h"
-#include "llvm/Support/DynamicLinker.h"
#include <cmath>
#include <csignal>
#include <map>
@@ -71,11 +71,12 @@ static ExFunc lookupFunction(const Function *F) {
ExFunc FnPtr = FuncNames[ExtName];
if (FnPtr == 0)
- FnPtr = (ExFunc)GetAddressOfSymbol(ExtName);
+ FnPtr = (ExFunc)sys::DynamicLibrary::SearchForAddressOfSymbol(ExtName);
if (FnPtr == 0)
FnPtr = FuncNames["lle_X_"+F->getName()];
if (FnPtr == 0) // Try calling a generic function... if it exists...
- FnPtr = (ExFunc)GetAddressOfSymbol(("lle_X_"+F->getName()).c_str());
+ FnPtr = (ExFunc)sys::DynamicLibrary::SearchForAddressOfSymbol(
+ ("lle_X_"+F->getName()).c_str());
if (FnPtr != 0)
Functions.insert(std::make_pair(F, FnPtr)); // Cache for later
return FnPtr;
diff --git a/lib/ExecutionEngine/JIT/Intercept.cpp b/lib/ExecutionEngine/JIT/Intercept.cpp
index 2eafb75cd0..93d349ffa5 100644
--- a/lib/ExecutionEngine/JIT/Intercept.cpp
+++ b/lib/ExecutionEngine/JIT/Intercept.cpp
@@ -16,7 +16,7 @@
//===----------------------------------------------------------------------===//
#include "JIT.h"
-#include "llvm/Support/DynamicLinker.h"
+#include "llvm/System/DynamicLibrary.h"
#include <iostream>
#include <sys/stat.h>
using namespace llvm;
@@ -96,7 +96,7 @@ void *JIT::getPointerToNamedFunction(const std::string &Name) {
if (Name == "__main") return (void*)&__mainFunc;
// If it's an external function, look it up in the process image...
- void *Ptr = GetAddressOfSymbol(Name);
+ void *Ptr = sys::DynamicLibrary::SearchForAddressOfSymbol(Name);
if (Ptr) return Ptr;
std::cerr << "ERROR: Program used external function '" << Name
diff --git a/lib/ExecutionEngine/JIT/JIT.cpp b/lib/ExecutionEngine/JIT/JIT.cpp
index 56625d691d..537ca56e02 100644
--- a/lib/ExecutionEngine/JIT/JIT.cpp
+++ b/lib/ExecutionEngine/JIT/JIT.cpp
@@ -22,9 +22,9 @@
#include "llvm/CodeGen/MachineCodeEmitter.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/ExecutionEngine/GenericValue.h"
+#include "llvm/System/DynamicLibrary.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetJITInfo.h"
-#include "llvm/Support/DynamicLinker.h"
#include <iostream>
using namespace llvm;
@@ -287,7 +287,7 @@ void *JIT::getOrEmitGlobalVariable(const GlobalVariable *GV) {
// If the global is external, just remember the address.
if (GV->isExternal()) {
- Ptr = GetAddressOfSymbol(GV->getName().c_str());
+ Ptr = sys::DynamicLibrary::SearchForAddressOfSymbol(GV->getName().c_str());
if (Ptr == 0) {
std::cerr << "Could not resolve external global address: "
<< GV->getName() << "\n";