From e77ea6b07e23c38706476fb41d210e4102ffa7eb Mon Sep 17 00:00:00 2001 From: Filip Pizlo Date: Wed, 18 Sep 2013 06:03:27 +0000 Subject: Make DynamicLibrary use ManagedStatic. This is pretty simple and should just work as advertised - but it does have the caveat that calls to DynamicLibrary::AddSymbol will "reset" if you shutdown llvm and try to come back for seconds. This is a subtle behavior change, but I'm assuming that nobody is affected by it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190921 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/DynamicLibrary.cpp | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-) (limited to 'lib/Support/DynamicLibrary.cpp') diff --git a/lib/Support/DynamicLibrary.cpp b/lib/Support/DynamicLibrary.cpp index f14cb45..c063f53 100644 --- a/lib/Support/DynamicLibrary.cpp +++ b/lib/Support/DynamicLibrary.cpp @@ -14,6 +14,7 @@ //===----------------------------------------------------------------------===// #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" @@ -22,31 +23,12 @@ #include // Collection of symbol name/value pairs to be searched prior to any libraries. -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; -} +static llvm::ManagedStatic > ExplicitSymbols; +static llvm::ManagedStatic > SymbolsMutex; void llvm::sys::DynamicLibrary::AddSymbol(StringRef symbolName, void *symbolValue) { - SmartScopedLock lock(getMutex()); - if (ExplicitSymbols == 0) - ExplicitSymbols = new StringMap(); + SmartScopedLock lock(*SymbolsMutex); (*ExplicitSymbols)[symbolName] = symbolValue; } @@ -72,7 +54,7 @@ static DenseSet *OpenedHandles = 0; DynamicLibrary DynamicLibrary::getPermanentLibrary(const char *filename, std::string *errMsg) { - SmartScopedLock lock(getMutex()); + SmartScopedLock lock(*SymbolsMutex); void *handle = dlopen(filename, RTLD_LAZY|RTLD_GLOBAL); if (handle == 0) { @@ -126,10 +108,10 @@ void *SearchForAddressOfSpecialSymbol(const char* symbolName); } void* DynamicLibrary::SearchForAddressOfSymbol(const char *symbolName) { - SmartScopedLock Lock(getMutex()); + SmartScopedLock Lock(*SymbolsMutex); // First check symbols added via AddSymbol(). - if (ExplicitSymbols) { + if (ExplicitSymbols.isConstructed()) { StringMap::iterator i = ExplicitSymbols->find(symbolName); if (i != ExplicitSymbols->end()) -- cgit v1.1 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/DynamicLibrary.cpp') diff --git a/lib/Support/DynamicLibrary.cpp b/lib/Support/DynamicLibrary.cpp index c063f53..f14cb45 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.1 From b4b9b3b24c03f414c54f55e1b34b4d9124c55883 Mon Sep 17 00:00:00 2001 From: Filip Pizlo Date: Wed, 18 Sep 2013 16:40:14 +0000 Subject: Make DynamicLibrary use ManagedStatic. This is pretty simple and should just work as advertised - but it does have the caveat that calls to DynamicLibrary::AddSymbol will "reset" if you shutdown llvm and try to come back for seconds. This is a subtle behavior change, but I'm assuming that nobody is affected by it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190946 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/DynamicLibrary.cpp | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-) (limited to 'lib/Support/DynamicLibrary.cpp') diff --git a/lib/Support/DynamicLibrary.cpp b/lib/Support/DynamicLibrary.cpp index f14cb45..c063f53 100644 --- a/lib/Support/DynamicLibrary.cpp +++ b/lib/Support/DynamicLibrary.cpp @@ -14,6 +14,7 @@ //===----------------------------------------------------------------------===// #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" @@ -22,31 +23,12 @@ #include // Collection of symbol name/value pairs to be searched prior to any libraries. -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; -} +static llvm::ManagedStatic > ExplicitSymbols; +static llvm::ManagedStatic > SymbolsMutex; void llvm::sys::DynamicLibrary::AddSymbol(StringRef symbolName, void *symbolValue) { - SmartScopedLock lock(getMutex()); - if (ExplicitSymbols == 0) - ExplicitSymbols = new StringMap(); + SmartScopedLock lock(*SymbolsMutex); (*ExplicitSymbols)[symbolName] = symbolValue; } @@ -72,7 +54,7 @@ static DenseSet *OpenedHandles = 0; DynamicLibrary DynamicLibrary::getPermanentLibrary(const char *filename, std::string *errMsg) { - SmartScopedLock lock(getMutex()); + SmartScopedLock lock(*SymbolsMutex); void *handle = dlopen(filename, RTLD_LAZY|RTLD_GLOBAL); if (handle == 0) { @@ -126,10 +108,10 @@ void *SearchForAddressOfSpecialSymbol(const char* symbolName); } void* DynamicLibrary::SearchForAddressOfSymbol(const char *symbolName) { - SmartScopedLock Lock(getMutex()); + SmartScopedLock Lock(*SymbolsMutex); // First check symbols added via AddSymbol(). - if (ExplicitSymbols) { + if (ExplicitSymbols.isConstructed()) { StringMap::iterator i = ExplicitSymbols->find(symbolName); if (i != ExplicitSymbols->end()) -- cgit v1.1 From 87265f9792a59b7107bd30fb6f114f5ce5e1273c Mon Sep 17 00:00:00 2001 From: Peter Zotov Date: Wed, 6 Nov 2013 09:21:31 +0000 Subject: [llvm-c] Expose LLVMLoadLibraryPermanently Original patch by Chris Wailes git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194139 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/DynamicLibrary.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'lib/Support/DynamicLibrary.cpp') diff --git a/lib/Support/DynamicLibrary.cpp b/lib/Support/DynamicLibrary.cpp index c063f53..f58a1f1 100644 --- a/lib/Support/DynamicLibrary.cpp +++ b/lib/Support/DynamicLibrary.cpp @@ -19,6 +19,7 @@ #include "llvm/ADT/StringMap.h" #include "llvm/Config/config.h" #include "llvm/Support/Mutex.h" +#include "llvm-c/Core.h" #include #include @@ -169,3 +170,11 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char *symbolName) { } #endif // LLVM_ON_WIN32 + +//===----------------------------------------------------------------------===// +// C API. +//===----------------------------------------------------------------------===// + +LLVMBool LLVMLoadLibraryPermanently(const char* Filename) { + return sys::DynamicLibrary::LoadLibraryPermanently(Filename); +} \ No newline at end of file -- cgit v1.1 From 92198d4f0a7da1173e937a7a500a4bf9a553ea34 Mon Sep 17 00:00:00 2001 From: Peter Zotov Date: Wed, 6 Nov 2013 09:45:58 +0000 Subject: [llvm-c] Specify explicit namespace in LLVMLoadLibraryPermanently Presence of using namespace llvm depended on several #ifdef's, and this broke the build on mswin32. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194142 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/DynamicLibrary.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/Support/DynamicLibrary.cpp') diff --git a/lib/Support/DynamicLibrary.cpp b/lib/Support/DynamicLibrary.cpp index f58a1f1..3feb5ad 100644 --- a/lib/Support/DynamicLibrary.cpp +++ b/lib/Support/DynamicLibrary.cpp @@ -176,5 +176,5 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char *symbolName) { //===----------------------------------------------------------------------===// LLVMBool LLVMLoadLibraryPermanently(const char* Filename) { - return sys::DynamicLibrary::LoadLibraryPermanently(Filename); + return llvm::sys::DynamicLibrary::LoadLibraryPermanently(Filename); } \ No newline at end of file -- cgit v1.1 From 54edcc2682e6710a85271e0439735ddbd5a1526e Mon Sep 17 00:00:00 2001 From: Peter Zotov Date: Wed, 6 Nov 2013 11:12:46 +0000 Subject: Add newline at EOF in DynamicLibrary.cpp git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194144 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/DynamicLibrary.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/Support/DynamicLibrary.cpp') diff --git a/lib/Support/DynamicLibrary.cpp b/lib/Support/DynamicLibrary.cpp index 3feb5ad..e149dc4 100644 --- a/lib/Support/DynamicLibrary.cpp +++ b/lib/Support/DynamicLibrary.cpp @@ -177,4 +177,4 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char *symbolName) { LLVMBool LLVMLoadLibraryPermanently(const char* Filename) { return llvm::sys::DynamicLibrary::LoadLibraryPermanently(Filename); -} \ No newline at end of file +} -- cgit v1.1 From 43a0f3959e00ad8ab455d1e32a54a45c39a7ee8a Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Wed, 13 Nov 2013 15:35:13 +0000 Subject: Make sure LLVMLoadLibraryPermanently gets an extern "C" symbol. Otherwise it's impossible to use it. Also don't include C++ headers in a C header. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194581 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/DynamicLibrary.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/Support/DynamicLibrary.cpp') diff --git a/lib/Support/DynamicLibrary.cpp b/lib/Support/DynamicLibrary.cpp index e149dc4..a825c68 100644 --- a/lib/Support/DynamicLibrary.cpp +++ b/lib/Support/DynamicLibrary.cpp @@ -19,7 +19,7 @@ #include "llvm/ADT/StringMap.h" #include "llvm/Config/config.h" #include "llvm/Support/Mutex.h" -#include "llvm-c/Core.h" +#include "llvm-c/Support.h" #include #include -- cgit v1.1