From 163df38bdf365ac743fa0e1067441dc7f0800bed Mon Sep 17 00:00:00 2001 From: Filip Pizlo Date: Wed, 18 Sep 2013 06:37:55 +0000 Subject: Revert r190921. It broke Windows. I'll roll it back in when I have a chance to look at it in detail. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190923 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/DynamicLibrary.cpp | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'lib/Support') diff --git a/lib/Support/DynamicLibrary.cpp b/lib/Support/DynamicLibrary.cpp index c063f5382d..f14cb45d9d 100644 --- a/lib/Support/DynamicLibrary.cpp +++ b/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 // Collection of symbol name/value pairs to be searched prior to any libraries. -static llvm::ManagedStatic > ExplicitSymbols; -static llvm::ManagedStatic > SymbolsMutex; +static llvm::StringMap *ExplicitSymbols = 0; + +namespace { + +struct ExplicitSymbolsDeleter { + ~ExplicitSymbolsDeleter() { + delete ExplicitSymbols; + } +}; + +} + +static ExplicitSymbolsDeleter Dummy; + + +static llvm::sys::SmartMutex& getMutex() { + static llvm::sys::SmartMutex HandlesMutex; + return HandlesMutex; +} void llvm::sys::DynamicLibrary::AddSymbol(StringRef symbolName, void *symbolValue) { - SmartScopedLock lock(*SymbolsMutex); + SmartScopedLock lock(getMutex()); + if (ExplicitSymbols == 0) + ExplicitSymbols = new StringMap(); (*ExplicitSymbols)[symbolName] = symbolValue; } @@ -54,7 +72,7 @@ static DenseSet *OpenedHandles = 0; DynamicLibrary DynamicLibrary::getPermanentLibrary(const char *filename, std::string *errMsg) { - SmartScopedLock lock(*SymbolsMutex); + SmartScopedLock 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 Lock(*SymbolsMutex); + SmartScopedLock Lock(getMutex()); // First check symbols added via AddSymbol(). - if (ExplicitSymbols.isConstructed()) { + if (ExplicitSymbols) { StringMap::iterator i = ExplicitSymbols->find(symbolName); if (i != ExplicitSymbols->end()) -- cgit v1.2.3