diff options
Diffstat (limited to 'runtime/quick_exception_handler.cc')
-rw-r--r-- | runtime/quick_exception_handler.cc | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/runtime/quick_exception_handler.cc b/runtime/quick_exception_handler.cc index 727bdf02e1..0e04b7b696 100644 --- a/runtime/quick_exception_handler.cc +++ b/runtime/quick_exception_handler.cc @@ -33,6 +33,7 @@ #include "mirror/class-inl.h" #include "mirror/class_loader.h" #include "mirror/throwable.h" +#include "nterp_helpers.h" #include "oat_quick_method_header.h" #include "stack.h" #include "stack_map.h" @@ -663,6 +664,12 @@ void QuickExceptionHandler::DoLongJump(bool smash_caller_saves) { if (smash_caller_saves) { context_->SmashCallerSaves(); } + if (handler_method_ != nullptr && + handler_method_header_ != nullptr && + handler_method_header_->IsNterpMethodHeader()) { + context_->SetNterpDexPC(reinterpret_cast<uintptr_t>( + handler_method_->DexInstructions().Insns() + handler_dex_pc_)); + } context_->DoLongJump(); UNREACHABLE(); } |