diff options
author | 2015-05-18 22:31:29 +0100 | |
---|---|---|
committer | 2015-05-29 14:15:04 +0100 | |
commit | d23eeef3492b53102eb8093524cf37e2b4c296db (patch) | |
tree | 57d3e9ab2853d5b8092568bb3d29bc850c113315 /runtime/stack.cc | |
parent | a15c78d3cc28f514a482ffd792a767e97fe53c95 (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.cc | 9 |
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_++; } } } |