| Index: content/public/android/java/src/org/chromium/content/app/ChildProcessService.java
 | 
| diff --git a/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java b/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java
 | 
| index 3d85310926cb657db415002f0e5e2b7bc5eb8090..d5ab06d4fe56c84cd80be76133e1ffd986d1faaf 100644
 | 
| --- a/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java
 | 
| +++ b/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java
 | 
| @@ -52,9 +52,13 @@ public class ChildProcessService extends Service {
 | 
|      // Pairs IDs and file descriptors that should be registered natively.
 | 
|      private ArrayList<Integer> mFileIds;
 | 
|      private ArrayList<ParcelFileDescriptor> mFileFds;
 | 
| +    // Linker-specific parameters for this child process service.
 | 
| +    private LinkerParams mLinkerParams;
 | 
|  
 | 
|      private static AtomicReference<Context> sContext = new AtomicReference<Context>(null);
 | 
|      private boolean mLibraryInitialized = false;
 | 
| +    // Becomes true once the service is bound. Access must synchronize around mMainThread.
 | 
| +    private boolean mIsBound = false;
 | 
|  
 | 
|      // Binder object used by clients for this service.
 | 
|      private final IChildProcessService.Stub mBinder = new IChildProcessService.Stub() {
 | 
| @@ -89,6 +93,11 @@ public class ChildProcessService extends Service {
 | 
|                              + ChildProcessConnection.EXTRA_FILES_ID_SUFFIX;
 | 
|                      mFileIds.add(args.getInt(idName));
 | 
|                  }
 | 
| +                Bundle sharedRelros = args.getBundle(Linker.EXTRA_LINKER_SHARED_RELROS);
 | 
| +                if (sharedRelros != null) {
 | 
| +                    Linker.useSharedRelros(sharedRelros);
 | 
| +                    sharedRelros = null;
 | 
| +                }
 | 
|                  mMainThread.notifyAll();
 | 
|              }
 | 
|              return Process.myPid();
 | 
| @@ -112,6 +121,22 @@ public class ChildProcessService extends Service {
 | 
|              @Override
 | 
|              public void run()  {
 | 
|                  try {
 | 
| +                    boolean useLinker = Linker.isUsed();
 | 
| +
 | 
| +                    if (useLinker) {
 | 
| +                        synchronized (mMainThread) {
 | 
| +                            while (!mIsBound)
 | 
| +                                mMainThread.wait();
 | 
| +                        }
 | 
| +                        if (mLinkerParams != null) {
 | 
| +                            if (mLinkerParams.mWaitForSharedRelro)
 | 
| +                                Linker.initServiceProcess(mLinkerParams.mBaseLoadAddress);
 | 
| +                            else
 | 
| +                                Linker.disableSharedRelros();
 | 
| +
 | 
| +                            Linker.setTestRunnerClassName(mLinkerParams.mTestRunnerClassName);
 | 
| +                        }
 | 
| +                    }
 | 
|                      try {
 | 
|                          LibraryLoader.loadNow();
 | 
|                      } catch (ProcessInitException e) {
 | 
| @@ -188,6 +213,10 @@ public class ChildProcessService extends Service {
 | 
|          synchronized (mMainThread) {
 | 
|              mCommandLineParams = intent.getStringArrayExtra(
 | 
|                      ChildProcessConnection.EXTRA_COMMAND_LINE);
 | 
| +            mLinkerParams = null;
 | 
| +            if (Linker.isUsed())
 | 
| +                mLinkerParams = new LinkerParams(intent);
 | 
| +            mIsBound = true;
 | 
|              mMainThread.notifyAll();
 | 
|          }
 | 
|  
 | 
| 
 |