Add internal compiler option to control defaulting of boot.art

Change-Id: I92a46cbd25cfc51c5c5d16fd8ae24c50195bf1d4
diff --git a/Android.mk b/Android.mk
index 5b1d13b..61e5e9a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -146,7 +146,7 @@
 test-art-target-oat-process-am: $(call art-cache-oat,system/framework/am.jar) test-art-target-sync
 	adb remount
 	adb sync
-	adb shell sh -c "export CLASSPATH=/system/framework/am.jar && oat_processd /system/bin/app_process -Ximage:$(ART_CACHE_DIR)/boot.art /system/bin com.android.commands.am.Am start http://android.com && touch $(ART_TEST_DIR)/test-art-target-process-am"
+	adb shell sh -c "export CLASSPATH=/system/framework/am.jar && oat_processd /system/bin/app_process /system/bin com.android.commands.am.Am start http://android.com && touch $(ART_TEST_DIR)/test-art-target-process-am"
 	$(hide) (adb pull $(ART_TEST_DIR)/test-art-target-process-am /tmp/ && echo test-art-target-process-am PASSED) || echo test-art-target-process-am FAILED
 	$(hide) rm /tmp/test-art-target-process-am
 
@@ -168,7 +168,7 @@
 	  sleep 30; \
 	fi
 	adb shell kill `adb shell ps | fgrep com.android.calculator2 | sed -e 's/[^ ]* *\([0-9]*\).*/\1/'`
-	adb shell sh -c "export CLASSPATH=/system/framework/am.jar && oat_processd /system/bin/app_process -Ximage:$(ART_CACHE_DIR)/boot.art /system/bin com.android.commands.am.Am start -a android.intent.action.MAIN -n com.android.calculator2/.Calculator && touch $(ART_TEST_DIR)/test-art-target-process-Calculator"
+	adb shell sh -c "export CLASSPATH=/system/framework/am.jar && oat_processd /system/bin/app_process /system/bin com.android.commands.am.Am start -a android.intent.action.MAIN -n com.android.calculator2/.Calculator && touch $(ART_TEST_DIR)/test-art-target-process-Calculator"
 	$(hide) (adb pull $(ART_TEST_DIR)/test-art-target-process-Calculator /tmp/ && echo test-art-target-process-Calculator PASSED) || echo test-art-target-process-Calculator FAILED
 	$(hide) rm /tmp/test-art-target-process-Calculator
 
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();