summaryrefslogtreecommitdiff
path: root/runtime/quick_exception_handler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/quick_exception_handler.cc')
-rw-r--r--runtime/quick_exception_handler.cc7
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();
}