Add internal compiler option to control defaulting of boot.art

Change-Id: I92a46cbd25cfc51c5c5d16fd8ae24c50195bf1d4
diff --git a/src/dex2oat.cc b/src/dex2oat.cc
index a4d7449..16b303e 100644
--- a/src/dex2oat.cc
+++ b/src/dex2oat.cc
@@ -145,6 +145,7 @@
   }
 
   Runtime::Options options;
+  options.push_back(std::make_pair("compiler", reinterpret_cast<void*>(NULL)));
   std::string boot_class_path_string;
   if (boot_image_option.empty()) {
     boot_class_path_string += "-Xbootclasspath:";
diff --git a/src/object.cc b/src/object.cc
index e8aeecd..81c646e 100644
--- a/src/object.cc
+++ b/src/object.cc
@@ -376,7 +376,8 @@
 }
 
 Class* Method::GetReturnType() const {
-  DCHECK(GetDeclaringClass()->IsResolved() || GetDeclaringClass()->IsErroneous());
+  DCHECK(GetDeclaringClass()->IsResolved() || GetDeclaringClass()->IsErroneous())
+      << PrettyMethod(this);
   // Short-cut
   Class* result = GetDexCacheResolvedTypes()->Get(GetReturnTypeIdx());
   if (result == NULL) {
@@ -587,7 +588,7 @@
 uint32_t Method::ToDexPC(const uintptr_t pc) const {
   const uint32_t* mapping_table = GetMappingTable();
   if (mapping_table == NULL) {
-    DCHECK(IsNative());
+    DCHECK(IsNative()) << PrettyMethod(this);
     return DexFile::kDexNoIndex;   // Special no mapping case
   }
   size_t mapping_table_length = GetMappingTableLength();
@@ -698,14 +699,14 @@
 }
 
 void Method::RegisterNative(const void* native_method) {
-  CHECK(IsNative());
-  CHECK(native_method != NULL);
+  CHECK(IsNative()) << PrettyMethod(this);
+  CHECK(native_method != NULL) << PrettyMethod(this);
   SetFieldPtr<const void*>(OFFSET_OF_OBJECT_MEMBER(Method, native_method_),
                            native_method, false);
 }
 
 void Method::UnregisterNative() {
-  CHECK(IsNative());
+  CHECK(IsNative()) << PrettyMethod(this);
   // restore stub to lookup native pointer via dlsym
   RegisterNative(Runtime::Current()->GetJniStubArray()->GetData());
 }
diff --git a/src/runtime.cc b/src/runtime.cc
index dc9d6e7..fd9cc8c 100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -189,6 +189,7 @@
 
 Runtime::ParsedOptions* Runtime::ParsedOptions::Create(const Options& options, bool ignore_unrecognized) {
   UniquePtr<ParsedOptions> parsed(new ParsedOptions());
+  bool compiler = false;
   const char* boot_class_path = getenv("BOOTCLASSPATH");
   if (boot_class_path != NULL) {
     parsed->boot_class_path_ = getenv("BOOTCLASSPATH");
@@ -273,9 +274,10 @@
       parsed->properties_.push_back(option.substr(strlen("-D")).data());
     } else if (option.starts_with("-Xjnitrace:")) {
       parsed->jni_trace_ = option.substr(strlen("-Xjnitrace:")).data();
+    } else if (option == "compiler") {
+      compiler = true;
     } else if (option == "-Xzygote") {
       parsed->is_zygote_ = true;
-      parsed->images_.push_back("/data/art-cache/boot.art");
     } else if (option.starts_with("-verbose:")) {
       std::vector<std::string> verbose_options;
       Split(option.substr(strlen("-verbose:")).data(), ',', verbose_options);
@@ -300,6 +302,10 @@
     }
   }
 
+  if (!compiler && parsed->images_.empty()) {
+    parsed->images_.push_back("/data/art-cache/boot.art");
+  }
+
   LOG(INFO) << "CheckJNI is " << (parsed->check_jni_ ? "on" : "off");
 
   return parsed.release();