File ppc_stack_overflow_fix.patch of Package java-9-openjdk

--- jdk9/hotspot/src/cpu/zero/vm/stack_zero.hpp	2016-12-27 22:00:30.000000000 +0100
+++ jdk9/hotspot/src/cpu/zero/vm/stack_zero.hpp	2017-01-09 08:35:53.221098668 +0100
@@ -96,7 +96,7 @@
   int shadow_pages_size() const {
     return _shadow_pages_size;
   }
-  int abi_stack_available(Thread *thread) const;
+  ssize_t abi_stack_available(Thread *thread) const;
 
  public:
   void overflow_check(int required_words, TRAPS);
--- jdk9/hotspot/src/cpu/zero/vm/stack_zero.inline.hpp	2016-12-27 22:00:30.000000000 +0100
+++ jdk9/hotspot/src/cpu/zero/vm/stack_zero.inline.hpp	2017-01-09 08:35:53.221098668 +0100
@@ -47,11 +47,11 @@
 // This method returns the amount of ABI stack available for us
 // to use under normal circumstances.  Note that the returned
 // value can be negative.
-inline int ZeroStack::abi_stack_available(Thread *thread) const {
+inline ssize_t ZeroStack::abi_stack_available(Thread *thread) const {
   guarantee(Thread::current() == thread, "should run in the same thread");
-  int stack_used = thread->stack_base() - (address) &stack_used
+  ssize_t stack_used = thread->stack_base() - (address) &stack_used
     + (JavaThread::stack_guard_zone_size() + JavaThread::stack_shadow_zone_size());
-  int stack_free = thread->stack_size() - stack_used;
+  ssize_t stack_free = thread->stack_size() - stack_used;
   return stack_free;
 }
 
--- jdk9/hotspot/src/os/posix/vm/os_posix.cpp	2016-12-27 22:00:30.000000000 +0100
+++ jdk9/hotspot/src/os/posix/vm/os_posix.cpp	2017-01-09 08:35:53.221098668 +0100
@@ -1121,6 +1121,13 @@
                                    JavaThread::stack_shadow_zone_size();
 
   _java_thread_min_stack_allowed = align_size_up(_java_thread_min_stack_allowed, vm_page_size());
+#ifdef ZERO
+  // If this is Zero, allow at the very minimum one page each for the
+  // Zero stack and the native stack.  This won't make any difference
+  // for 4k pages, but is significant for large pages.
+  _java_thread_min_stack_allowed = MAX2(_java_thread_min_stack_allowed,
+             (size_t)align_size_up((size_t)(JavaThread::stack_guard_zone_size()+JavaThread::stack_shadow_zone_size()+2) * vm_page_size(), vm_page_size()));
+#endif
 
   size_t stack_size_in_bytes = ThreadStackSize * K;
   if (stack_size_in_bytes != 0 &&
openSUSE Build Service is sponsored by