From df5a37efc997288da520ff4889443e3560d95387 Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Mon, 29 Nov 2004 14:11:29 +0000 Subject: [PATCH] Use System/DynamicLibrary instead of Support/DynamicLinker git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18357 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/ExecutionEngine/ExecutionEngine.cpp | 17 ++++++++++++----- .../Interpreter/ExternalFunctions.cpp | 7 ++++--- lib/ExecutionEngine/JIT/Intercept.cpp | 4 ++-- lib/ExecutionEngine/JIT/JIT.cpp | 4 ++-- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/lib/ExecutionEngine/ExecutionEngine.cpp b/lib/ExecutionEngine/ExecutionEngine.cpp index 812bec184d9..e4ff7d4c4b9 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 2f3469ca854..91975547e5f 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 #include #include @@ -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 2eafb75cd0e..93d349ffa5d 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 #include 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 56625d691d8..537ca56e024 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 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"; -- 2.34.1