From nobody@FreeBSD.org  Mon Nov  4 11:28:26 2013
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115])
	(using TLSv1 with cipher ADH-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by hub.freebsd.org (Postfix) with ESMTP id C65BA80A
	for <freebsd-gnats-submit@FreeBSD.org>; Mon,  4 Nov 2013 11:28:26 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from oldred.freebsd.org (oldred.freebsd.org [8.8.178.121])
	(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by mx1.freebsd.org (Postfix) with ESMTPS id B3CE02EFD
	for <freebsd-gnats-submit@FreeBSD.org>; Mon,  4 Nov 2013 11:28:26 +0000 (UTC)
Received: from oldred.freebsd.org ([127.0.1.6])
	by oldred.freebsd.org (8.14.5/8.14.7) with ESMTP id rA4BSQKT055674
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 4 Nov 2013 11:28:26 GMT
	(envelope-from nobody@oldred.freebsd.org)
Received: (from nobody@localhost)
	by oldred.freebsd.org (8.14.5/8.14.5/Submit) id rA4BSQrj055667;
	Mon, 4 Nov 2013 11:28:26 GMT
	(envelope-from nobody)
Message-Id: <201311041128.rA4BSQrj055667@oldred.freebsd.org>
Date: Mon, 4 Nov 2013 11:28:26 GMT
From: Boris Granveaud <boris.granveaud@europages.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: OpenJDK6 JVM crash at startup
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         183656
>Category:       java
>Synopsis:       OpenJDK6 JVM crash at startup
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    jkim
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Nov 04 11:30:00 UTC 2013
>Closed-Date:    Tue Nov 05 21:25:27 UTC 2013
>Last-Modified:  Tue Nov 05 21:25:27 UTC 2013
>Originator:     Boris Granveaud
>Release:        8.1-RELEASE
>Organization:
Europages
>Environment:
FreeBSD mepdev5.euredit.net 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Mon Jul 19 02:36:49 UTC 2010     root@mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  amd64
>Description:
It seems that using together the +UseConcMarkSweepGC and +UseLargePages options with the latest openjdk6 FreeBSD port b28_3 causes the JVM to crash at startup.

It works just by removing one of these options.

This is a regression as it used to work with the version b23_1.

>How-To-Repeat:
$  java  -XX:+UseConcMarkSweepGC -XX:+UseLargePages -XX:LargePageSizeInBytes=2m -version
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGFPE (0x8) at pc=0x00000008012d4a9c, pid=44759, tid=100313
#
# JRE version: 6.0_32-b28
# Java VM: OpenJDK 64-Bit Server VM (23.25-b01 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# V  [libjvm.so+0x4d4a9c]  AsyncGetCallTrace+0x4566c
#
# Core dump written. Default location: /usr/home/bgranveaud/core or core.44759
#
# An error report file with more information is saved as:
# /usr/home/bgranveaud/hs_err_pid44759.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
#
Abort trap: 6 (core dumped)

>Fix:
Remove either -XX:+UseConcMarkSweepGC or -XX:+UseLargePages

>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-java->jkim 
Responsible-Changed-By: jkim 
Responsible-Changed-When: Mon Nov 4 18:40:59 UTC 2013 
Responsible-Changed-Why:  
Another fallout from HotSpot update.  I'll take it. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=183656 

From: Jung-uk Kim <jkim@FreeBSD.org>
To: bug-followup@FreeBSD.org, boris.granveaud@europages.com
Cc:  
Subject: Re: java/183656: OpenJDK6 JVM crash at startup
Date: Mon, 04 Nov 2013 14:16:16 -0500

 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
 FYI, UseLargePages and friends are unnecessary options for FreeBSD.
 In fact, these options are also deprecated for Linux.
 
 http://en.wikipedia.org/wiki/Page_%28computer_memory%29#Huge_pages
 
 "Linux has supported huge pages on several architectures since the 2.6
 series via the hugetlbfs filesystem and without hugetlbfs since
 2.6.38. ... The 2.6.38 kernel introduced support for transparent use
 of huge pages. On Linux kernels supporting transparent huge pages, as
 well as FreeBSD and Solaris, applications take advantage of huge pages
 automatically, without the need for modification."
 
 Jung-uk Kim
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.22 (FreeBSD)
 
 iQEcBAEBAgAGBQJSd/KAAAoJEHyflib82/FGFk8H/1kUc3kElILwXTBrri5ONnVs
 t0hWRUgkvD027D2WrhhE3uweLI9XJWgLkepAV9kZompmV/ruunS0+7/jFIo3qjfd
 zv0LMuH3HNvs9//Qjz/lbeWVuCb09x1ljoCwxk+C6ya03KIg0RW0RwroY14ivlT2
 YmKv1XaaVhzZFGJbuF0isH67E8goy3amebS/K4GoisrZyCJG1JLOZv/nbTxiBiyX
 8QnvSV+Qt96L2umCWD8CFuaQn0flbrZL6ZV83QfizpvfA+2471UXkT/1W48mRhGt
 V+vBiQ47HxsuarmHMA6VQMWBsXo3CwgsxFNR0LXFcyc4uK0E9OuBSAYrtrqN3IQ=
 =GAwN
 -----END PGP SIGNATURE-----

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: java/183656: commit references a PR
Date: Tue,  5 Nov 2013 21:16:19 +0000 (UTC)

 Author: jkim
 Date: Tue Nov  5 21:16:12 2013
 New Revision: 332909
 URL: http://svnweb.freebsd.org/changeset/ports/332909
 
 Log:
   - Do not crash when unsupported options are specified. [1]
   - Micro-optimize and tidy up some patches.
   
   PR:		java/183656 [1]
 
 Modified:
   head/java/openjdk6-jre/Makefile
   head/java/openjdk6/Makefile
   head/java/openjdk6/files/patch-set
 
 Modified: head/java/openjdk6-jre/Makefile
 ==============================================================================
 --- head/java/openjdk6-jre/Makefile	Tue Nov  5 21:10:27 2013	(r332908)
 +++ head/java/openjdk6-jre/Makefile	Tue Nov  5 21:16:12 2013	(r332909)
 @@ -1,6 +1,6 @@
  # $FreeBSD$
  
 -PORTREVISION=	3
 +PORTREVISION=	4
  CATEGORIES=	java devel
  PKGNAMESUFFIX=	-jre
  
 
 Modified: head/java/openjdk6/Makefile
 ==============================================================================
 --- head/java/openjdk6/Makefile	Tue Nov  5 21:10:27 2013	(r332908)
 +++ head/java/openjdk6/Makefile	Tue Nov  5 21:16:12 2013	(r332909)
 @@ -3,7 +3,7 @@
  
  PORTNAME=	openjdk6
  PORTVERSION=	b28
 -PORTREVISION?=	3
 +PORTREVISION?=	4
  CATEGORIES=	java devel
  MASTER_SITES=	${MASTER_SITE_APACHE:S,%SUBDIR%/,ant/binaries/:ant,} \
  		http://download.java.net/openjdk/jtreg/promoted/4.1/b05/:jtreg \
 
 Modified: head/java/openjdk6/files/patch-set
 ==============================================================================
 --- head/java/openjdk6/files/patch-set	Tue Nov  5 21:10:27 2013	(r332908)
 +++ head/java/openjdk6/files/patch-set	Tue Nov  5 21:16:12 2013	(r332909)
 @@ -931,7 +931,18 @@
                          flags, -1, 0);
   
     if (addr != MAP_FAILED) {
 -@@ -3654,8 +3756,8 @@
 +@@ -3156,7 +3258,9 @@
 + static size_t _large_page_size = 0;
 + 
 + void os::large_page_init() {
 +-#ifndef _ALLBSD_SOURCE
 ++#ifdef _ALLBSD_SOURCE
 ++  UseLargePages = UseHugeTLBFS = UseSHM = false;
 ++#else
 +   if (!UseLargePages) {
 +     UseHugeTLBFS = false;
 +     UseSHM = false;
 +@@ -3654,8 +3758,8 @@
     return OS_OK;
   #else
     int ret = setpriority(PRIO_PROCESS, thread->osthread()->thread_id(), newpri);
 @@ -941,7 +952,7 @@
   }
   
   OSReturn os::get_native_priority(const Thread* const thread, int *priority_ptr) {
 -@@ -4634,6 +4736,20 @@
 +@@ -4634,6 +4738,20 @@
   
   int os::active_processor_count() {
   #ifdef _ALLBSD_SOURCE
 @@ -7916,12 +7927,12 @@
  -    return thr_suspend(tid->sys_thread);
  +#ifdef __APPLE__
  +    if (thread_suspend(pthread_mach_thread_np(tid->sys_thread)) == KERN_SUCCESS)
 ++#else
 ++    if (pthread_suspend_np(tid->sys_thread) == 0)
 ++#endif
  +        return SYS_OK;
  +    else
  +        return SYS_ERR;
 -+#else
 -+    return pthread_suspend_np(tid->sys_thread);
 -+#endif
   }
   
  -
 @@ -7935,30 +7946,42 @@
  -    return thr_continue(tid->sys_thread);
  +#ifdef __APPLE__
  +    if (thread_resume(pthread_mach_thread_np(tid->sys_thread)) == KERN_SUCCESS)
 ++#else
 ++    if (pthread_resume_np(tid->sys_thread) == 0)
 ++#endif
  +        return SYS_OK;
  +    else
  +        return SYS_ERR;
 -+#else
 -+    return pthread_resume_np(tid->sys_thread);
 -+#endif
   }
   
   /*
 -@@ -127,26 +105,74 @@
 - 
 +@@ -122,9 +100,64 @@
 +  */
 + void np_initialize_thread(sys_thread_t *tid)
 + {
 +-    return;
 + }
   
 - /*
 ++/*
  + * Internal helper function to get stack information about specified thread.
  + */
 -+#ifdef __APPLE__
 ++#if defined(__APPLE__)
  +static int
  +get_stackinfo(pthread_t tid, void **addr, long *sizep)
  +{
  +    void *stacktop = pthread_get_stackaddr_np(tid);
  +    *sizep = pthread_get_stacksize_np(tid);
  +    *addr = stacktop - *sizep;
 -+
 -+    return (SYS_OK);
 ++    return SYS_OK;
 ++}
 ++#elif defined(__FreeBSD__)
 ++static int
 ++get_stackinfo(pthread_t tid, pthread_attr_t *attr, void **addr, long *sizep)
 ++{
 ++    if (pthread_attr_get_np(tid, attr) == 0 &&
 ++        pthread_attr_getstack(attr, addr, sizep) == 0)
 ++        return SYS_OK;
 ++    return SYS_ERR;
  +}
  +#elif defined(__OpenBSD__)
  +static int
 @@ -7970,45 +7993,44 @@
  +        *addr = (void *)(ss.ss_sp) - ss.ss_size;
  +        *sizep = (long)(ss.ss_size);
  +        return SYS_OK;
 -+    } else {
 -+        return SYS_ERR; /* pthreads_stackseg_np failed. */
  +    }
 ++    return SYS_ERR;
  +}
  +#else
  +static int
 -+get_stackinfo(pthread_t tid, pthread_attr_t attr, void **addr, long *sizep)
 ++get_stackinfo(pthread_t tid, pthread_attr_t *attr, void **addr, long *sizep)
  +{
 -+    size_t s;
 -+    void  *p;
 -+    int    ret = SYS_ERR;
 -+
 -+    if (pthread_attr_get_np(tid, &attr) != 0)
 -+        goto err;
 -+    if (pthread_attr_getstackaddr(&attr, &p) != 0)
 -+        goto err;
 -+    if (pthread_attr_getstacksize(&attr, &s) != 0)
 -+        goto err;
 -+    *addr = p;
 -+    *sizep = s;
 -+    ret = SYS_OK;
 -+err:
 -+
 -+    return (ret);
 ++    if (pthread_attr_get_np(tid, attr) == 0 &&
 ++        pthread_attr_getstackaddr(attr, addr) == 0 &&
 ++        pthread_attr_getstacksize(attr, sizep) == 0)
 ++        return SYS_OK;
 ++    return SYS_ERR;
  +}
  +#endif
  +
 -+/*
 ++#if !defined(__APPLE__) && !defined(__OpenBSD__)
 ++static int
 ++get_stackaddr(pthread_t tid, pthread_attr_t *attr, void **addr)
 ++{
 ++    if (pthread_attr_get_np(tid, attr) == 0 &&
 ++        pthread_attr_getstackaddr(attr, addr) == 0)
 ++        return SYS_OK;
 ++    return SYS_ERR;
 ++}
 ++#endif
 + 
 + /*
    * Get the stack start address, and max stack size for the current thread.
 -  */
 +@@ -132,21 +165,19 @@
   int
   np_stackinfo(void **addr, long *size)
   {
  -    stack_t stkseg;
 -+#if defined(__OpenBSD__) || defined(__APPLE__)
 -+    return(get_stackinfo(pthread_self(), addr, size));
 ++#if defined(__APPLE__) || defined(__OpenBSD__)
 ++    return get_stackinfo(pthread_self(), addr, size);
  +#else
  +    pthread_attr_t attr;
 -+    int    ret = SYS_ERR;
 ++    int ret;
   
  -    if (thr_stksegment(&stkseg) == 0) {
  -        *addr = (void *)(stkseg.ss_sp);
 @@ -8023,16 +8045,16 @@
  -    } else {
  -        return SYS_ERR; /* thr_stksegment failed. */
  +    if (pthread_attr_init(&attr) == 0) {
 -+        ret = get_stackinfo(pthread_self(), attr, addr, size);
 ++        ret = get_stackinfo(pthread_self(), &attr, addr, size);
  +        pthread_attr_destroy(&attr);
 ++        return ret;
       }
 -+
 -+    return (ret);
 ++    return SYS_ERR;
  +#endif
   }
   
   /*
 -@@ -155,309 +181,194 @@
 +@@ -155,309 +186,192 @@
   void
   np_profiler_init(sys_thread_t *tid)
   {
 @@ -8196,7 +8218,7 @@
  -    int ret;
  +{ 
  +    sysAssert(SYS_QUEUE_LOCKED(sysThreadSelf()));
 - 
 ++
  +    /* Iterate over all the threads in the task, suspending each one.
  +     * We have to loop until no new threads appear, and all are suspended */
  +    mach_port_t self = pthread_mach_thread_np(pthread_self());
 @@ -8243,7 +8265,7 @@
  +            mach_port_deallocate(self, prev_list[k]);
  +
  +        vm_deallocate(self, (vm_address_t)prev_list, sizeof(thread_t) * prev_count);
 -+
 + 
  +        /* Set up the 'new' list for the next loop iteration */
  +        prev_list = cur_list;
  +        prev_count = cur_count;
 @@ -8347,14 +8369,14 @@
       }
  +
  +    vm_deallocate(self, (vm_address_t) thr_list, sizeof(thread_t) * thr_count);
 -+}
 + }
  +#else
  +void
  +np_multi(void)
  +{
  +    sysAssert(SYS_QUEUE_LOCKED(sysThreadSelf()));
  +    pthread_resume_all_np();
 - }
 ++}
  +#endif
   
   /*
 @@ -8453,13 +8475,11 @@
   record_thread_regs()
   {
  +    void *addr;
 -+    long sz;
 -+
       sys_thread_t *tid;
       int i;
 -+    int sp;
 -+
 -+#ifndef __OpenBSD__
 ++#if defined(__APPLE__) || defined(__OpenBSD__)
 ++    long sz;
 ++#else
  +    pthread_attr_t attr;
  +    int attr_inited;
  +    attr_inited = pthread_attr_init(&attr) == 0;
 @@ -8467,15 +8487,15 @@
   
       tid = ThreadQueue;
       for (i = 0; i < ActiveThreadCount && tid != 0; i++) {
 -@@ -466,7 +377,14 @@
 +@@ -466,7 +380,14 @@
   
               if (tid->sys_thread != 0) {
                   /* if thread has already been initialized */
  -                tid->sp = __gettsp(tid->sys_thread);
 -+#if defined(__OpenBSD__) || defined(__APPLE__)
 ++#if defined(__APPLE__) || defined(__OpenBSD__)
  +            if (get_stackinfo(tid->sys_thread, &addr, &sz) == SYS_OK)
  +#else
 -+            if (get_stackinfo(tid->sys_thread, attr, &addr, &sz) == SYS_OK)
 ++            if (get_stackaddr(tid->sys_thread, &attr, &addr) == SYS_OK)
  +#endif
  +                tid->sp = addr;
  +            else
 @@ -8483,7 +8503,7 @@
               } else {
                   /*
                    * thread is still in the process of being initalized.
 -@@ -475,192 +393,11 @@
 +@@ -475,192 +396,11 @@
                    */
                   tid->sp = 0;
               }
 @@ -8516,10 +8536,7 @@
  -#ifdef MY_DEBUG
  -                VM_CALL(jio_fprintf)(stderr, "lwpid %d was not found in process\n",
  -                            lwpid_list[i]);
 -+#ifndef __OpenBSD__
 -+    if (attr_inited)
 -+        pthread_attr_destroy(&attr);
 - #endif
 +-#endif
  -                continue;
  -            }
  -            memset(&lwpstatus, 0, sizeof(lwpstatus));
 @@ -8618,7 +8635,10 @@
  -        if (syscall(SYS_ioctl, procfd, PIOCLWPIDS, lwpid_list) == -1) {
  -#ifdef MY_DEBUG
  -            VM_CALL(jio_fprintf)(stderr, "Can't read proc's lwpid list");
 --#endif
 ++#if !defined(__APPLE__) && !defined(__OpenBSD__)
 ++    if (attr_inited)
 ++        pthread_attr_destroy(&attr);
 + #endif
  -            return;
  -        }
  -
 @@ -9210,7 +9230,7 @@
   Java_com_sun_management_UnixOperatingSystem_getTotalPhysicalMemorySize
     (JNIEnv *env, jobject mbean)
   {
 -+#ifdef _ALLBSD_SOURCE
 ++#if defined(_ALLBSD_SOURCE) && !defined(_SC_PHYS_PAGES)
  +    jlong result;
  +    int mib[2];
  +    size_t rlen;
 _______________________________________________
 svn-ports-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-ports-all
 To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->closed 
State-Changed-By: jkim 
State-Changed-When: Tue Nov 5 21:22:32 UTC 2013 
State-Changed-Why:  
UseLargePages and friends can no longer crash JVM and they are completely 
no-ops now.  Thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=183656 
>Unformatted:
