Mercurial > hg > graal-jvmci-8
changeset 22852:c6affd32651a
8064815: Zero+PPC64: Stack overflow when running Maven
Reviewed-by: kvn, simonis
Contributed-by: sgehwolf@redhat.com
author | simonis |
---|---|
date | Tue, 18 Nov 2014 19:17:16 +0100 |
parents | ddce0b7cee93 |
children | cae03a88934b |
files | src/cpu/zero/vm/stack_zero.cpp src/cpu/zero/vm/stack_zero.inline.hpp |
diffstat | 2 files changed, 7 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/cpu/zero/vm/stack_zero.cpp Tue Feb 24 15:04:52 2015 -0500 +++ b/src/cpu/zero/vm/stack_zero.cpp Tue Nov 18 19:17:16 2014 +0100 @@ -30,7 +30,9 @@ int ZeroStack::suggest_size(Thread *thread) const { assert(needs_setup(), "already set up"); - return align_size_down(abi_stack_available(thread) / 2, wordSize); + int abi_available = abi_stack_available(thread); + assert(abi_available >= 0, "available abi stack must be >= 0"); + return align_size_down(abi_available / 2, wordSize); } void ZeroStack::handle_overflow(TRAPS) {
--- a/src/cpu/zero/vm/stack_zero.inline.hpp Tue Feb 24 15:04:52 2015 -0500 +++ b/src/cpu/zero/vm/stack_zero.inline.hpp Tue Nov 18 19:17:16 2014 +0100 @@ -48,9 +48,11 @@ // to use under normal circumstances. Note that the returned // value can be negative. inline int ZeroStack::abi_stack_available(Thread *thread) const { - int stack_used = thread->stack_base() - (address) &stack_used; + guarantee(Thread::current() == thread, "should run in the same thread"); + int stack_used = thread->stack_base() - (address) &stack_used + + (StackYellowPages+StackRedPages+StackShadowPages) * os::vm_page_size(); int stack_free = thread->stack_size() - stack_used; - return stack_free - shadow_pages_size(); + return stack_free; } #endif // CPU_ZERO_VM_STACK_ZERO_INLINE_HPP