diff options
author | Jeff Hao <jeffhao@google.com> | 2013-07-24 13:53:05 -0700 |
---|---|---|
committer | Jeff Hao <jeffhao@google.com> | 2013-07-24 13:53:05 -0700 |
commit | fb2802da02337309ac64970e06c90bb3b1b1de3f (patch) | |
tree | a4546a7d6bacd83e2b6ae3acd1dec673610a6c23 /runtime/stack.cc | |
parent | 8f20ff4354fd3fdd7604a299b7bf4446e5f4584c (diff) | |
download | art-fb2802da02337309ac64970e06c90bb3b1b1de3f.zip art-fb2802da02337309ac64970e06c90bb3b1b1de3f.tar.gz art-fb2802da02337309ac64970e06c90bb3b1b1de3f.tar.bz2 |
Fixes to instrumentation and quick to interpreter entry.
- Interpreter entry was missing check that a static method is
initialized.
- Fixed instrumentation stack unwinding to not pop off the handler
frame only if it actually exists on the instrumentation stack.
Change-Id: I05a96ea7c0aea4dc6552da0edf485856cd004d85
Diffstat (limited to 'runtime/stack.cc')
-rw-r--r-- | runtime/stack.cc | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/runtime/stack.cc b/runtime/stack.cc index 35cd895..9ce65da 100644 --- a/runtime/stack.cc +++ b/runtime/stack.cc @@ -309,9 +309,12 @@ void StackVisitor::WalkStack(bool include_transitions) { instrumentation::InstrumentationStackFrame instrumentation_frame = GetInstrumentationStackFrame(instrumentation_stack_depth); instrumentation_stack_depth++; - if (instrumentation_frame.interpreter_entry_) { + if (GetMethod() == Runtime::Current()->GetCalleeSaveMethod(Runtime::kSaveAll)) { + // Skip runtime save all callee frames which are used to deliver exceptions. + } else if (instrumentation_frame.interpreter_entry_) { mirror::AbstractMethod* callee = Runtime::Current()->GetCalleeSaveMethod(Runtime::kRefsAndArgs); - CHECK_EQ(GetMethod(), callee); + CHECK_EQ(GetMethod(), callee) << "Expected: " << PrettyMethod(callee) << " Found: " + << PrettyMethod(GetMethod()); } else if (instrumentation_frame.method_ != GetMethod()) { LOG(FATAL) << "Expected: " << PrettyMethod(instrumentation_frame.method_) << " Found: " << PrettyMethod(GetMethod()); |