From 347b1df98890f843b41123ff3a08e483a4b966f9 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Tue, 20 Dec 2016 14:05:05 +0000 Subject: [PATCH] Introduce DEBUG_JAVA_DEBUGGABLE. For notifying ART it will run a debuggable app. Also rename ENABLE_DEBUGGER to ENABLE_JDWP. Test: builds and runs bug: 28769520 Change-Id: Ic096a176edfd5bf0bbe92b8367fbaa687a07d284 --- core/java/android/os/ZygoteProcess.java | 10 +++++----- core/java/com/android/internal/os/Zygote.java | 6 ++++-- .../android/internal/os/ZygoteConnection.java | 17 ++++++++++------- .../server/am/ActivityManagerService.java | 3 ++- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/core/java/android/os/ZygoteProcess.java b/core/java/android/os/ZygoteProcess.java index 5ac33a1768c29..fa9f394add608 100644 --- a/core/java/android/os/ZygoteProcess.java +++ b/core/java/android/os/ZygoteProcess.java @@ -352,8 +352,8 @@ public class ZygoteProcess { if ((debugFlags & Zygote.DEBUG_ENABLE_SAFEMODE) != 0) { argsForZygote.add("--enable-safemode"); } - if ((debugFlags & Zygote.DEBUG_ENABLE_DEBUGGER) != 0) { - argsForZygote.add("--enable-debugger"); + if ((debugFlags & Zygote.DEBUG_ENABLE_JDWP) != 0) { + argsForZygote.add("--enable-jdwp"); } if ((debugFlags & Zygote.DEBUG_ENABLE_CHECKJNI) != 0) { argsForZygote.add("--enable-checkjni"); @@ -367,6 +367,9 @@ public class ZygoteProcess { if ((debugFlags & Zygote.DEBUG_NATIVE_DEBUGGABLE) != 0) { argsForZygote.add("--native-debuggable"); } + if ((debugFlags & Zygote.DEBUG_JAVA_DEBUGGABLE) != 0) { + argsForZygote.add("--java-debuggable"); + } if ((debugFlags & Zygote.DEBUG_ENABLE_ASSERT) != 0) { argsForZygote.add("--enable-assert"); } @@ -379,9 +382,6 @@ public class ZygoteProcess { } argsForZygote.add("--target-sdk-version=" + targetSdkVersion); - //TODO optionally enable debuger - //argsForZygote.add("--enable-debugger"); - // --setgroups is a comma-separated list if (gids != null && gids.length > 0) { StringBuilder sb = new StringBuilder(); diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java index e1e0a21eb7f55..59416dd06cdc4 100644 --- a/core/java/com/android/internal/os/Zygote.java +++ b/core/java/com/android/internal/os/Zygote.java @@ -33,7 +33,7 @@ public final class Zygote { */ /** enable debugging over JDWP */ - public static final int DEBUG_ENABLE_DEBUGGER = 1; + public static final int DEBUG_ENABLE_JDWP = 1; /** enable JNI checks */ public static final int DEBUG_ENABLE_CHECKJNI = 1 << 1; /** enable Java programming language "assert" statements */ @@ -46,8 +46,10 @@ public final class Zygote { public static final int DEBUG_GENERATE_DEBUG_INFO = 1 << 5; /** Always use JIT-ed code. */ public static final int DEBUG_ALWAYS_JIT = 1 << 6; - /** Make the code debuggable with turning off some optimizations. */ + /** Make the code native debuggable by turning off some optimizations. */ public static final int DEBUG_NATIVE_DEBUGGABLE = 1 << 7; + /** Make the code Java debuggable by turning off some optimizations. */ + public static final int DEBUG_JAVA_DEBUGGABLE = 1 << 8; /** No external storage should be mounted. */ public static final int MOUNT_EXTERNAL_NONE = 0; diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java index 763d3924009ba..4a6475fd0927f 100644 --- a/core/java/com/android/internal/os/ZygoteConnection.java +++ b/core/java/com/android/internal/os/ZygoteConnection.java @@ -336,8 +336,9 @@ class ZygoteConnection { int[] gids; /** - * From --enable-debugger, --enable-checkjni, --enable-assert, - * --enable-safemode, --generate-debug-info and --enable-jni-logging. + * From --enable-jdwp, --enable-checkjni, --enable-assert, + * --enable-safemode, --generate-debug-info, --enable-jni-logging, + * --java-debuggable, and --native-debuggable. */ int debugFlags; @@ -447,8 +448,8 @@ class ZygoteConnection { targetSdkVersionSpecified = true; targetSdkVersion = Integer.parseInt( arg.substring(arg.indexOf('=') + 1)); - } else if (arg.equals("--enable-debugger")) { - debugFlags |= Zygote.DEBUG_ENABLE_DEBUGGER; + } else if (arg.equals("--enable-jdwp")) { + debugFlags |= Zygote.DEBUG_ENABLE_JDWP; } else if (arg.equals("--enable-safemode")) { debugFlags |= Zygote.DEBUG_ENABLE_SAFEMODE; } else if (arg.equals("--enable-checkjni")) { @@ -459,6 +460,8 @@ class ZygoteConnection { debugFlags |= Zygote.DEBUG_ALWAYS_JIT; } else if (arg.equals("--native-debuggable")) { debugFlags |= Zygote.DEBUG_NATIVE_DEBUGGABLE; + } else if (arg.equals("--java-debuggable")) { + debugFlags |= Zygote.DEBUG_JAVA_DEBUGGABLE; } else if (arg.equals("--enable-jni-logging")) { debugFlags |= Zygote.DEBUG_ENABLE_JNI_LOGGING; } else if (arg.equals("--enable-assert")) { @@ -670,14 +673,14 @@ class ZygoteConnection { * Applies debugger system properties to the zygote arguments. * * If "ro.debuggable" is "1", all apps are debuggable. Otherwise, - * the debugger state is specified via the "--enable-debugger" flag + * the debugger state is specified via the "--enable-jdwp" flag * in the spawn request. * * @param args non-null; zygote spawner args */ public static void applyDebuggerSystemProperty(Arguments args) { if (RoSystemProperties.DEBUGGABLE) { - args.debugFlags |= Zygote.DEBUG_ENABLE_DEBUGGER; + args.debugFlags |= Zygote.DEBUG_ENABLE_JDWP; } } @@ -699,7 +702,7 @@ class ZygoteConnection { int peerUid = peer.getUid(); if (args.invokeWith != null && peerUid != 0 && - (args.debugFlags & Zygote.DEBUG_ENABLE_DEBUGGER) == 0) { + (args.debugFlags & Zygote.DEBUG_ENABLE_JDWP) == 0) { throw new ZygoteSecurityException("Peer is permitted to specify an" + "explicit invoke-with wrapper command only for debuggable" + "applications."); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index a2963b89210e4..23d837739bba4 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -3752,7 +3752,8 @@ public final class ActivityManagerService extends ActivityManagerNative } int debugFlags = 0; if ((app.info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { - debugFlags |= Zygote.DEBUG_ENABLE_DEBUGGER; + debugFlags |= Zygote.DEBUG_ENABLE_JDWP; + debugFlags |= Zygote.DEBUG_JAVA_DEBUGGABLE; // Also turn on CheckJNI for debuggable apps. It's quite // awkward to turn on otherwise. debugFlags |= Zygote.DEBUG_ENABLE_CHECKJNI;