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

Unified Diff: base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java

Issue 551373004: On library load failure, retry without shared RELRO. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update for review feedback Created 6 years, 3 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
« no previous file with comments | « no previous file | base/android/java/src/org/chromium/base/library_loader/Linker.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
index d3cbf35adafe0ced2918a78ab8ea91368c0a72f7..106b207bf3411b65ec03d4f954663e3bed89cc22 100644
--- a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
+++ b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
@@ -148,19 +148,47 @@ public class LibraryLoader {
long startTime = SystemClock.uptimeMillis();
boolean useChromiumLinker = Linker.isUsed();
- if (useChromiumLinker) Linker.prepareLibraryLoad();
+ if (useChromiumLinker) {
+ // Load libraries using the Chromium linker.
+ Linker.prepareLibraryLoad();
- for (String library : NativeLibraries.LIBRARIES) {
- if (useChromiumLinker) {
+ for (String library : NativeLibraries.LIBRARIES) {
+ String zipfile = null;
if (Linker.isInZipFile()) {
- String zipfile = context.getApplicationInfo().sourceDir;
+ zipfile = context.getApplicationInfo().sourceDir;
Log.i(TAG, "Loading " + library + " from within " + zipfile);
- Linker.loadLibraryInZipFile(zipfile, library);
} else {
Log.i(TAG, "Loading: " + library);
- Linker.loadLibrary(library);
}
- } else {
+
+ boolean isLoaded = false;
+ if (Linker.isUsingBrowserSharedRelros()) {
+ try {
+ if (zipfile != null) {
+ Linker.loadLibraryInZipFile(zipfile, library);
+ } else {
+ Linker.loadLibrary(library);
+ }
+ isLoaded = true;
+ } catch (UnsatisfiedLinkError e) {
+ Log.w(TAG, "Failed to load native library with shared RELRO, " +
+ "retrying without");
+ Linker.disableSharedRelros();
+ }
+ }
+ if (!isLoaded) {
+ if (zipfile != null) {
+ Linker.loadLibraryInZipFile(zipfile, library);
+ } else {
+ Linker.loadLibrary(library);
+ }
+ }
+ }
+
+ Linker.finishLibraryLoad();
+ } else {
+ // Load libraries using the system linker.
+ for (String library : NativeLibraries.LIBRARIES) {
try {
System.loadLibrary(library);
} catch (UnsatisfiedLinkError e) {
@@ -174,7 +202,6 @@ public class LibraryLoader {
}
}
}
- if (useChromiumLinker) Linker.finishLibraryLoad();
if (context != null
&& shouldDeleteOldWorkaroundLibraries
« no previous file with comments | « no previous file | base/android/java/src/org/chromium/base/library_loader/Linker.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698