Chromium Code Reviews| Index: base/android/java/src/org/chromium/base/library_loader/Linker.java |
| diff --git a/base/android/java/src/org/chromium/base/library_loader/Linker.java b/base/android/java/src/org/chromium/base/library_loader/Linker.java |
| index 8ad26d8a8391237e3dd60511487f10842deee12b..b6466a2cdb3fee7a07a2c1636ecc48749eaef0fc 100644 |
| --- a/base/android/java/src/org/chromium/base/library_loader/Linker.java |
| +++ b/base/android/java/src/org/chromium/base/library_loader/Linker.java |
| @@ -158,7 +158,7 @@ public class Linker { |
| private static final String TAG = "chromium_android_linker"; |
| // Set to true to enable debug logs. |
| - private static final boolean DEBUG = false; |
| + public static final boolean DEBUG = false; |
| // Constants used to control the behaviour of the browser process with |
| // regards to the shared RELRO section. |
| @@ -702,7 +702,8 @@ public class Linker { |
| * Load a native shared library with the Chromium linker. |
| * The shared library is uncompressed and page aligned inside the zipfile. |
| * Note the crazy linker treats libraries and files as equivalent, |
| - * so you can only open one library in a given zip file. |
| + * so you can only open one library in a given zip file. The library must |
| + * not be the Chromium linker library. |
| * |
| * @param zipfile The filename of the zipfile contain the library. |
| * @param library The library's base name. |
| @@ -712,7 +713,8 @@ public class Linker { |
| } |
| /** |
| - * Load a native shared library with the Chromium linker. |
| + * Load a native shared library with the Chromium linker. The library must |
| + * not be the Chromium linker library. |
| * |
| * @param library The library's base name. |
| */ |
| @@ -723,15 +725,7 @@ public class Linker { |
| private static void loadLibraryMaybeInZipFile( |
| @Nullable String zipFile, String library) { |
| if (DEBUG) Log.i(TAG, "loadLibrary: " + library); |
| - |
| - // Don't self-load the linker. This is because the build system is |
| - // not clever enough to understand that all the libraries packaged |
| - // in the final .apk don't need to be explicitly loaded. |
| - // Also deal with the component build that adds a .cr suffix to the name. |
| - if (library.equals(TAG) || library.equals(TAG + ".cr")) { |
| - if (DEBUG) Log.i(TAG, "ignoring self-linker load"); |
| - return; |
| - } |
| + assert !isLinkerLibrary(library); |
| synchronized (Linker.class) { |
| ensureInitializedLocked(); |
| @@ -821,6 +815,14 @@ public class Linker { |
| } |
| /** |
| + * Determine whether a library is the linker library. Also deal with the |
| + * component build that adds a .cr suffix to the name. |
| + */ |
| + public static boolean isLinkerLibrary(String library) { |
|
rmcilroy
2014/10/28 13:07:15
nit - isChromiumLinkerLibrary
petrcermak
2014/10/28 13:48:15
Done.
|
| + return library.equals(TAG) || library.equals(TAG + ".cr"); |
| + } |
| + |
| + /** |
| * Check whether the device supports loading a library directly from the APK file. |
| * |
| * @param apkFile Filename of the APK. |
| @@ -840,6 +842,25 @@ public class Linker { |
| } |
| /** |
| + * Check whether a library is page aligned in the APK file. |
| + * |
| + * @param apkFile Filename of the APK. |
| + * @param library The library's base name. |
| + * @return true if page aligned. |
| + */ |
| + public static boolean checkLibraryAlignedInApk(String apkFile, String library) { |
| + synchronized (Linker.class) { |
| + ensureInitializedLocked(); |
| + |
| + if (DEBUG) Log.i(TAG, "checkLibraryAlignedInApk: " + apkFile + ", " + library); |
| + boolean aligned = nativeCheckLibraryAlignedInApk(apkFile, library); |
| + if (DEBUG) Log.i(TAG, library + " is " + (aligned ? "" : "NOT ") + |
| + "page aligned in " + apkFile); |
| + return aligned; |
| + } |
| + } |
| + |
| + /** |
| * Move activity from the native thread to the main UI thread. |
| * Called from native code on its own thread. Posts a callback from |
| * the UI thread back to native code. |
| @@ -942,11 +963,19 @@ public class Linker { |
| * |
| * @param apkFile Filename of the APK. |
| * @return true if supported. |
| - * |
| */ |
| private static native boolean nativeCheckLibraryLoadFromApkSupport(String apkFile); |
| /** |
| + * Native method which checks whether a library is page aligned in the APK file. |
| + * |
| + * @param apkFile Filename of the APK. |
| + * @param library The library's base name. |
| + * @return true if page aligned. |
| + */ |
| + private static native boolean nativeCheckLibraryAlignedInApk(String apkFile, String library); |
| + |
| + /** |
| * Record information for a given library. |
| * IMPORTANT: Native code knows about this class's fields, so |
| * don't change them without modifying the corresponding C++ sources. |