diff options
-rw-r--r-- | runtime/art_method-inl.h | 5 | ||||
-rw-r--r-- | runtime/thread.cc | 1 |
2 files changed, 5 insertions, 1 deletions
diff --git a/runtime/art_method-inl.h b/runtime/art_method-inl.h index 5cfce41..28a5e67 100644 --- a/runtime/art_method-inl.h +++ b/runtime/art_method-inl.h @@ -20,6 +20,7 @@ #include "art_method.h" #include "art_field.h" +#include "base/logging.h" #include "dex_file.h" #include "dex_file-inl.h" #include "gc_root-inl.h" @@ -314,7 +315,9 @@ inline uintptr_t ArtMethod::NativeQuickPcOffset(const uintptr_t pc) { inline QuickMethodFrameInfo ArtMethod::GetQuickFrameInfo(const void* code_pointer) { DCHECK(code_pointer != nullptr); - DCHECK_EQ(code_pointer, GetQuickOatCodePointer(sizeof(void*))); + if (kIsDebugBuild && !IsProxyMethod()) { + CHECK_EQ(code_pointer, GetQuickOatCodePointer(sizeof(void*))); + } return reinterpret_cast<const OatQuickMethodHeader*>(code_pointer)[-1].frame_info_; } diff --git a/runtime/thread.cc b/runtime/thread.cc index f314f61..5274f9e 100644 --- a/runtime/thread.cc +++ b/runtime/thread.cc @@ -1048,6 +1048,7 @@ struct StackDumpVisitor : public StackVisitor { if (m->IsRuntimeMethod()) { return true; } + m = m->GetInterfaceMethodIfProxy(sizeof(void*)); const int kMaxRepetition = 3; mirror::Class* c = m->GetDeclaringClass(); mirror::DexCache* dex_cache = c->GetDexCache(); |