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:
Zachary Turner 2014-08-27 17:06:22 +00:00
parent 5e487f8dc7
commit 70d2d3cd45

View File

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