diff options
author | Filip Pizlo <fpizlo@apple.com> | 2013-09-18 06:37:55 +0000 |
---|---|---|
committer | Filip Pizlo <fpizlo@apple.com> | 2013-09-18 06:37:55 +0000 |
commit | 591f15411a454f4f53016964114a6b6b549d9f0a (patch) | |
tree | 63bfbe3e033d0603969fa5ef0d6fe8ef3ba4d9d8 /llvm/lib/Support/DynamicLibrary.cpp | |
parent | 33be5e0e5c607bc0a7f837c394b667afb821827e (diff) | |
download | bcm5719-llvm-591f15411a454f4f53016964114a6b6b549d9f0a.tar.gz bcm5719-llvm-591f15411a454f4f53016964114a6b6b549d9f0a.zip |
Revert r190921. It broke Windows.
I'll roll it back in when I have a chance to look at it in detail.
llvm-svn: 190923
Diffstat (limited to 'llvm/lib/Support/DynamicLibrary.cpp')
-rw-r--r-- | llvm/lib/Support/DynamicLibrary.cpp | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/llvm/lib/Support/DynamicLibrary.cpp b/llvm/lib/Support/DynamicLibrary.cpp index c063f5382d1..f14cb45d9dc 100644 --- a/llvm/lib/Support/DynamicLibrary.cpp +++ b/llvm/lib/Support/DynamicLibrary.cpp @@ -14,7 +14,6 @@ //===----------------------------------------------------------------------===// #include "llvm/Support/DynamicLibrary.h" -#include "llvm/Support/ManagedStatic.h" #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/StringMap.h" #include "llvm/Config/config.h" @@ -23,12 +22,31 @@ #include <cstring> // Collection of symbol name/value pairs to be searched prior to any libraries. -static llvm::ManagedStatic<llvm::StringMap<void *> > ExplicitSymbols; -static llvm::ManagedStatic<llvm::sys::SmartMutex<true> > SymbolsMutex; +static llvm::StringMap<void *> *ExplicitSymbols = 0; + +namespace { + +struct ExplicitSymbolsDeleter { + ~ExplicitSymbolsDeleter() { + delete ExplicitSymbols; + } +}; + +} + +static ExplicitSymbolsDeleter Dummy; + + +static llvm::sys::SmartMutex<true>& getMutex() { + static llvm::sys::SmartMutex<true> HandlesMutex; + return HandlesMutex; +} void llvm::sys::DynamicLibrary::AddSymbol(StringRef symbolName, void *symbolValue) { - SmartScopedLock<true> lock(*SymbolsMutex); + SmartScopedLock<true> lock(getMutex()); + if (ExplicitSymbols == 0) + ExplicitSymbols = new StringMap<void*>(); (*ExplicitSymbols)[symbolName] = symbolValue; } @@ -54,7 +72,7 @@ static DenseSet<void *> *OpenedHandles = 0; DynamicLibrary DynamicLibrary::getPermanentLibrary(const char *filename, std::string *errMsg) { - SmartScopedLock<true> lock(*SymbolsMutex); + SmartScopedLock<true> lock(getMutex()); void *handle = dlopen(filename, RTLD_LAZY|RTLD_GLOBAL); if (handle == 0) { @@ -108,10 +126,10 @@ void *SearchForAddressOfSpecialSymbol(const char* symbolName); } void* DynamicLibrary::SearchForAddressOfSymbol(const char *symbolName) { - SmartScopedLock<true> Lock(*SymbolsMutex); + SmartScopedLock<true> Lock(getMutex()); // First check symbols added via AddSymbol(). - if (ExplicitSymbols.isConstructed()) { + if (ExplicitSymbols) { StringMap<void *>::iterator i = ExplicitSymbols->find(symbolName); if (i != ExplicitSymbols->end()) |