mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 03:24:38 +02:00
6941529: SharedRuntime::raw_exception_handler_for_return_address must reset thread MethodHandle flag
During testing a bug was hit when an exception returned to the interpreter and the SP was wrong. Reviewed-by: kvn, never
This commit is contained in:
parent
f6934fd3b7
commit
4d0664b427
7 changed files with 16 additions and 13 deletions
|
@ -772,7 +772,7 @@ class JavaThread: public Thread {
|
|||
volatile address _exception_pc; // PC where exception happened
|
||||
volatile address _exception_handler_pc; // PC for handler of exception
|
||||
volatile int _exception_stack_size; // Size of frame where exception happened
|
||||
volatile int _is_method_handle_exception; // True if the current exception PC is at a MethodHandle call.
|
||||
volatile int _is_method_handle_return; // true (== 1) if the current exception PC is a MethodHandle call site.
|
||||
|
||||
// support for compilation
|
||||
bool _is_compiling; // is true if a compilation is active inthis thread (one compilation per thread possible)
|
||||
|
@ -1108,13 +1108,13 @@ class JavaThread: public Thread {
|
|||
int exception_stack_size() const { return _exception_stack_size; }
|
||||
address exception_pc() const { return _exception_pc; }
|
||||
address exception_handler_pc() const { return _exception_handler_pc; }
|
||||
int is_method_handle_exception() const { return _is_method_handle_exception; }
|
||||
bool is_method_handle_return() const { return _is_method_handle_return == 1; }
|
||||
|
||||
void set_exception_oop(oop o) { _exception_oop = o; }
|
||||
void set_exception_pc(address a) { _exception_pc = a; }
|
||||
void set_exception_handler_pc(address a) { _exception_handler_pc = a; }
|
||||
void set_exception_stack_size(int size) { _exception_stack_size = size; }
|
||||
void set_is_method_handle_exception(int value) { _is_method_handle_exception = value; }
|
||||
void set_is_method_handle_return(bool value) { _is_method_handle_return = value ? 1 : 0; }
|
||||
|
||||
// Stack overflow support
|
||||
inline size_t stack_available(address cur_sp);
|
||||
|
@ -1188,7 +1188,7 @@ class JavaThread: public Thread {
|
|||
static ByteSize exception_pc_offset() { return byte_offset_of(JavaThread, _exception_pc ); }
|
||||
static ByteSize exception_handler_pc_offset() { return byte_offset_of(JavaThread, _exception_handler_pc); }
|
||||
static ByteSize exception_stack_size_offset() { return byte_offset_of(JavaThread, _exception_stack_size); }
|
||||
static ByteSize is_method_handle_exception_offset() { return byte_offset_of(JavaThread, _is_method_handle_exception); }
|
||||
static ByteSize is_method_handle_return_offset() { return byte_offset_of(JavaThread, _is_method_handle_return); }
|
||||
static ByteSize stack_guard_state_offset() { return byte_offset_of(JavaThread, _stack_guard_state ); }
|
||||
static ByteSize suspend_flags_offset() { return byte_offset_of(JavaThread, _suspend_flags ); }
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue