Fix PR3424, a static constructor ordering issue. Patch by Robert Schuster!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63269 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2009-01-29 04:43:42 +00:00
parent 5a3c6a87b0
commit cee3e7cb68

View File

@@ -18,11 +18,14 @@
#include <map> #include <map>
// Collection of symbol name/value pairs to be searched prior to any libraries. // Collection of symbol name/value pairs to be searched prior to any libraries.
static std::map<std::string, void *> g_symbols; std::map<std::string, void *> &g_symbols() {
static std::map<std::string, void *> symbols;
return symbols;
}
void llvm::sys::DynamicLibrary::AddSymbol(const char* symbolName, void llvm::sys::DynamicLibrary::AddSymbol(const char* symbolName,
void *symbolValue) { 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 // It is not possible to use ltdl.c on VC++ builds as the terms of its LGPL
@@ -76,8 +79,8 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) {
// check_ltdl_initialization(); // check_ltdl_initialization();
// First check symbols added via AddSymbol(). // First check symbols added via AddSymbol().
std::map<std::string, void *>::iterator I = g_symbols.find(symbolName); std::map<std::string, void *>::iterator I = g_symbols().find(symbolName);
if (I != g_symbols.end()) if (I != g_symbols().end())
return I->second; return I->second;
// Now search the libraries. // Now search the libraries.