summaryrefslogtreecommitdiff
path: root/runtime/quick_exception_handler.h
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/quick_exception_handler.h')
-rw-r--r--runtime/quick_exception_handler.h26
1 files changed, 20 insertions, 6 deletions
diff --git a/runtime/quick_exception_handler.h b/runtime/quick_exception_handler.h
index 9554f1d7d6..c87e38df3f 100644
--- a/runtime/quick_exception_handler.h
+++ b/runtime/quick_exception_handler.h
@@ -18,10 +18,13 @@
#define ART_RUNTIME_QUICK_EXCEPTION_HANDLER_H_
#include <android-base/logging.h>
+#include <cstdint>
+#include "base/array_ref.h"
#include "base/macros.h"
#include "base/mutex.h"
#include "deoptimization_kind.h"
+#include "stack_map.h"
#include "stack_reference.h"
namespace art {
@@ -103,12 +106,20 @@ class QuickExceptionHandler {
return *handler_quick_frame_;
}
- uint32_t GetHandlerDexPc() const {
- return handler_dex_pc_;
+ ArrayRef<const uint32_t> GetHandlerDexPcList() const {
+ return ArrayRef<const uint32_t>(handler_dex_pc_list_);
}
- void SetHandlerDexPc(uint32_t dex_pc) {
- handler_dex_pc_ = dex_pc;
+ void SetHandlerDexPcList(std::vector<uint32_t>&& handler_dex_pc_list) {
+ handler_dex_pc_list_ = std::move(handler_dex_pc_list);
+ }
+
+ uint32_t GetCatchStackMapRow() const {
+ return catch_stack_map_row_;
+ }
+
+ void SetCatchStackMapRow(uint32_t stack_map_row) {
+ catch_stack_map_row_ = stack_map_row;
}
bool GetClearException() const {
@@ -151,8 +162,11 @@ class QuickExceptionHandler {
const OatQuickMethodHeader* handler_method_header_;
// The value for argument 0.
uintptr_t handler_quick_arg0_;
- // The handler's dex PC, zero implies an uncaught exception.
- uint32_t handler_dex_pc_;
+ // The handler's dex PC list including the inline dex_pcs. The dex_pcs are ordered from outermost
+ // to innermost. An empty list implies an uncaught exception.
+ std::vector<uint32_t> handler_dex_pc_list_;
+ // StackMap row corresponding to the found catch.
+ uint32_t catch_stack_map_row_;
// Should the exception be cleared as the catch block has no move-exception?
bool clear_exception_;
// Frame depth of the catch handler or the upcall.