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();