From 37ad4b0242579d9a7251c8683eb20645be44cea8 Mon Sep 17 00:00:00 2001 From: Narayan Kamath Date: Mon, 19 Jan 2015 16:05:24 +0000 Subject: Choose the right executable for wrapped applications. 64 bit zygotes should exec app_process64, whereas 32 bit zygotes should exec app_process32. Change-Id: I63b56400e0478cd2bb206c98da6858be558f0525 --- core/java/com/android/internal/os/WrapperInit.java | 16 ++++++++++++++-- core/java/com/android/internal/os/ZygoteConnection.java | 2 ++ core/java/com/android/internal/os/ZygoteInit.java | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) (limited to 'core/java/com') diff --git a/core/java/com/android/internal/os/WrapperInit.java b/core/java/com/android/internal/os/WrapperInit.java index af821ba..34ae58a 100644 --- a/core/java/com/android/internal/os/WrapperInit.java +++ b/core/java/com/android/internal/os/WrapperInit.java @@ -19,6 +19,7 @@ package com.android.internal.os; import android.os.Process; import android.util.Slog; +import dalvik.system.VMRuntime; import java.io.DataOutputStream; import java.io.FileDescriptor; import java.io.FileOutputStream; @@ -96,9 +97,20 @@ public class WrapperInit { * @param args Arguments for {@link RuntimeInit#main}. */ public static void execApplication(String invokeWith, String niceName, - int targetSdkVersion, FileDescriptor pipeFd, String[] args) { + int targetSdkVersion, String instructionSet, FileDescriptor pipeFd, + String[] args) { StringBuilder command = new StringBuilder(invokeWith); - command.append(" /system/bin/app_process /system/bin --application"); + + final String appProcess; + if (VMRuntime.is64BitInstructionSet(instructionSet)) { + appProcess = "/system/bin/app_process64"; + } else { + appProcess = "/system/bin/app_process32"; + } + command.append(' '); + command.append(appProcess); + + command.append(" /system/bin --application"); if (niceName != null) { command.append(" '--nice-name=").append(niceName).append("'"); } diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java index 7fac05b..aba4bd0 100644 --- a/core/java/com/android/internal/os/ZygoteConnection.java +++ b/core/java/com/android/internal/os/ZygoteConnection.java @@ -31,6 +31,7 @@ import android.system.ErrnoException; import android.system.Os; import android.util.Log; import dalvik.system.PathClassLoader; +import dalvik.system.VMRuntime; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -858,6 +859,7 @@ class ZygoteConnection { if (parsedArgs.invokeWith != null) { WrapperInit.execApplication(parsedArgs.invokeWith, parsedArgs.niceName, parsedArgs.targetSdkVersion, + VMRuntime.getCurrentInstructionSet(), pipeFd, parsedArgs.remainingArgs); } else { RuntimeInit.zygoteInit(parsedArgs.targetSdkVersion, diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index b8082e1..8107985 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -437,7 +437,7 @@ public class ZygoteInit { WrapperInit.execApplication(parsedArgs.invokeWith, parsedArgs.niceName, parsedArgs.targetSdkVersion, - null, args); + VMRuntime.getCurrentInstructionSet(), null, args); } else { ClassLoader cl = null; if (systemServerClasspath != null) { -- cgit v1.1