diff options
author | Hiroshi Yamauchi <yamauchi@google.com> | 2014-08-22 11:13:12 -0700 |
---|---|---|
committer | Hiroshi Yamauchi <yamauchi@google.com> | 2014-08-22 11:13:12 -0700 |
commit | dc3761719fb5e2d1ced5708e3c73b965f9ef0c73 (patch) | |
tree | 84d499b1be46896793bdfebe6f83bf8ca275d50b /runtime/quick_exception_handler.cc | |
parent | a37ad7a6caad2e0a83c72c1103015202cbcaf1a4 (diff) | |
download | android_art-dc3761719fb5e2d1ced5708e3c73b965f9ef0c73.tar.gz android_art-dc3761719fb5e2d1ced5708e3c73b965f9ef0c73.tar.bz2 android_art-dc3761719fb5e2d1ced5708e3c73b965f9ef0c73.zip |
Handlerize MethodVerifier::mirror_method_.
The method (mirror_method_) wasn't handlerized across some
allocation/GC points such as the ResolveType() call in
ScanTryCatchBlocks() and the GetReturnType() calls in
CodeFlowVerifyInstruction().
Bug: 12687968
Change-Id: I95323de14459eb5a7c4abfcf44f882f86d59be64
Diffstat (limited to 'runtime/quick_exception_handler.cc')
-rw-r--r-- | runtime/quick_exception_handler.cc | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/runtime/quick_exception_handler.cc b/runtime/quick_exception_handler.cc index 98eeda7263..1e933a2b8c 100644 --- a/runtime/quick_exception_handler.cc +++ b/runtime/quick_exception_handler.cc @@ -206,12 +206,13 @@ class DeoptimizeStackVisitor FINAL : public StackVisitor { const Instruction* inst = Instruction::At(code_item->insns_ + dex_pc); uint32_t new_dex_pc = dex_pc + inst->SizeInCodeUnits(); ShadowFrame* new_frame = ShadowFrame::Create(num_regs, nullptr, m, new_dex_pc); - StackHandleScope<2> hs(self_); + StackHandleScope<3> hs(self_); mirror::Class* declaring_class = m->GetDeclaringClass(); Handle<mirror::DexCache> h_dex_cache(hs.NewHandle(declaring_class->GetDexCache())); Handle<mirror::ClassLoader> h_class_loader(hs.NewHandle(declaring_class->GetClassLoader())); + Handle<mirror::ArtMethod> h_method(hs.NewHandle(m)); verifier::MethodVerifier verifier(h_dex_cache->GetDexFile(), &h_dex_cache, &h_class_loader, - &m->GetClassDef(), code_item, m->GetDexMethodIndex(), m, + &m->GetClassDef(), code_item, m->GetDexMethodIndex(), h_method, m->GetAccessFlags(), false, true, true); verifier.Verify(); const std::vector<int32_t> kinds(verifier.DescribeVRegs(dex_pc)); |