summaryrefslogtreecommitdiffstats
path: root/runtime/quick_exception_handler.cc
diff options
context:
space:
mode:
authorHiroshi Yamauchi <yamauchi@google.com>2014-08-22 11:13:12 -0700
committerHiroshi Yamauchi <yamauchi@google.com>2014-08-22 11:13:12 -0700
commitdc3761719fb5e2d1ced5708e3c73b965f9ef0c73 (patch)
tree84d499b1be46896793bdfebe6f83bf8ca275d50b /runtime/quick_exception_handler.cc
parenta37ad7a6caad2e0a83c72c1103015202cbcaf1a4 (diff)
downloadandroid_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.cc5
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));