X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FSystem%2FDynamicLibrary.cpp;h=3bf172c22b3f376302cc30365fcc088f5a8376fb;hb=0001e56f15215ae4bc5fffb82eec5c4828b888f0;hp=bdbcbd406fdc703fed083cba1f86b70a19416f3d;hpb=d5f1627d2c6b96a3fc4dc3025043912fb7b00687;p=oota-llvm.git diff --git a/lib/System/DynamicLibrary.cpp b/lib/System/DynamicLibrary.cpp index bdbcbd406fd..3bf172c22b3 100644 --- a/lib/System/DynamicLibrary.cpp +++ b/lib/System/DynamicLibrary.cpp @@ -13,15 +13,19 @@ #include "llvm/System/DynamicLibrary.h" #include "llvm/Config/config.h" +#include #include #include // Collection of symbol name/value pairs to be searched prior to any libraries. -static std::map g_symbols; +std::map &g_symbols() { + static std::map symbols; + return symbols; +} void llvm::sys::DynamicLibrary::AddSymbol(const char* symbolName, void *symbolValue) { - g_symbols[symbolName] = symbolValue; + g_symbols()[symbolName] = symbolValue; } // It is not possible to use ltdl.c on VC++ builds as the terms of its LGPL @@ -50,7 +54,7 @@ using namespace llvm::sys; //static std::vector OpenedHandles; static std::vector OpenedHandles; -DynamicLibrary::DynamicLibrary() : handle(0) {} +DynamicLibrary::DynamicLibrary() {} DynamicLibrary::~DynamicLibrary() { while(!OpenedHandles.empty()) { @@ -61,7 +65,7 @@ DynamicLibrary::~DynamicLibrary() { bool DynamicLibrary::LoadLibraryPermanently(const char *Filename, std::string *ErrMsg) { - void *H = dlopen(Filename, RTLD_LAZY); + void *H = dlopen(Filename, RTLD_LAZY|RTLD_GLOBAL); if (H == 0) { if (ErrMsg) *ErrMsg = dlerror(); @@ -75,8 +79,8 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) { // check_ltdl_initialization(); // First check symbols added via AddSymbol(). - std::map::iterator I = g_symbols.find(symbolName); - if (I != g_symbols.end()) + std::map::iterator I = g_symbols().find(symbolName); + if (I != g_symbols().end()) return I->second; // Now search the libraries. @@ -158,11 +162,4 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) { return 0; } -void *DynamicLibrary::GetAddressOfSymbol(const char *symbolName) { - assert(handle != 0 && "Invalid DynamicLibrary handle"); - return dlsym(handle, symbolName); -} - #endif // LLVM_ON_WIN32 - -DEFINING_FILE_FOR(SystemDynamicLibrary)