Tue, 18 Nov 2014 19:17:16 +0100
8064815: Zero+PPC64: Stack overflow when running Maven
Reviewed-by: kvn, simonis
Contributed-by: sgehwolf@redhat.com
src/cpu/zero/vm/stack_zero.cpp | file | annotate | diff | comparison | revisions | |
src/cpu/zero/vm/stack_zero.inline.hpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/cpu/zero/vm/stack_zero.cpp Tue Feb 24 15:04:52 2015 -0500 1.2 +++ b/src/cpu/zero/vm/stack_zero.cpp Tue Nov 18 19:17:16 2014 +0100 1.3 @@ -30,7 +30,9 @@ 1.4 1.5 int ZeroStack::suggest_size(Thread *thread) const { 1.6 assert(needs_setup(), "already set up"); 1.7 - return align_size_down(abi_stack_available(thread) / 2, wordSize); 1.8 + int abi_available = abi_stack_available(thread); 1.9 + assert(abi_available >= 0, "available abi stack must be >= 0"); 1.10 + return align_size_down(abi_available / 2, wordSize); 1.11 } 1.12 1.13 void ZeroStack::handle_overflow(TRAPS) {
2.1 --- a/src/cpu/zero/vm/stack_zero.inline.hpp Tue Feb 24 15:04:52 2015 -0500 2.2 +++ b/src/cpu/zero/vm/stack_zero.inline.hpp Tue Nov 18 19:17:16 2014 +0100 2.3 @@ -48,9 +48,11 @@ 2.4 // to use under normal circumstances. Note that the returned 2.5 // value can be negative. 2.6 inline int ZeroStack::abi_stack_available(Thread *thread) const { 2.7 - int stack_used = thread->stack_base() - (address) &stack_used; 2.8 + guarantee(Thread::current() == thread, "should run in the same thread"); 2.9 + int stack_used = thread->stack_base() - (address) &stack_used 2.10 + + (StackYellowPages+StackRedPages+StackShadowPages) * os::vm_page_size(); 2.11 int stack_free = thread->stack_size() - stack_used; 2.12 - return stack_free - shadow_pages_size(); 2.13 + return stack_free; 2.14 } 2.15 2.16 #endif // CPU_ZERO_VM_STACK_ZERO_INLINE_HPP