| Index: base/native_library_posix.cc
|
| diff --git a/base/native_library_posix.cc b/base/native_library_posix.cc
|
| index 2dc434b7be25af2395a80b313defa3e8be08616f..786333e65ae147648309ffb82aaf506616d690c9 100644
|
| --- a/base/native_library_posix.cc
|
| +++ b/base/native_library_posix.cc
|
| @@ -19,16 +19,27 @@ std::string NativeLibraryLoadError::ToString() const {
|
| }
|
|
|
| // static
|
| -NativeLibrary LoadNativeLibrary(const FilePath& library_path,
|
| - NativeLibraryLoadError* error) {
|
| +NativeLibrary LoadNativeLibraryWithOptions(const FilePath& library_path,
|
| + const NativeLibraryOptions& options,
|
| + NativeLibraryLoadError* error) {
|
| // dlopen() opens the file off disk.
|
| ThreadRestrictions::AssertIOAllowed();
|
|
|
| - // We deliberately do not use RTLD_DEEPBIND. For the history why, please
|
| - // refer to the bug tracker. Some useful bug reports to read include:
|
| + // We deliberately do not use RTLD_DEEPBIND by default. For the history why,
|
| + // please refer to the bug tracker. Some useful bug reports to read include:
|
| // http://crbug.com/17943, http://crbug.com/17557, http://crbug.com/36892,
|
| // and http://crbug.com/40794.
|
| - void* dl = dlopen(library_path.value().c_str(), RTLD_LAZY);
|
| + int flags = RTLD_LAZY;
|
| +#if defined(OS_ANDROID)
|
| + // Android dlopen() requires further investigation, as it might vary across
|
| + // versions. Crash here to warn developers that they're trying to rely on
|
| + // uncertain behavior.
|
| + CHECK(!options.prefer_own_symbols);
|
| +#else
|
| + if (options.prefer_own_symbols)
|
| + flags |= RTLD_DEEPBIND;
|
| +#endif
|
| + void* dl = dlopen(library_path.value().c_str(), flags);
|
| if (!dl && error)
|
| error->message = dlerror();
|
|
|
|
|