summaryrefslogtreecommitdiffstats
path: root/runtime/stack.cc
diff options
context:
space:
mode:
authorJeff Hao <jeffhao@google.com>2013-07-24 13:53:05 -0700
committerJeff Hao <jeffhao@google.com>2013-07-24 13:53:05 -0700
commitfb2802da02337309ac64970e06c90bb3b1b1de3f (patch)
treea4546a7d6bacd83e2b6ae3acd1dec673610a6c23 /runtime/stack.cc
parent8f20ff4354fd3fdd7604a299b7bf4446e5f4584c (diff)
downloadart-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.cc7
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());