comparison src/share/vm/runtime/thread.hpp @ 1368:93767e6a2dfd

6941529: SharedRuntime::raw_exception_handler_for_return_address must reset thread MethodHandle flag Summary: During testing a bug was hit when an exception returned to the interpreter and the SP was wrong. Reviewed-by: kvn, never
author twisti
date Thu, 08 Apr 2010 10:55:40 +0200
parents 6deeaebad47a
children b30a2cd5e3a2 c18cbe5936b8 b96a3e44582f
comparison
equal deleted inserted replaced
1367:9e321dcfa5b7 1368:93767e6a2dfd
770 // code) 770 // code)
771 volatile oop _exception_oop; // Exception thrown in compiled code 771 volatile oop _exception_oop; // Exception thrown in compiled code
772 volatile address _exception_pc; // PC where exception happened 772 volatile address _exception_pc; // PC where exception happened
773 volatile address _exception_handler_pc; // PC for handler of exception 773 volatile address _exception_handler_pc; // PC for handler of exception
774 volatile int _exception_stack_size; // Size of frame where exception happened 774 volatile int _exception_stack_size; // Size of frame where exception happened
775 volatile int _is_method_handle_exception; // True if the current exception PC is at a MethodHandle call. 775 volatile int _is_method_handle_return; // true (== 1) if the current exception PC is a MethodHandle call site.
776 776
777 // support for compilation 777 // support for compilation
778 bool _is_compiling; // is true if a compilation is active inthis thread (one compilation per thread possible) 778 bool _is_compiling; // is true if a compilation is active inthis thread (one compilation per thread possible)
779 779
780 // support for JNI critical regions 780 // support for JNI critical regions
1106 // Exception handling for compiled methods 1106 // Exception handling for compiled methods
1107 oop exception_oop() const { return _exception_oop; } 1107 oop exception_oop() const { return _exception_oop; }
1108 int exception_stack_size() const { return _exception_stack_size; } 1108 int exception_stack_size() const { return _exception_stack_size; }
1109 address exception_pc() const { return _exception_pc; } 1109 address exception_pc() const { return _exception_pc; }
1110 address exception_handler_pc() const { return _exception_handler_pc; } 1110 address exception_handler_pc() const { return _exception_handler_pc; }
1111 int is_method_handle_exception() const { return _is_method_handle_exception; } 1111 bool is_method_handle_return() const { return _is_method_handle_return == 1; }
1112 1112
1113 void set_exception_oop(oop o) { _exception_oop = o; } 1113 void set_exception_oop(oop o) { _exception_oop = o; }
1114 void set_exception_pc(address a) { _exception_pc = a; } 1114 void set_exception_pc(address a) { _exception_pc = a; }
1115 void set_exception_handler_pc(address a) { _exception_handler_pc = a; } 1115 void set_exception_handler_pc(address a) { _exception_handler_pc = a; }
1116 void set_exception_stack_size(int size) { _exception_stack_size = size; } 1116 void set_exception_stack_size(int size) { _exception_stack_size = size; }
1117 void set_is_method_handle_exception(int value) { _is_method_handle_exception = value; } 1117 void set_is_method_handle_return(bool value) { _is_method_handle_return = value ? 1 : 0; }
1118 1118
1119 // Stack overflow support 1119 // Stack overflow support
1120 inline size_t stack_available(address cur_sp); 1120 inline size_t stack_available(address cur_sp);
1121 address stack_yellow_zone_base() 1121 address stack_yellow_zone_base()
1122 { return (address)(stack_base() - (stack_size() - (stack_red_zone_size() + stack_yellow_zone_size()))); } 1122 { return (address)(stack_base() - (stack_size() - (stack_red_zone_size() + stack_yellow_zone_size()))); }
1186 static ByteSize osthread_offset() { return byte_offset_of(JavaThread, _osthread ); } 1186 static ByteSize osthread_offset() { return byte_offset_of(JavaThread, _osthread ); }
1187 static ByteSize exception_oop_offset() { return byte_offset_of(JavaThread, _exception_oop ); } 1187 static ByteSize exception_oop_offset() { return byte_offset_of(JavaThread, _exception_oop ); }
1188 static ByteSize exception_pc_offset() { return byte_offset_of(JavaThread, _exception_pc ); } 1188 static ByteSize exception_pc_offset() { return byte_offset_of(JavaThread, _exception_pc ); }
1189 static ByteSize exception_handler_pc_offset() { return byte_offset_of(JavaThread, _exception_handler_pc); } 1189 static ByteSize exception_handler_pc_offset() { return byte_offset_of(JavaThread, _exception_handler_pc); }
1190 static ByteSize exception_stack_size_offset() { return byte_offset_of(JavaThread, _exception_stack_size); } 1190 static ByteSize exception_stack_size_offset() { return byte_offset_of(JavaThread, _exception_stack_size); }
1191 static ByteSize is_method_handle_exception_offset() { return byte_offset_of(JavaThread, _is_method_handle_exception); } 1191 static ByteSize is_method_handle_return_offset() { return byte_offset_of(JavaThread, _is_method_handle_return); }
1192 static ByteSize stack_guard_state_offset() { return byte_offset_of(JavaThread, _stack_guard_state ); } 1192 static ByteSize stack_guard_state_offset() { return byte_offset_of(JavaThread, _stack_guard_state ); }
1193 static ByteSize suspend_flags_offset() { return byte_offset_of(JavaThread, _suspend_flags ); } 1193 static ByteSize suspend_flags_offset() { return byte_offset_of(JavaThread, _suspend_flags ); }
1194 1194
1195 static ByteSize do_not_unlock_if_synchronized_offset() { return byte_offset_of(JavaThread, _do_not_unlock_if_synchronized); } 1195 static ByteSize do_not_unlock_if_synchronized_offset() { return byte_offset_of(JavaThread, _do_not_unlock_if_synchronized); }
1196 static ByteSize should_post_on_exceptions_flag_offset() { 1196 static ByteSize should_post_on_exceptions_flag_offset() {