diff options
Diffstat (limited to 'runtime/quick_exception_handler.h')
-rw-r--r-- | runtime/quick_exception_handler.h | 26 |
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. |