Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(690)

Unified Diff: third_party/android_crazy_linker/src/src/crazy_linker_library_list.cpp

Issue 1100763002: Inject CanAddURLToHistory into TopSitesImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@prefs
Patch Set: Fix error introduced during rebase Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/android_crazy_linker/src/src/crazy_linker_library_list.cpp
diff --git a/third_party/android_crazy_linker/src/src/crazy_linker_library_list.cpp b/third_party/android_crazy_linker/src/src/crazy_linker_library_list.cpp
index 5a8b042ba3a74f4bdb13d88bd7f32a6624d64579..04af62412e113e65f3bca93d7d1de8485975c94e 100644
--- a/third_party/android_crazy_linker/src/src/crazy_linker_library_list.cpp
+++ b/third_party/android_crazy_linker/src/src/crazy_linker_library_list.cpp
@@ -21,6 +21,9 @@ namespace crazy {
namespace {
+// From android.os.Build.VERSION_CODES.LOLLIPOP.
+static const int SDK_VERSION_CODE_LOLLIPOP = 21;
+
// Page size for alignment in a zip file.
const size_t kZipAlignmentPageSize = 4096;
COMPILE_ASSERT(kZipAlignmentPageSize % PAGE_SIZE == 0,
@@ -61,8 +64,8 @@ struct SymbolLookupState {
LibraryList::LibraryList() : head_(0), has_error_(false) {
const int sdk_build_version = *Globals::GetSDKBuildVersion();
- // If SDK version is Lollipop, we need to load anything listed in
- // LD_PRELOAD explicitly, because dlsym() on the main executable
+ // If SDK version is Lollipop or earlier, we need to load anything
+ // listed in LD_PRELOAD explicitly, because dlsym() on the main executable
// fails to lookup in preloads on those releases. Also, when doing our
// symbol resolution we need to explicity search preloads *before* we
// search the main executable, to ensure that preloads override symbols
@@ -76,15 +79,9 @@ LibraryList::LibraryList() : head_(0), has_error_(false) {
// of them for us, and so by not loading preloads here our preloads list
// remains empty, so that searching it for name lookups is a no-op.
//
- // If SDK version is earlier than Lollipop then we also do nothing.
- // Pre-Lollipop platforms arguably have the same dlsym() issue, but for
- // now we disable the dlsym() workround in order to try and address
- // crbug/479220.
- //
// For more, see:
// https://code.google.com/p/android/issues/detail?id=74255
- // https://code.google.com/p/chromium/issues/detail?id=479220
- if (sdk_build_version == SDK_VERSION_CODE_LOLLIPOP)
+ if (sdk_build_version <= SDK_VERSION_CODE_LOLLIPOP)
LoadPreloads();
}
@@ -138,6 +135,7 @@ void LibraryList::LoadPreloads() {
0U /* file offset */,
&search_path_list,
no_map_exec_support_fallback_enabled,
+ true /* is_dependency_or_preload */,
&error);
if (!preload) {
LOG("'%s' cannot be preloaded: ignored\n", lib_name.c_str());
@@ -318,6 +316,7 @@ LibraryView* LibraryList::LoadLibrary(const char* lib_name,
off_t file_offset,
SearchPathList* search_path_list,
bool no_map_exec_support_fallback_enabled,
+ bool is_dependency_or_preload,
Error* error) {
const char* base_name = GetBaseNamePtr(lib_name);
@@ -347,9 +346,10 @@ LibraryView* LibraryList::LoadLibrary(const char* lib_name,
return wrap;
}
- if (IsSystemLibrary(lib_name)) {
- // This is a system library, probably because we're loading the
- // library as a dependency.
+ // If this load is prompted by either dependencies or preloads, open
+ // normally with dlopen() and do not proceed to try and load the library
+ // crazily.
+ if (is_dependency_or_preload) {
LOG("%s: Loading system library '%s'\n", __FUNCTION__, lib_name);
::dlerror();
void* system_lib = dlopen(lib_name, dlopen_mode);
@@ -415,6 +415,7 @@ LibraryView* LibraryList::LoadLibrary(const char* lib_name,
0U /* file offset */,
search_path_list,
no_map_exec_support_fallback_enabled,
+ true /* is_dependency_or_preload */,
&dep_error);
if (!dependency) {
error->Format("When loading %s: %s", base_name, dep_error.c_str());
@@ -530,6 +531,7 @@ LibraryView* LibraryList::LoadLibraryInZipFile(
uintptr_t load_address,
SearchPathList* search_path_list,
bool no_map_exec_support_fallback_enabled,
+ bool is_dependency_or_preload,
Error* error) {
int offset = FindMappableLibraryInZipFile(zip_file_path, lib_name, error);
if (offset == CRAZY_OFFSET_FAILED) {
@@ -538,7 +540,8 @@ LibraryView* LibraryList::LoadLibraryInZipFile(
return LoadLibrary(
zip_file_path, dlopen_flags, load_address, offset,
- search_path_list, no_map_exec_support_fallback_enabled, error);
+ search_path_list, no_map_exec_support_fallback_enabled,
+ is_dependency_or_preload, error);
}
void LibraryList::AddLibrary(LibraryView* wrap) {

Powered by Google App Engine
This is Rietveld 408576698