< prev index next >

src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp

Print this page
rev 12363 : 8169373: Work around linux NPTL stack guard error.
Summary: Also skip libc guard page for compiler thread, merge similar code on linux platforms, and streamline libc guard page handling on linuxs390, linuxppc, aixppc.
Reviewed-by: dholmes, dcubed, kvn

*** 868,885 **** // Java thread: // // Low memory addresses // +------------------------+ ! // | |\ JavaThread created by VM does not have glibc // | glibc guard page | - guard, attached Java thread usually has ! // | |/ 1 page glibc guard. // P1 +------------------------+ Thread::stack_base() - Thread::stack_size() // | |\ ! // | HotSpot Guard Pages | - red and yellow pages // | |/ ! // +------------------------+ JavaThread::stack_yellow_zone_base() // | |\ // | Normal Stack | - // | |/ // P2 +------------------------+ Thread::stack_base() // --- 868,885 ---- // Java thread: // // Low memory addresses // +------------------------+ ! // | |\ Java thread created by VM does not have glibc // | glibc guard page | - guard, attached Java thread usually has ! // | |/ 1 glibc guard page. // P1 +------------------------+ Thread::stack_base() - Thread::stack_size() // | |\ ! // | HotSpot Guard Pages | - red, yellow and reserved pages // | |/ ! // +------------------------+ JavaThread::stack_reserved_zone_base() // | |\ // | Normal Stack | - // | |/ // P2 +------------------------+ Thread::stack_base() //
*** 923,949 **** #elif defined(__OpenBSD__) stack_t ss; int rslt = pthread_stackseg_np(pthread_self(), &ss); if (rslt != 0) ! fatal("pthread_stackseg_np failed with err = %d", rslt); *bottom = (address)((char *)ss.ss_sp - ss.ss_size); *size = ss.ss_size; #else pthread_attr_t attr; int rslt = pthread_attr_init(&attr); // JVM needs to know exact stack location, abort if it fails if (rslt != 0) ! fatal("pthread_attr_init failed with err = %d", rslt); rslt = pthread_attr_get_np(pthread_self(), &attr); if (rslt != 0) ! fatal("pthread_attr_get_np failed with err = %d", rslt); if (pthread_attr_getstackaddr(&attr, (void **)bottom) != 0 || pthread_attr_getstacksize(&attr, size) != 0) { fatal("Can not locate current stack attributes!"); } --- 923,949 ---- #elif defined(__OpenBSD__) stack_t ss; int rslt = pthread_stackseg_np(pthread_self(), &ss); if (rslt != 0) ! fatal("pthread_stackseg_np failed with error = %d", rslt); *bottom = (address)((char *)ss.ss_sp - ss.ss_size); *size = ss.ss_size; #else pthread_attr_t attr; int rslt = pthread_attr_init(&attr); // JVM needs to know exact stack location, abort if it fails if (rslt != 0) ! fatal("pthread_attr_init failed with error = %d", rslt); rslt = pthread_attr_get_np(pthread_self(), &attr); if (rslt != 0) ! fatal("pthread_attr_get_np failed with error = %d", rslt); if (pthread_attr_getstackaddr(&attr, (void **)bottom) != 0 || pthread_attr_getstacksize(&attr, size) != 0) { fatal("Can not locate current stack attributes!"); }
< prev index next >