summaryrefslogtreecommitdiff
path: root/runtime/stack.cc
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2015-05-18 22:31:29 +0100
committer Nicolas Geoffray <ngeoffray@google.com> 2015-05-29 14:15:04 +0100
commitd23eeef3492b53102eb8093524cf37e2b4c296db (patch)
tree57d3e9ab2853d5b8092568bb3d29bc850c113315 /runtime/stack.cc
parenta15c78d3cc28f514a482ffd792a767e97fe53c95 (diff)
Support for inlining methods that call/throw.
Mostly fixes here and there to make it working. Change-Id: I1b535e895105d78b65634636d675b818551f783e
Diffstat (limited to 'runtime/stack.cc')
-rw-r--r--runtime/stack.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/runtime/stack.cc b/runtime/stack.cc
index f7b96eaf2e..09b56a1181 100644
--- a/runtime/stack.cc
+++ b/runtime/stack.cc
@@ -18,6 +18,7 @@
#include "arch/context.h"
#include "base/hex_dump.h"
+#include "entrypoints/entrypoint_utils-inl.h"
#include "entrypoints/runtime_asm_entrypoints.h"
#include "gc_map.h"
#include "mirror/art_method-inl.h"
@@ -119,8 +120,11 @@ mirror::ArtMethod* StackVisitor::GetMethod() const SHARED_LOCKS_REQUIRED(Locks::
} else if (cur_quick_frame_ != nullptr) {
if (IsInInlinedFrame()) {
size_t depth_in_stack_map = current_inlining_depth_ - 1;
- return GetCurrentQuickFrame()->AsMirrorPtr()->GetDexCacheResolvedMethod(
- GetCurrentInlineInfo().GetMethodIndexAtDepth(depth_in_stack_map));
+ InlineInfo inline_info = GetCurrentInlineInfo();
+ uint32_t method_index = inline_info.GetMethodIndexAtDepth(depth_in_stack_map);
+ InvokeType invoke_type =
+ static_cast<InvokeType>(inline_info.GetInvokeTypeAtDepth(depth_in_stack_map));
+ return GetResolvedMethod(GetCurrentQuickFrame()->AsMirrorPtr(), method_index, invoke_type);
} else {
return cur_quick_frame_->AsMirrorPtr();
}
@@ -761,6 +765,7 @@ void StackVisitor::WalkStack(bool include_transitions) {
if (UNLIKELY(!should_continue)) {
return;
}
+ cur_depth_++;
}
}
}