diff options
author | Chris Lattner <sabre@nondot.org> | 2009-01-29 04:43:42 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-01-29 04:43:42 +0000 |
commit | 4b57e5a5607e249d645c04ffb30128fca95e7ab3 (patch) | |
tree | 85f288dfee6a265604e5cad26a9ce1ee658acec5 /lib/System/DynamicLibrary.cpp | |
parent | 548bc503a39311d62d31b7d07c3da748f5a3961e (diff) | |
download | external_llvm-4b57e5a5607e249d645c04ffb30128fca95e7ab3.zip external_llvm-4b57e5a5607e249d645c04ffb30128fca95e7ab3.tar.gz external_llvm-4b57e5a5607e249d645c04ffb30128fca95e7ab3.tar.bz2 |
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
Diffstat (limited to 'lib/System/DynamicLibrary.cpp')
-rw-r--r-- | lib/System/DynamicLibrary.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/System/DynamicLibrary.cpp b/lib/System/DynamicLibrary.cpp index 970266f..3bf172c 100644 --- a/lib/System/DynamicLibrary.cpp +++ b/lib/System/DynamicLibrary.cpp @@ -18,11 +18,14 @@ #include <map> // 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 *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 @@ -76,8 +79,8 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) { // check_ltdl_initialization(); // First check symbols added via AddSymbol(). - std::map<std::string, void *>::iterator I = g_symbols.find(symbolName); - if (I != g_symbols.end()) + std::map<std::string, void *>::iterator I = g_symbols().find(symbolName); + if (I != g_symbols().end()) return I->second; // Now search the libraries. |