Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Feb 2016 10:54:29 -0800
From:      Brian Gardner <openjdk@getsnappy.com>
To:        Magnus Ihse Bursie <magnus.ihse.bursie@oracle.com>, Greg Lewis <glewis@eyesbeyond.com>
Cc:        java@freebsd.org
Subject:   Re: Helping out with JDK 9 on BSD
Message-ID:  <F993524B-0332-4B9C-93CE-FA3D2071F29F@getsnappy.com>
In-Reply-To: <1C39812E-E596-47E6-AB45-0A591A017FFB@getsnappy.com>
References:  <56ADE7D4.8020107@oracle.com> <56ADE943.6020103@oracle.com> <8B9ACABA-F9B2-4288-9DB5-CA843DE48C34@getsnappy.com> <20160203034053.GA36170@misty.eyesbeyond.com> <A4624A53-1329-481E-928C-F2C8167BA001@getsnappy.com> <56B45453.9020006@oracle.com> <A0BD54C7-2DAE-4B7A-B28C-B639E138DA56@getsnappy.com> <1C39812E-E596-47E6-AB45-0A591A017FFB@getsnappy.com>

next in thread | previous in thread | raw e-mail | index | archive | help
After giving it some thought, I=E2=80=99ve created an alternate patch =
for the clear_current_thread issue.  I like this solution better because =
it is isolated to java_start function in os_bsd.cpp, and it makes =
java_start responsible for cleaning up the current_thread since it also =
initializes it.


