8017313: PPC64 (part 6): stack handling improvements
Precompute limit for stack overflow check. Reviewed-by: kvn, coleenp
This commit is contained in:
parent
7509ebea00
commit
ac0c6f1e84
@ -312,6 +312,9 @@ void Thread::initialize_thread_local_storage() {
|
|||||||
void Thread::record_stack_base_and_size() {
|
void Thread::record_stack_base_and_size() {
|
||||||
set_stack_base(os::current_stack_base());
|
set_stack_base(os::current_stack_base());
|
||||||
set_stack_size(os::current_stack_size());
|
set_stack_size(os::current_stack_size());
|
||||||
|
if (is_Java_thread()) {
|
||||||
|
((JavaThread*) this)->set_stack_overflow_limit();
|
||||||
|
}
|
||||||
// CR 7190089: on Solaris, primordial thread's stack is adjusted
|
// CR 7190089: on Solaris, primordial thread's stack is adjusted
|
||||||
// in initialize_thread(). Without the adjustment, stack size is
|
// in initialize_thread(). Without the adjustment, stack size is
|
||||||
// incorrect if stack is set to unlimited (ulimit -s unlimited).
|
// incorrect if stack is set to unlimited (ulimit -s unlimited).
|
||||||
|
@ -893,7 +893,11 @@ class JavaThread: public Thread {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
StackGuardState _stack_guard_state;
|
StackGuardState _stack_guard_state;
|
||||||
|
|
||||||
|
// Precompute the limit of the stack as used in stack overflow checks.
|
||||||
|
// We load it from here to simplify the stack overflow check in assembly.
|
||||||
|
address _stack_overflow_limit;
|
||||||
|
|
||||||
// Compiler exception handling (NOTE: The _exception_oop is *NOT* the same as _pending_exception. It is
|
// Compiler exception handling (NOTE: The _exception_oop is *NOT* the same as _pending_exception. It is
|
||||||
// used to temp. parsing values into and out of the runtime system during exception handling for compiled
|
// used to temp. parsing values into and out of the runtime system during exception handling for compiled
|
||||||
@ -1301,6 +1305,14 @@ class JavaThread: public Thread {
|
|||||||
// and reguard if possible.
|
// and reguard if possible.
|
||||||
bool reguard_stack(void);
|
bool reguard_stack(void);
|
||||||
|
|
||||||
|
address stack_overflow_limit() { return _stack_overflow_limit; }
|
||||||
|
void set_stack_overflow_limit() {
|
||||||
|
_stack_overflow_limit = _stack_base - _stack_size +
|
||||||
|
((StackShadowPages +
|
||||||
|
StackYellowPages +
|
||||||
|
StackRedPages) * os::vm_page_size());
|
||||||
|
}
|
||||||
|
|
||||||
// Misc. accessors/mutators
|
// Misc. accessors/mutators
|
||||||
void set_do_not_unlock(void) { _do_not_unlock_if_synchronized = true; }
|
void set_do_not_unlock(void) { _do_not_unlock_if_synchronized = true; }
|
||||||
void clr_do_not_unlock(void) { _do_not_unlock_if_synchronized = false; }
|
void clr_do_not_unlock(void) { _do_not_unlock_if_synchronized = false; }
|
||||||
@ -1335,6 +1347,7 @@ class JavaThread: public Thread {
|
|||||||
static ByteSize exception_oop_offset() { return byte_offset_of(JavaThread, _exception_oop ); }
|
static ByteSize exception_oop_offset() { return byte_offset_of(JavaThread, _exception_oop ); }
|
||||||
static ByteSize exception_pc_offset() { return byte_offset_of(JavaThread, _exception_pc ); }
|
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_handler_pc_offset() { return byte_offset_of(JavaThread, _exception_handler_pc); }
|
||||||
|
static ByteSize stack_overflow_limit_offset() { return byte_offset_of(JavaThread, _stack_overflow_limit); }
|
||||||
static ByteSize is_method_handle_return_offset() { return byte_offset_of(JavaThread, _is_method_handle_return); }
|
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 stack_guard_state_offset() { return byte_offset_of(JavaThread, _stack_guard_state ); }
|
||||||
static ByteSize suspend_flags_offset() { return byte_offset_of(JavaThread, _suspend_flags ); }
|
static ByteSize suspend_flags_offset() { return byte_offset_of(JavaThread, _suspend_flags ); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user