Merge ""Revert^4 "Make adbconnection start automatically for debuggable apps (on target)""
diff --git a/cmdline/cmdline_parser_test.cc b/cmdline/cmdline_parser_test.cc
index 235a2aa..a52e163 100644
--- a/cmdline/cmdline_parser_test.cc
+++ b/cmdline/cmdline_parser_test.cc
@@ -371,7 +371,7 @@
*/
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 698fdc0..c4f1989 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 @@
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 a1645cb..3b4d177 100644
--- a/runtime/runtime.cc
+++ b/runtime/runtime.cc
@@ -1283,7 +1283,8 @@
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.";
@@ -1317,6 +1318,11 @@
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 e647423..3f9a322 100644
--- a/runtime/runtime_options.def
+++ b/runtime/runtime_options.def
@@ -44,7 +44,7 @@
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
diff --git a/test/etc/run-test-jar b/test/etc/run-test-jar
index 1ba433e..713fd35 100755
--- a/test/etc/run-test-jar
+++ b/test/etc/run-test-jar
@@ -377,6 +377,9 @@
if [ "$USE_JVM" = "n" ]; then
FLAGS="${FLAGS} ${ANDROID_FLAGS}"
+ # we don't want to be trying to get adbconnections since the plugin might
+ # not have been built.
+ FLAGS="${FLAGS} -XjdwpProvider:none"
for feature in ${EXPERIMENTAL}; do
FLAGS="${FLAGS} -Xexperimental:${feature} -Xcompiler-option --runtime-arg -Xcompiler-option -Xexperimental:${feature}"
COMPILE_FLAGS="${COMPILE_FLAGS} --runtime-arg -Xexperimental:${feature}"
diff --git a/tools/run-jdwp-tests.sh b/tools/run-jdwp-tests.sh
index 0796432..eb33da2 100755
--- a/tools/run-jdwp-tests.sh
+++ b/tools/run-jdwp-tests.sh
@@ -251,6 +251,9 @@
vm_args="${vm_args} --vm-arg -Djpda.settings.debuggeeAgentName=${with_jdwp_path}"
fi
vm_args="$vm_args --vm-arg -Xcompiler-option --vm-arg --debuggable"
+ # we don't want to be trying to connect to adbconnection which might not have
+ # been built.
+ vm_args="${vm_args} --vm-arg -XjdwpProvider:none"
# Make sure the debuggee doesn't clean up what the debugger has generated.
art_debugee="$art_debugee --no-clean"
fi
@@ -327,6 +330,10 @@
if [[ "x$with_jdwp_path" == "x" ]]; then
# Need to enable the internal jdwp implementation.
art_debugee="${art_debugee} -XjdwpProvider:internal"
+ else
+ # need to disable the jdwpProvider since we give the agent explicitly on the
+ # cmdline.
+ art_debugee="${art_debugee} -XjdwpProvider:none"
fi
else
toolchain_args="--toolchain javac --language CUR"