changeset 13596:c3e39d67f6d4

8186286: [BSD] Primary thread's stack size is reported incorrectly Reviewed-by: shade, stuefe
author ghaug
date Wed, 16 Aug 2017 14:14:23 +0200
parents 143019ae96f5
children 3a8e59bdaaac
files src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp src/share/vm/runtime/thread.cpp
diffstat 2 files changed, 9 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp	Wed Aug 23 23:38:06 2017 +0200
+++ b/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp	Wed Aug 16 14:14:23 2017 +0200
@@ -908,6 +908,12 @@
   // workaround for OS X 10.9.0 (Mavericks)
   // pthread_get_stacksize_np returns 128 pages even though the actual size is 2048 pages
   if (pthread_main_np() == 1) {
+    // At least on Mac OS 10.12 we have observed stack sizes not aligned
+    // to pages boundaries. This can be provoked by e.g. setrlimit() (ulimit -s xxxx in the
+    // shell). Apparently Mac OS actually rounds upwards to next multiple of page size,
+    // however, we round downwards here to be on the safe side.
+    *size = align_down(*size, getpagesize());
+
     if ((*size) < (DEFAULT_MAIN_THREAD_STACK_PAGES * (size_t)getpagesize())) {
       char kern_osrelease[256];
       size_t kern_osrelease_size = sizeof(kern_osrelease);
--- a/src/share/vm/runtime/thread.cpp	Wed Aug 23 23:38:06 2017 +0200
+++ b/src/share/vm/runtime/thread.cpp	Wed Aug 16 14:14:23 2017 +0200
@@ -2514,6 +2514,9 @@
   address low_addr = stack_end();
   size_t len = stack_guard_zone_size();
 
+  assert(is_aligned(low_addr, os::vm_page_size()), "Stack base should be the start of a page");
+  assert(is_aligned(len, os::vm_page_size()), "Stack size should be a multiple of page size");
+
   int must_commit = os::must_commit_stack_guard_pages();
   // warning("Guarding at " PTR_FORMAT " for len " SIZE_FORMAT "\n", low_addr, len);