Interpreter.
The opcodes filled-new-array and packed-switch aren't implemented but
are trivial given that they are variants of implemented opcodes.
Refactor Field::Get routines to take the declaring class in the case of
static field accesses. This avoids a check on every use of a field.
Refactor arg array builder to be shared by JNI invokes and invocations
into the interpreter.
Fix benign bug in const decoding in the verifier.
Change-Id: I8dee6c1f4b7f033e6c003422c56e9471cfaccda8
diff --git a/src/runtime.cc b/src/runtime.cc
index 7bc1b70..79d1fb2 100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -191,7 +191,8 @@
if (!tll_already_held || !ml_already_held) {
os << "Dumping all threads without appropriate locks held:"
<< (!tll_already_held ? " thread list lock" : "")
- << (!ml_already_held ? " mutator lock" : "");
+ << (!ml_already_held ? " mutator lock" : "")
+ << "\n";
}
os << "All threads:\n";
Runtime::Current()->GetThreadList()->DumpLocked(os);
@@ -717,8 +718,12 @@
CHECK_EQ(self->GetState(), kNative);
JNIEnv* env = self->GetJniEnv();
- env->CallStaticVoidMethod(WellKnownClasses::java_lang_Daemons, WellKnownClasses::java_lang_Daemons_start);
- CHECK(!env->ExceptionCheck());
+ env->CallStaticVoidMethod(WellKnownClasses::java_lang_Daemons,
+ WellKnownClasses::java_lang_Daemons_start);
+ if (env->ExceptionCheck()) {
+ env->ExceptionDescribe();
+ LOG(FATAL) << "Error starting java.lang.Daemons";
+ }
VLOG(startup) << "Runtime::StartDaemonThreads exiting";
}