Go to the documentation of this file.
17 #include "llvm/Config/config.h"
27 typedef std::vector<void *> HandleList;
32 static void *
DLOpen(
const char *Filename, std::string *Err);
33 static void DLClose(
void *Handle);
34 static void *
DLSym(
void *Handle,
const char *
Symbol);
39 HandleList::iterator
Find(
void *Handle) {
return find(Handles, Handle); }
42 return Handle ==
Process ||
Find(Handle) != Handles.end();
45 bool AddLibrary(
void *Handle,
bool IsProcess =
false,
bool CanClose =
true) {
47 assert((Handle ==
this ? IsProcess : !IsProcess) &&
"Bad Handle.");
51 if (
Find(Handle) != Handles.end()) {
56 Handles.push_back(Handle);
73 for (
void *Handle : Handles) {
128 char DynamicLibrary::Invalid;
150 if (Handle != &Invalid) {
152 HS.AddLibrary(Handle, FileName ==
nullptr);
162 if (!OpenedHandles->AddLibrary(Handle,
false,
false))
163 *Err =
"Library already loaded";
179 if (ExplicitSymbols.isConstructed()) {
182 if (
i != ExplicitSymbols->end())
187 if (OpenedHandles.isConstructed()) {
bool Contains(void *Handle)
This is an optimization pass for GlobalISel generic memory operations.
void * getAddressOfSymbol(const char *symbolName)
Searches through the library for the symbol symbolName.
bool AddLibrary(void *Handle, bool IsProcess=false, bool CanClose=true)
static void AddSymbol(StringRef symbolName, void *symbolValue)
This functions permanently adds the symbol symbolName with the value symbolValue.
auto reverse(ContainerTy &&C, std::enable_if_t< has_rbegin< ContainerTy >::value > *=nullptr)
DynamicLibrary(void *data=&Invalid)
@ SO_LoadedFirst
SO_LoadedFirst - Search all loaded libraries, then as SO_Linker would.
static void * DLSym(void *Handle, const char *Symbol)
static DynamicLibrary addPermanentLibrary(void *handle, std::string *errMsg=nullptr)
Registers an externally loaded library.
This class provides a portable interface to dynamic libraries which also might be known as shared lib...
A collection of legacy interfaces for querying information about the current executing process.
void LLVMAddSymbol(const char *symbolName, void *symbolValue)
This functions permanently adds the symbol symbolName with the value symbolValue.
void * Lookup(const char *Symbol, DynamicLibrary::SearchOrdering Order)
static DynamicLibrary getPermanentLibrary(const char *filename, std::string *errMsg=nullptr)
This function permanently loads the dynamic library at the given path.
ManagedStatic - This transparently changes the behavior of global statics to be lazily constructed on...
@ SO_LoadOrder
SO_LoadOrder - Or this in to search libraries in the ordered loaded.
static void * SearchForAddressOfSymbol(const char *symbolName)
This function will search through all previously loaded dynamic libraries for the symbol symbolName.
bool isValid() const
Returns true if the object refers to a valid library.
static void * DLOpen(const char *Filename, std::string *Err)
@ SO_LoadedLast
SO_LoadedLast - Search as SO_Linker would, then loaded libraries.
void * LLVMSearchForAddressOfSymbol(const char *symbolName)
This function will search through all previously loaded dynamic libraries for the symbol symbolName.
auto find(R &&Range, const T &Val)
Provide wrappers to std::find which take ranges instead of having to pass begin/end explicitly.
HandleList::iterator Find(void *Handle)
@ SO_Linker
SO_Linker - Search as a call to dlsym(dlopen(NULL)) would when DynamicLibrary::getPermanentLibrary(NU...
std::lock_guard< SmartMutex< mt_only > > SmartScopedLock
static SearchOrdering SearchOrder
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
void * LibLookup(const char *Symbol, DynamicLibrary::SearchOrdering Order)
StringRef - Represent a constant reference to a string, i.e.
void * SearchForAddressOfSpecialSymbol(const char *SymbolName)
constexpr char SymbolName[]
Key for Kernel::Metadata::mSymbolName.
static void DLClose(void *Handle)
#define LLVM_LIKELY(EXPR)
static bool LoadLibraryPermanently(const char *Filename, std::string *ErrMsg=nullptr)
This function permanently loads the dynamic library at the given path.
LLVMBool LLVMLoadLibraryPermanently(const char *Filename)
This function permanently loads the dynamic library at the given path.