mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-13 14:46:53 +00:00
Limit the symbol search in DynamicLibrary to the module that was opened.
Differential Revision: http://reviews.llvm.org/D5030 Reviewed By: Reid Kleckner, Rafael Espindola git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216563 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5e487f8dc7
commit
70d2d3cd45
@ -56,8 +56,15 @@ static DenseSet<void *> *OpenedHandles = nullptr;
|
|||||||
DynamicLibrary DynamicLibrary::getPermanentLibrary(const char *filename,
|
DynamicLibrary DynamicLibrary::getPermanentLibrary(const char *filename,
|
||||||
std::string *errMsg) {
|
std::string *errMsg) {
|
||||||
SmartScopedLock<true> lock(*SymbolsMutex);
|
SmartScopedLock<true> lock(*SymbolsMutex);
|
||||||
|
int flags = RTLD_LAZY | RTLD_GLOBAL;
|
||||||
void *handle = dlopen(filename, RTLD_LAZY|RTLD_GLOBAL);
|
#if defined(__APPLE__)
|
||||||
|
// RTLD_FIRST is an apple specific flag which causes dlsym() to search only
|
||||||
|
// the module specified in |filename|, and not dependent modules. This
|
||||||
|
// behavior would be desirable for other platforms as well, except that
|
||||||
|
// there's not a good way to implement it.
|
||||||
|
flags |= RTLD_FIRST;
|
||||||
|
#endif
|
||||||
|
void *handle = dlopen(filename, flags);
|
||||||
if (!handle) {
|
if (!handle) {
|
||||||
if (errMsg) *errMsg = dlerror();
|
if (errMsg) *errMsg = dlerror();
|
||||||
return DynamicLibrary();
|
return DynamicLibrary();
|
||||||
|
Loading…
Reference in New Issue
Block a user