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
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 1402749..64aab01 100644
--- a/runtime/runtime.cc
+++ b/runtime/runtime.cc
@@ -1270,7 +1270,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.";
@@ -1304,6 +1305,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