20 #include "llvm/Config/config.h"
33 (*ExplicitSymbols)[symbolName] = symbolValue;
36 char llvm::sys::DynamicLibrary::Invalid = 0;
47 using namespace llvm::sys;
57 std::string *errMsg) {
60 void *handle = dlopen(filename, RTLD_LAZY|RTLD_GLOBAL);
62 if (errMsg) *errMsg = dlerror();
70 handle = RTLD_DEFAULT;
87 return dlsym(Data, symbolName);
93 using namespace llvm::sys;
96 std::string *errMsg) {
97 if (errMsg) *errMsg =
"dlopen() not supported on this platform";
118 if (i != ExplicitSymbols->end())
128 void *ptr = dlsym(*
I, symbolName);
140 #define EXPLICIT_SYMBOL(SYM) \
141 if (!strcmp(symbolName, #SYM)) return &SYM
146 #if defined(__linux__) and !defined(__ANDROID__)
167 #undef EXPLICIT_SYMBOL
172 #endif // LLVM_ON_WIN32
bool isConstructed() const
isConstructed - Return true if this object has not been created yet.
static void * SearchForAddressOfSymbol(const char *symbolName)
Search through libraries for address of a symbol.
static llvm::ManagedStatic< llvm::sys::SmartMutex< true > > SymbolsMutex
void * getAddressOfSymbol(const char *symbolName)
static DenseSet< void * > * OpenedHandles
static ManagedStatic< sys::SmartRWMutex< true > > Lock
static void AddSymbol(StringRef symbolName, void *symbolValue)
Add searchable symbol/value pair.
static bool LoadLibraryPermanently(const char *Filename, std::string *ErrMsg=0)
void * SearchForAddressOfSpecialSymbol(const char *symbolName)
#define EXPLICIT_SYMBOL(SYM)
static llvm::ManagedStatic< llvm::StringMap< void * > > ExplicitSymbols
LLVMBool LLVMLoadLibraryPermanently(const char *Filename)
static DynamicLibrary getPermanentLibrary(const char *filename, std::string *errMsg=0)
Open a dynamic library permanently.
const StringRef filename(StringRef path)
Get filename.