aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/System
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-07-07 18:17:07 +0000
committerChris Lattner <sabre@nondot.org>2009-07-07 18:17:07 +0000
commita9b7d60d67b054541cb8507d697eb94beee32f18 (patch)
treec9435c5582bf802d722abc4bbe0e8a3d6972528d /include/llvm/System
parent72501b4a2138fcb32f8a6d71054bb1139d8b04b5 (diff)
downloadexternal_llvm-a9b7d60d67b054541cb8507d697eb94beee32f18.zip
external_llvm-a9b7d60d67b054541cb8507d697eb94beee32f18.tar.gz
external_llvm-a9b7d60d67b054541cb8507d697eb94beee32f18.tar.bz2
Eliminate the static constructors and locks from DynamicLibrary.cpp.
This fixes PR4512 and eliminating static ctors is always good. Losing thread safety is unfortunate, but the code is just incredibly poorly designed. If someone is interested, the "right" solution is to split DynamicLibrary.cpp into two separate pieces: a stateless piece in libsystem, and a simple support file in libsupport that has the "state" (e.g. AddSymbol) in managed static objects. Doing this would both fix memory leaks we already have, as well as make the code thread safe again. it would also make sense to move all the unix specific code in System/DynamicLibrary.cpp into System/Unix/DynamicLibrary.inc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74927 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/System')
-rw-r--r--include/llvm/System/DynamicLibrary.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/include/llvm/System/DynamicLibrary.h b/include/llvm/System/DynamicLibrary.h
index f04734a..ac58407 100644
--- a/include/llvm/System/DynamicLibrary.h
+++ b/include/llvm/System/DynamicLibrary.h
@@ -36,6 +36,9 @@ namespace sys {
/// and will only be unloaded when the program terminates. This returns
/// false on success or returns true and fills in *ErrMsg on failure.
/// @brief Open a dynamic library permanently.
+ ///
+ /// NOTE: This function is not thread safe.
+ ///
static bool LoadLibraryPermanently(const char *filename,
std::string *ErrMsg = 0);
@@ -46,9 +49,15 @@ namespace sys {
/// as ephemerally loaded libraries (constructors).
/// @throws std::string on error.
/// @brief Search through libraries for address of a symbol
+ ///
+ /// NOTE: This function is not thread safe.
+ ///
static void *SearchForAddressOfSymbol(const char *symbolName);
/// @brief Convenience function for C++ophiles.
+ ///
+ /// NOTE: This function is not thread safe.
+ ///
static void *SearchForAddressOfSymbol(const std::string &symbolName) {
return SearchForAddressOfSymbol(symbolName.c_str());
}
@@ -57,9 +66,15 @@ namespace sys {
/// value \p symbolValue. These symbols are searched before any
/// libraries.
/// @brief Add searchable symbol/value pair.
+ ///
+ /// NOTE: This function is not thread safe.
+ ///
static void AddSymbol(const char *symbolName, void *symbolValue);
/// @brief Convenience function for C++ophiles.
+ ///
+ /// NOTE: This function is not thread safe.
+ ///
static void AddSymbol(const std::string &symbolName, void *symbolValue) {
AddSymbol(symbolName.c_str(), symbolValue);
}