summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alex Light <allight@google.com> 2018-06-04 16:17:56 -0700
committer Alex Light <allight@google.com> 2018-06-05 09:35:54 -0700
commit5af3f503f3ad5a24dc1acac3070f7dcda4b6593d (patch)
tree76c3ca01e088b0fd8d1a863dc58ce4a7e22d3a76
parent5ebdc88a8469cb2bb9188c18b379ca486d338728 (diff)
Make adbconnection start automatically for debuggable apps (on target)
With wrap.sh it is required that apps that wish to be debuggable declare that explicitly by adding the '-Xcompiler-option --debuggable' options. When we switched to the new debugger implementation we accidentally added a requirement that you pass -XjdwpProvider:adbconnection. This removes that requirement and returns to the earlier state. Bug: 109505014 Test: Build program with wrap.sh that adds -Xcompiler-option --debuggable Attach debugger to program. Change-Id: I9416ed3b156776439f5bfec032fee3f11fe4eb3c
-rw-r--r--cmdline/cmdline_parser_test.cc2
-rw-r--r--runtime/jdwp_provider.h23
-rw-r--r--runtime/runtime.cc8
-rw-r--r--runtime/runtime_options.def2
4 files changed, 31 insertions, 4 deletions
diff --git a/cmdline/cmdline_parser_test.cc b/cmdline/cmdline_parser_test.cc
index 235a2aa90e..a52e16328a 100644
--- a/cmdline/cmdline_parser_test.cc
+++ b/cmdline/cmdline_parser_test.cc
@@ -371,7 +371,7 @@ TEST_F(CmdlineParserTest, DISABLED_TestXGcOption) {
*/
TEST_F(CmdlineParserTest, TestJdwpProviderEmpty) {
{
- EXPECT_SINGLE_PARSE_DEFAULT_VALUE(JdwpProvider::kNone, "", M::JdwpProvider);
+ EXPECT_SINGLE_PARSE_DEFAULT_VALUE(JdwpProvider::kUnset, "", M::JdwpProvider);
}
} // TEST_F
diff --git a/runtime/jdwp_provider.h b/runtime/jdwp_provider.h
index 698fdc086d..c4f19899c9 100644
--- a/runtime/jdwp_provider.h
+++ b/runtime/jdwp_provider.h
@@ -19,6 +19,7 @@
#include <ios>
+#include "base/globals.h"
#include "base/macros.h"
#include "base/logging.h"
@@ -26,13 +27,33 @@ namespace art {
enum class JdwpProvider {
kNone,
+ // Special value only used to denote that no explicit choice has been made by the user. This
+ // should not be used and one should always call CanonicalizeJdwpProvider which will remove this
+ // value before using a JdwpProvider value.
+ kUnset,
kInternal,
kAdbConnection,
- // The current default provider
+ // The current default provider. Used if you run -XjdwpProvider:default
kDefaultJdwpProvider = kAdbConnection,
+
+ // What we should use as provider with no options and debuggable. On host we always want to be
+ // none since there is no adbd on host.
+ kUnsetDebuggable = kIsTargetBuild ? kDefaultJdwpProvider : kNone,
+ // What we should use as provider with no options and non-debuggable
+ kUnsetNonDebuggable = kNone,
};
+inline JdwpProvider CanonicalizeJdwpProvider(JdwpProvider p, bool debuggable) {
+ if (p != JdwpProvider::kUnset) {
+ return p;
+ }
+ if (debuggable) {
+ return JdwpProvider::kUnsetDebuggable;
+ }
+ return JdwpProvider::kUnsetNonDebuggable;
+}
+
std::ostream& operator<<(std::ostream& os, const JdwpProvider& rhs);
} // namespace art
diff --git a/runtime/runtime.cc b/runtime/runtime.cc
index 14027493d8..64aab01176 100644
--- a/runtime/runtime.cc
+++ b/runtime/runtime.cc
@@ -1270,7 +1270,8 @@ bool Runtime::Init(RuntimeArgumentMap&& runtime_options_in) {
dump_gc_performance_on_shutdown_ = runtime_options.Exists(Opt::DumpGCPerformanceOnShutdown);
jdwp_options_ = runtime_options.GetOrDefault(Opt::JdwpOptions);
- jdwp_provider_ = runtime_options.GetOrDefault(Opt::JdwpProvider);
+ jdwp_provider_ = CanonicalizeJdwpProvider(runtime_options.GetOrDefault(Opt::JdwpProvider),
+ IsJavaDebuggable());
switch (jdwp_provider_) {
case JdwpProvider::kNone: {
VLOG(jdwp) << "Disabling all JDWP support.";
@@ -1304,6 +1305,11 @@ bool Runtime::Init(RuntimeArgumentMap&& runtime_options_in) {
constexpr const char* plugin_name = kIsDebugBuild ? "libadbconnectiond.so"
: "libadbconnection.so";
plugins_.push_back(Plugin::Create(plugin_name));
+ break;
+ }
+ case JdwpProvider::kUnset: {
+ LOG(FATAL) << "Illegal jdwp provider " << jdwp_provider_ << " was not filtered out!";
+ break;
}
}
callbacks_->AddThreadLifecycleCallback(Dbg::GetThreadLifecycleCallback());
diff --git a/runtime/runtime_options.def b/runtime/runtime_options.def
index e647423b9c..3f9a3229ca 100644
--- a/runtime/runtime_options.def
+++ b/runtime/runtime_options.def
@@ -44,7 +44,7 @@ RUNTIME_OPTIONS_KEY (std::string, Image)
RUNTIME_OPTIONS_KEY (Unit, CheckJni)
RUNTIME_OPTIONS_KEY (Unit, JniOptsForceCopy)
RUNTIME_OPTIONS_KEY (std::string, JdwpOptions, "")
-RUNTIME_OPTIONS_KEY (JdwpProvider, JdwpProvider, JdwpProvider::kNone)
+RUNTIME_OPTIONS_KEY (JdwpProvider, JdwpProvider, JdwpProvider::kUnset)
RUNTIME_OPTIONS_KEY (MemoryKiB, MemoryMaximumSize, gc::Heap::kDefaultMaximumSize) // -Xmx
RUNTIME_OPTIONS_KEY (MemoryKiB, MemoryInitialSize, gc::Heap::kDefaultInitialSize) // -Xms
RUNTIME_OPTIONS_KEY (MemoryKiB, HeapGrowthLimit) // Default is 0 for unlimited