summaryrefslogtreecommitdiffstats
path: root/llvm/lib/System/DynamicLibrary.cpp
diff options
context:
space:
mode:
authorJeff Cohen <jeffc@jolt-lang.org>2006-01-30 04:33:51 +0000
committerJeff Cohen <jeffc@jolt-lang.org>2006-01-30 04:33:51 +0000
commitbaeb39c96907b4f1793c766f820b9fe2cad8c2f3 (patch)
tree06ab3bcb1995c374a54bf32c12bd0b9e3ae075ae /llvm/lib/System/DynamicLibrary.cpp
parentd6f5ae44557fbd56edee9d7129f43d71282bafde (diff)
downloadbcm5719-llvm-baeb39c96907b4f1793c766f820b9fe2cad8c2f3.tar.gz
bcm5719-llvm-baeb39c96907b4f1793c766f820b9fe2cad8c2f3.zip
Add AddSymbol() method to DynamicLibrary to work around Windows limitation
of being unable to search for symbols in an EXE. It will also allow other existing hacks to be improved. llvm-svn: 25805
Diffstat (limited to 'llvm/lib/System/DynamicLibrary.cpp')
-rw-r--r--llvm/lib/System/DynamicLibrary.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/System/DynamicLibrary.cpp b/llvm/lib/System/DynamicLibrary.cpp
index 18894cbc87d..0c179fc2f7e 100644
--- a/llvm/lib/System/DynamicLibrary.cpp
+++ b/llvm/lib/System/DynamicLibrary.cpp
@@ -13,6 +13,14 @@
#include "llvm/System/DynamicLibrary.h"
#include "llvm/Config/config.h"
+#include <map>
+
+// Collection of symbol name/value pairs to be searched prior to any libraries.
+static std::map<std::string, void *> g_symbols;
+
+void llvm::sys::DynamicLibrary::AddSymbol(const char* symbolName, void *symbolValue) {
+ g_symbols[symbolName] = symbolValue;
+}
// It is not possible to use ltdl.c on VC++ builds as the terms of its LGPL
// license and special exception would cause all of LLVM to be placed under
@@ -107,6 +115,13 @@ void DynamicLibrary::LoadLibraryPermanently(const char* filename) {
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())
+ return I->second;
+
+ // Now search the libraries.
for (std::vector<lt_dlhandle>::iterator I = OpenedHandles.begin(),
E = OpenedHandles.end(); I != E; ++I) {
lt_ptr ptr = lt_dlsym(*I, symbolName);
OpenPOWER on IntegriCloud