comparison src/share/vm/runtime/thread.hpp @ 14394:58be756e7595

8017313: PPC64 (part 6): stack handling improvements Summary: Precompute limit for stack overflow check. Reviewed-by: kvn, coleenp
author goetz
date Mon, 24 Jun 2013 17:11:47 +0200
parents f2110083203d
children 94c202aa2646
comparison
equal deleted inserted replaced
14393:f4f6ae481e1a 14394:58be756e7595
891 stack_guard_enabled // enabled 891 stack_guard_enabled // enabled
892 }; 892 };
893 893
894 private: 894 private:
895 895
896 StackGuardState _stack_guard_state; 896 StackGuardState _stack_guard_state;
897
898 // Precompute the limit of the stack as used in stack overflow checks.
899 // We load it from here to simplify the stack overflow check in assembly.
900 address _stack_overflow_limit;
897 901
898 // Compiler exception handling (NOTE: The _exception_oop is *NOT* the same as _pending_exception. It is 902 // Compiler exception handling (NOTE: The _exception_oop is *NOT* the same as _pending_exception. It is
899 // used to temp. parsing values into and out of the runtime system during exception handling for compiled 903 // used to temp. parsing values into and out of the runtime system during exception handling for compiled
900 // code) 904 // code)
901 volatile oop _exception_oop; // Exception thrown in compiled code 905 volatile oop _exception_oop; // Exception thrown in compiled code
1299 bool reguard_stack(address cur_sp); 1303 bool reguard_stack(address cur_sp);
1300 // Similar to above but see if current stackpoint is out of the guard area 1304 // Similar to above but see if current stackpoint is out of the guard area
1301 // and reguard if possible. 1305 // and reguard if possible.
1302 bool reguard_stack(void); 1306 bool reguard_stack(void);
1303 1307
1308 address stack_overflow_limit() { return _stack_overflow_limit; }
1309 void set_stack_overflow_limit() {
1310 _stack_overflow_limit = _stack_base - _stack_size +
1311 ((StackShadowPages +
1312 StackYellowPages +
1313 StackRedPages) * os::vm_page_size());
1314 }
1315
1304 // Misc. accessors/mutators 1316 // Misc. accessors/mutators
1305 void set_do_not_unlock(void) { _do_not_unlock_if_synchronized = true; } 1317 void set_do_not_unlock(void) { _do_not_unlock_if_synchronized = true; }
1306 void clr_do_not_unlock(void) { _do_not_unlock_if_synchronized = false; } 1318 void clr_do_not_unlock(void) { _do_not_unlock_if_synchronized = false; }
1307 bool do_not_unlock(void) { return _do_not_unlock_if_synchronized; } 1319 bool do_not_unlock(void) { return _do_not_unlock_if_synchronized; }
1308 1320
1333 static ByteSize saved_exception_pc_offset() { return byte_offset_of(JavaThread, _saved_exception_pc ); } 1345 static ByteSize saved_exception_pc_offset() { return byte_offset_of(JavaThread, _saved_exception_pc ); }
1334 static ByteSize osthread_offset() { return byte_offset_of(JavaThread, _osthread ); } 1346 static ByteSize osthread_offset() { return byte_offset_of(JavaThread, _osthread ); }
1335 static ByteSize exception_oop_offset() { return byte_offset_of(JavaThread, _exception_oop ); } 1347 static ByteSize exception_oop_offset() { return byte_offset_of(JavaThread, _exception_oop ); }
1336 static ByteSize exception_pc_offset() { return byte_offset_of(JavaThread, _exception_pc ); } 1348 static ByteSize exception_pc_offset() { return byte_offset_of(JavaThread, _exception_pc ); }
1337 static ByteSize exception_handler_pc_offset() { return byte_offset_of(JavaThread, _exception_handler_pc); } 1349 static ByteSize exception_handler_pc_offset() { return byte_offset_of(JavaThread, _exception_handler_pc); }
1350 static ByteSize stack_overflow_limit_offset() { return byte_offset_of(JavaThread, _stack_overflow_limit); }
1338 static ByteSize is_method_handle_return_offset() { return byte_offset_of(JavaThread, _is_method_handle_return); } 1351 static ByteSize is_method_handle_return_offset() { return byte_offset_of(JavaThread, _is_method_handle_return); }
1339 static ByteSize stack_guard_state_offset() { return byte_offset_of(JavaThread, _stack_guard_state ); } 1352 static ByteSize stack_guard_state_offset() { return byte_offset_of(JavaThread, _stack_guard_state ); }
1340 static ByteSize suspend_flags_offset() { return byte_offset_of(JavaThread, _suspend_flags ); } 1353 static ByteSize suspend_flags_offset() { return byte_offset_of(JavaThread, _suspend_flags ); }
1341 1354
1342 static ByteSize do_not_unlock_if_synchronized_offset() { return byte_offset_of(JavaThread, _do_not_unlock_if_synchronized); } 1355 static ByteSize do_not_unlock_if_synchronized_offset() { return byte_offset_of(JavaThread, _do_not_unlock_if_synchronized); }