> On Feb 10, 2016, at 10:45 PM, Brian Gardner <openjdk@getsnappy.com> =
wrote:
>=20
> Hello again Greg and Magnus,
> I finished up researching the leftover thread-specific data after 4 =
destructor iterations issue.  It looks like it=E2=80=99s currently =
functioning on Freebsd the same way it does on Linux, the only =
difference is that Freebsd output that warning were Linux silently stops =
after it=E2=80=99s forth try.  I looked into how openjdk8 was working =
and it looks like there were calls to TLS::set_thread(NULL) scattered =
throughout the code base at the end of some ::run methods.  I=E2=80=99ve =
mimicked that behavior in the necessary spots with the following patch.  =
I can=E2=80=99t help but think there must be a better way to get these =
Thread=E2=80=99s destructors called, and I tried that in place of making =
clear_thread_current public and calling it directly, but it resulted in =
deadlock.
>=20
> <hotspot__clear_thread_current.patch>
>=20
>> On Feb 9, 2016, at 2:36 PM, Brian Gardner <openjdk@getsnappy.com =
<mailto:openjdk@getsnappy.com>> wrote:
>>=20
>> Hi Greg and Magnus,
>> I=E2=80=99ve attached the patches needed to build and compile on =
Freebsd.  I=E2=80=99ve reverted my changes to TLS, and done more =
debugging there.  There appears to be two separate issues.  One issue =
was that the implementation of OS::bad::gettid() was somehow clearing =
the current thread previously set with pthread_setspecific.  I was able =
to fix this by porting logic from bad-port/jdk8, see =
hotspot__os_bd_cpp__getthreadid.patch.  The second issue seems to be =
related to certain types of threads never getting their destructor =
called and therefor not clearing pthread_setspecific and resulting in =
Thread 803c59000 has exited with leftover thread-specific data after 4 =
destructor iterations, errors.  This one I haven=E2=80=99t tracked down =
yet and will continue looking into.  While I can compile and execute =
HelloWorld, I=E2=80=99m getting a ton of these benign yet annoying =
messages from ConcurrentGC and Worker threads.  I=E2=80=99ll continue =
looking into that next week.
>>=20
>>=20
>>> On Feb 4, 2016, at 11:50 PM, Magnus Ihse Bursie =
<magnus.ihse.bursie@oracle.com <mailto:magnus.ihse.bursie@oracle.com>> =
wrote:
>>>=20
>>> On 2016-02-04 01:29, Brian Gardner wrote:
>>>> Hi Greg,
>>>> Great to hear from you, it=E2=80=99s been a while since I took on =
one of these projects, but I do follow the java@freebsd mailing list and =
see all the work you put in. I must tell you how greatly your work is =
appreciated by me and I=E2=80=99m sure the rest of the community.  I =
have good news, with fairly minimal changes I have it compiling, =
building HelloWorld, and running HelloWorld all without errors.
>>>>=20
>>>> I think it=E2=80=99ll break down into 4 change sets,
>>>> NM - I ported some code from =
bsd-port/jdk8/hotspot/make/bsd/makefiles/build_vm_def.sh that fixes a =
compile error=20
>>>> SUPPORT_RESERVED_STACK_AREA - define SUPPORT_RESERVED_STACK_AREA =
for _ALLBSD_SOURCE
>>>> Serviceability Agent - ported from bad-port/jdk8, currently =
compiles but hasn=E2=80=99t been tested
>>>> TLS - there is problems with the TLS in jdk9 used for =
Thread::current().  This caused several issues for me and while the fix =
was relatively straight forward in using THREAD_LOCAL_DECL completely in =
place of TLS completely, I=E2=80=99d imagine there was a reason it was =
implemented in sort of a Hybrid fashion alongside TLS.
>>>=20
>>> There is a reason. It is very well described in this comment:
>>> =
https://bugs.openjdk.java.net/browse/JDK-8132510?focusedCommentId=3D138665=
05 =
<https://bugs.openjdk.java.net/browse/JDK-8132510?focusedCommentId=3D13866=
505> =
<https://bugs.openjdk.java.net/browse/JDK-8132510?focusedCommentId=3D13866=
505 =
<https://bugs.openjdk.java.net/browse/JDK-8132510?focusedCommentId=3D13866=
505>>
>>>=20
>>> The TL;DR: in some circumstances the JVM can crash if we do not set =
up an initial TLS. On the other hand, this was for glibc, so maybe this =
situation does not arise for FreeBSD.
>>>=20
>>>>=20
>>>> It would be great if I could post these as web reviews for others =
to review.  Greg, would getting access to bsd-port/jdk9 allow us to =
collaborate through web reviews? =20
>>>=20
>>>=20
>>>> Magnus, do you think using bsd-port/jdk9 for this purpose be a step =
towards getting these basic changes into the jdk9 mainline, or would =
your colleagues think "if they have bsd-port/jdk9, why bother with =
integrating them into the jdk9 mainline?=E2=80=9D
>>>=20
>>> I think putting these changes in bsd-port/jdk9 is very reasonable, =
and I do not believe it will in any way hinder their acceptance into =
jdk9 mainline. The only thing to be careful about there, though, is that =
all contributors have signed the OCA (Oracle contributor agreement). =
Mixing in "legally bad" code can present a real problem for adoption =
into mainline.
>>>=20
>>> /Magnus
>>>=20
>>>>=20
>>>> Brian Gardner
>>>>=20
>>>>> On Feb 2, 2016, at 7:40 PM, Greg Lewis < =
<mailto:glewis@eyesbeyond.com =
<mailto:glewis@eyesbeyond.com>>glewis@eyesbeyond.com =
<mailto:glewis@eyesbeyond.com> <mailto:glewis@eyesbeyond.com =
<mailto:glewis@eyesbeyond.com>>> wrote:
>>>>>=20
>>>>> On Sun, Jan 31, 2016 at 06:57:26AM -0800, Brian Gardner wrote:
>>>>>> I???m interested in helping.  I ported openjdk6 to freebsd and =
also helped out with openjdk8.
>>>>>>=20
>>>>>> Brian Gardner
>>>>>=20
>>>>> I'd love to see as much of these changes get into the jdk9 =
mainline.  My time
>>>>> is really limited for the next couple of weeks though.  If it =
would help you
>>>>> or Magnus to use the bsd-port repo to stage changes then that =
would be
>>>>> great too.  Let me do a merge to make sure it is up to date with =
mainline.
>>>>> Notionally we'd have to do a vote to get you both access I think?  =
But I
>>>>> can shepherd changes in if that will help with sharing them.
>>>>>=20
>>>>> FWIW, in terms of taking responsibility, I've been regularly =
updating the
>>>>> repos for jdk8 and jdk7 for a couple of years.  I'm happy to keep =
jdk9
>>>>> building if that is what is being looked for there and also port =
more of
>>>>> the BSD changes for jdk8 as appropriate.
>>>>>=20
>>>>> - Greg
>>>>>=20
>>>>>>> On Jan 31, 2016, at 3:00 AM, Magnus Ihse Bursie =
<magnus.ihse.bursie@oracle.com <mailto:magnus.ihse.bursie@oracle.com> =
<mailto:magnus.ihse.bursie@oracle.com =
<mailto:magnus.ihse.bursie@oracle.com>>> wrote:
>>>>>>>=20
>>>>>>> On 2016-01-31 11:54, Magnus Ihse Bursie wrote:
>>>>>>>> Hi,
>>>>>>>>=20
>>>>>>>> [TL;DR: I'm offering patches to compile JDK 9 on FreeBSD, but =
it's not clear where to put them, or how.]
>>>>>>>>=20
>>>>>>>> I'm working at Oracle on the OpenJDK build team and is =
responsible for large parts of the build system of OpenJDK. Lately, I've =
been playing around with FreeBSD (and other BSDs) in my free time, and =
I've written a patch that will add build system support for FreeBSD, =
OpenBSD and NetBSD in JDK 9 (tracked in  =
<https://bugs.openjdk.java.net/browse/JDK-8147795 =
<https://bugs.openjdk.java.net/browse/JDK-8147795>>https://bugs.openjdk.ja=
va.net/browse/JDK-8147795 =
<https://bugs.openjdk.java.net/browse/JDK-8147795><https://bugs.openjdk.ja=
va.net/browse/JDK-8147795 =
<https://bugs.openjdk.java.net/browse/JDK-8147795>>).
>>>>>>>>=20
>>>>>>>> I started writing this when I realized that the jdk9 branch in =
the OpenJDK bsd-port repository did not contain any BSD-specific changes =
at all, and the old JDK 8 changes will not readily be portable, due to =
major changes in the build system between JDK 8 and JDK 9.
>>>>>>>>=20
>>>>>>>> I thought it would be a no-brainer to integrate these changes =
into the JDK 9 mainline, so they would be in place for whenever you guys =
would start to attack porting the code base. However, some of my =
collegues thought otherwise. The end result, I think, is that they =
wanted to see someone (not necessarily a company, the FreeBSD =
organisation for instance seemed to be okay), to step forward and say =
"we take responsibility for the BSD port", and give some kind of =
commitment to actually use these build changes in producing a viable =
port. You can read the mail conversation here: =
<http://mail.openjdk.java.net/pipermail/build-dev/2016-January/016421.html=
 =
<http://mail.openjdk.java.net/pipermail/build-dev/2016-January/016421.html=
>>http://mail.openjdk.java.net/pipermail/build-dev/2016-January/016421.htm=
l =
<http://mail.openjdk.java.net/pipermail/build-dev/2016-January/016421.html=
> =
<http://mail.openjdk.java.net/pipermail/build-dev/2016-January/016421.html=
 =
<http://mail.openjdk.java.net/pipermail/build-dev/2016-January/016421.html=
>>
>>>>>>>=20
>>>>>>> I forgot to add that I'm willing to help with build issues for =
the BSD port, as far as my (like everybode else's) limited free time =
allows me. Unfortunately, I'm still a noob at BSD internals and can't =
really help with much apart from that.
>>>>>>>=20
>>>>>>> /Magnus
>>>>>>>=20
>>>>>>>=20
>>>>>>>>=20
>>>>>>>> An alternative to pushing this code into the JDK 9 mainline is =
of course to push it to the bsd-port/jdk9 repo (given that the owners of =
that repo approves), but that seems like a less favourable solution. =
Having the code in the mainline does not mean that it gets tested =
automatically, but it means that it will be part of e.g. refactoring, =
that would otherwise break a downstream patchset.
>>>>>>>>=20
>>>>>>>> I cc:ed this conversation to the  =
<mailto:bsd-port-dev@openjdk.java.net =
<mailto:bsd-port-dev@openjdk.java.net>>bsd-port-dev@openjdk.java.net =
<mailto:bsd-port-dev@openjdk.java.net> =
<mailto:bsd-port-dev@openjdk.java.net =
<mailto:bsd-port-dev@openjdk.java.net>> mailing list, but never got any =
kind of official response there. Since this list seems more active, I'm =
trying here instead. :)
>>>>>>>>=20
>>>>>>>> So, I'm offering two patches here, one that applies to the =
build system, is nice and clean, and possible to integrate into JDK 9 =
mainline, if my collegues are convinced that someone is backing up the =
BSD port. And there's a second patch, which fixes broken C/C++/Java code =
and results in a product that can at least run "javac HelloWorld", but =
this is not yet clean enough for integration anywere, at least not the =
JDK 9 mainline. (I don't know enough of the BSD internals to fix all =
problems, so there's some "#if 0" code here and there.)
>>>>>>>>=20
>>>>>>>> /Magnus
>>>>>>>>=20
>>>>>>>> _______________________________________________
>>>>>>>> freebsd-java@freebsd.org <mailto:freebsd-java@freebsd.org> =
<mailto:freebsd-java@freebsd.org <mailto:freebsd-java@freebsd.org>> =
mailing list
>>>>>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-java =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java>; =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java>>;
>>>>>>>> To unsubscribe, send any mail to =
"freebsd-java-unsubscribe@freebsd.org =
<mailto:freebsd-java-unsubscribe@freebsd.org>" =
<mailto:freebsd-java-unsubscribe@freebsd.org =
<mailto:freebsd-java-unsubscribe@freebsd.org>>
>>>>>>>=20
>>>>>>> _______________________________________________
>>>>>>> freebsd-java@freebsd.org <mailto:freebsd-java@freebsd.org> =
<mailto:freebsd-java@freebsd.org <mailto:freebsd-java@freebsd.org>> =
<mailto:freebsd-java@freebsd.org <mailto:freebsd-java@freebsd.org> =
<mailto:freebsd-java@freebsd.org <mailto:freebsd-java@freebsd.org>>> =
mailing list
>>>>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-java =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java>; =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java>>; =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java>; =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java>>>;
>>>>>>> To unsubscribe, send any mail to " =
<mailto:freebsd-java-unsubscribe@freebsd.org =
<mailto:freebsd-java-unsubscribe@freebsd.org>>freebsd-java-unsubscribe@fre=
ebsd.org <mailto:freebsd-java-unsubscribe@freebsd.org> =
<mailto:freebsd-java-unsubscribe@freebsd.org =
<mailto:freebsd-java-unsubscribe@freebsd.org>> < =
<mailto:freebsd-java-unsubscribe@freebsd.org =
<mailto:freebsd-java-unsubscribe@freebsd.org>>mailto:freebsd-java-unsubscr=
ibe@freebsd.org <mailto:freebsd-java-unsubscribe@freebsd.org> =
<mailto:freebsd-java-unsubscribe@freebsd.org =
<mailto:freebsd-java-unsubscribe@freebsd.org>>>"
>>>>>>=20
>>>>>> _______________________________________________
>>>>>> freebsd-java@freebsd.org <mailto:freebsd-java@freebsd.org> =
<mailto:freebsd-java@freebsd.org <mailto:freebsd-java@freebsd.org>> =
mailing list
>>>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-java =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java>; =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java>>;
>>>>>> To unsubscribe, send any mail to =
"freebsd-java-unsubscribe@freebsd.org =
<mailto:freebsd-java-unsubscribe@freebsd.org>" =
<mailto:freebsd-java-unsubscribe@freebsd.org =
<mailto:freebsd-java-unsubscribe@freebsd.org>>
>>>>>=20
>>>>> --=20
>>>>> Greg Lewis                          Email   :  =
<mailto:glewis@eyesbeyond.com =
<mailto:glewis@eyesbeyond.com>>glewis@eyesbeyond.com =
<mailto:glewis@eyesbeyond.com> <mailto:glewis@eyesbeyond.com =
<mailto:glewis@eyesbeyond.com>>
>>>>> Eyes Beyond                         Web     :  =
<http://www.eyesbeyond.com/ =
<http://www.eyesbeyond.com/>>http://www.eyesbeyond.com =
<http://www.eyesbeyond.com/>; <http://www.eyesbeyond.com/ =
<http://www.eyesbeyond.com/>>;
>>>>> Information Technology              FreeBSD :  =
<mailto:glewis@freebsd.org =
<mailto:glewis@freebsd.org>>glewis@FreeBSD.org =
<mailto:glewis@freebsd.org> <mailto:glewis@FreeBSD.org =
<mailto:glewis@FreeBSD.org>>
>>>>> _______________________________________________
>>>>> freebsd-java@freebsd.org <mailto:freebsd-java@freebsd.org> =
<mailto:freebsd-java@freebsd.org <mailto:freebsd-java@freebsd.org>> =
mailing list
>>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-java =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java>; =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java>>;
>>>>> To unsubscribe, send any mail to =
"freebsd-java-unsubscribe@freebsd.org =
<mailto:freebsd-java-unsubscribe@freebsd.org> =
<mailto:freebsd-java-unsubscribe@freebsd.org =
<mailto:freebsd-java-unsubscribe@freebsd.org>>"
>>>>=20
>>>=20
>>>=20
>>=20
>> _______________________________________________
>> freebsd-java@freebsd.org <mailto:freebsd-java@freebsd.org> mailing =
list
>> https://lists.freebsd.org/mailman/listinfo/freebsd-java =
<https://lists.freebsd.org/mailman/listinfo/freebsd-java>;
>> To unsubscribe, send any mail to =
"freebsd-java-unsubscribe@freebsd.org =
<mailto:freebsd-java-unsubscribe@freebsd.org>"
>=20




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?F993524B-0332-4B9C-93CE-FA3D2071F29F>