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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25805 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jeff Cohen
2006-01-30 04:33:51 +00:00
parent 0e753d617b
commit 85046901b8
3 changed files with 35 additions and 0 deletions

View File

@ -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);