Index: content/public/android/java/src/org/chromium/content/browser/ChildProcessConnection.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnection.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnection.java |
index 9715f6368742f364525ceefd0af6e26262dc1dd6..388a0f94cde4586440edd9ec4c2030a57f1a97ac 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnection.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnection.java |
@@ -14,6 +14,7 @@ import android.os.Handler; |
import android.os.IBinder; |
import android.os.Looper; |
import android.os.ParcelFileDescriptor; |
+import android.os.RemoteException; |
import android.util.Log; |
import java.io.IOException; |
@@ -21,9 +22,11 @@ import java.util.concurrent.atomic.AtomicBoolean; |
import org.chromium.base.CalledByNative; |
import org.chromium.base.CpuFeatures; |
+import org.chromium.base.Linker; |
import org.chromium.base.SysUtils; |
import org.chromium.base.ThreadUtils; |
import org.chromium.content.app.ChildProcessService; |
+import org.chromium.content.app.LibraryLoader; |
import org.chromium.content.common.CommandLine; |
import org.chromium.content.common.IChildProcessCallback; |
import org.chromium.content.common.IChildProcessService; |
@@ -87,6 +90,9 @@ public class ChildProcessConnection { |
public static final String EXTRA_CPU_FEATURES = |
"com.google.android.apps.chrome.extra.cpu_features"; |
+ public static final String EXTRA_CHROME_LINKER_ADDRESS = |
+ "com.google.android.apps.chrome.extra.crazy_linker_address"; |
+ |
private final Context mContext; |
private final int mServiceNumber; |
private final boolean mInSandbox; |
@@ -160,6 +166,9 @@ public class ChildProcessConnection { |
if (commandLine != null) { |
intent.putExtra(EXTRA_COMMAND_LINE, commandLine); |
} |
+ if (LibraryLoader.useCrazyLinker()) { |
+ intent.putExtra(EXTRA_CHROME_LINKER_ADDRESS, Linker.getBaseLoadAddress()); |
+ } |
mBound = mContext.bindService(intent, this, mBindFlags); |
if (mBound && mProtectsFromOom && mConnectionCallbacks != null) { |
mConnectionCallbacks.onOomBindingAdded(getPid()); |
@@ -413,6 +422,15 @@ public class ChildProcessConnection { |
TraceEvent.end(); |
} |
+ public void applyRelro(Bundle relroBundle) { |
+ if (mService != null && relroBundle != null) |
+ try { |
+ mService.applyRelro(relroBundle); |
+ } catch (RemoteException e) { |
+ // Nothing to do if the child process died. |
+ } |
+ } |
+ |
private static final long REMOVE_INITIAL_BINDING_DELAY_MILLIS = 1 * 1000; // One second. |
/** |