From 4cae6f7fd07982a7ec1a69e9ee162373d6c9812f Mon Sep 17 00:00:00 2001 From: Calin Juravle Date: Fri, 14 Feb 2020 14:02:20 -0800 Subject: Pass system server class loader context when asking GetDexOptNeeded Test: reboot and check system server jars are not dexopted Bug: 147208643 Change-Id: I6a612d04b08be23984b04e71e1c8938025d5e4ea --- core/java/com/android/internal/os/ZygoteInit.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 348262e1a9d3..6afdaaaecaed 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -647,17 +647,18 @@ public class ZygoteInit { String classPathForElement = ""; boolean compiledSomething = false; for (String classPathElement : classPathElements) { - // System server is fully AOTed and never profiled - // for profile guided compilation. + // We default to the verify filter because the compilation will happen on /data and + // system server cannot load executable code outside /system. String systemServerFilter = SystemProperties.get( - "dalvik.vm.systemservercompilerfilter", "speed"); + "dalvik.vm.systemservercompilerfilter", "verify"); + String classLoaderContext = + getSystemServerClassLoaderContext(classPathForElement); int dexoptNeeded; try { dexoptNeeded = DexFile.getDexOptNeeded( classPathElement, instructionSet, systemServerFilter, - null /* classLoaderContext */, false /* newProfile */, - false /* downgrade */); + classLoaderContext, false /* newProfile */, false /* downgrade */); } catch (FileNotFoundException ignored) { // Do not add to the classpath. Log.w(TAG, "Missing classpath element for system server: " + classPathElement); @@ -678,8 +679,6 @@ public class ZygoteInit { final String compilerFilter = systemServerFilter; final String uuid = StorageManager.UUID_PRIVATE_INTERNAL; final String seInfo = null; - final String classLoaderContext = - getSystemServerClassLoaderContext(classPathForElement); final int targetSdkVersion = 0; // SystemServer targets the system's SDK version try { installd.dexopt(classPathElement, Process.SYSTEM_UID, packageName, -- cgit v1.2.3-59-g8ed1b