Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Feb 2016 10:58:34 -0800
From:      Brian Gardner <openjdk@getsnappy.com>
To:        Greg Lewis <glewis@eyesbeyond.com>
Cc:        Magnus Ihse Bursie <magnus.ihse.bursie@oracle.com>, java@freebsd.org
Subject:   Re: Helping out with JDK 9 on BSD
Message-ID:  <224FFFC1-BAFD-4C90-83A0-5D0CD12F603C@getsnappy.com>
In-Reply-To: <20160213080945.GC56357@misty.eyesbeyond.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> <F993524B-0332-4B9C-93CE-FA3D2071F29F@getsnappy.com> <20160213080945.GC56357@misty.eyesbeyond.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Here are web reviews for all of the patches
porting build_vm_def.sh from bsd-port/jdk8 repo, to fix NM errors during =
build
http://brian.timestudybuddy.com/webrev/hotspot__NM/webrev/ =
<http://brian.timestudybuddy.com/webrev/hotspot__NM/webrev/>;
Add SUPPORT_RESERVED_STACK_AREA flag for all BSD's
=
http://brian.timestudybuddy.com/webrev/hotspot__SUPPORT_RESERVED_STACK_ARE=
A/webrev/ =
<http://brian.timestudybuddy.com/webrev/hotspot__SUPPORT_RESERVED_STACK_AR=
EA/webrev/>
porting getthreadid logic from bsd-port/jdk8. calling =
syscall(SYS_thr_self) caused pthread_setspecific to be cleared.
http://brian.timestudybuddy.com/webrev/ =
<http://brian.timestudybuddy.com/webrev/hotspot__os_bsd_cpp__getthreadid/w=
ebrev/>hotspot__os_bsd_cpp__getthreadid/webrev/ =
<http://brian.timestudybuddy.com/webrev/hotspot__os_bsd_cpp__getthreadid/w=
ebrev/>
adding in servicability agent ported from bsd-port/jdk8
http://brian.timestudybuddy.com/webrev/ =
<http://brian.timestudybuddy.com/webrev/hotspot__sa/webrev/>hotspot__sa/we=
brev/ <http://brian.timestudybuddy.com/webrev/hotspot__sa/webrev/>;
adding classlist.bsd that is identical to classlist.linux, in order to =
compile
http://brian.timestudybuddy.com/webrev/jdk__classlist-bsd/webrev/ =
<http://brian.timestudybuddy.com/webrev/jdk__classlist-bsd/webrev/>;
clean up TLS current thread at end of ::run functions similar to how =
it's done in openjdk8.
http://brian.timestudybuddy.com/webrev/ =
<http://brian.timestudybuddy.com/webrev/hotspot__clear_thread_current/webr=
ev/>hotspot__clear_thread_current/webrev/ =
<http://brian.timestudybuddy.com/webrev/hotspot__clear_thread_current/webr=
ev/>
clear current thread before exiting java_start to avoid warnings from =
leftover pthread_setspecific data
=
http://brian.timestudybuddy.com/webrev/hotspot__clear_thread_current_alt/w=
ebrev/ =
<http://brian.timestudybuddy.com/webrev/hotspot__clear_thread_current_alt/=
webrev/>



> On Feb 13, 2016, at 12:09 AM, Greg Lewis <glewis@eyesbeyond.com> =
wrote:
>=20
> On Fri, Feb 12, 2016 at 10:54:29AM -0800, Brian Gardner wrote:
>> After giving it some thought, I???ve 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.
>=20
> Sounds good!  What can I do to help get all the changes up for review?
>=20
> -- Greg
>=20
>>> 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???s 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???s 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???ve mimicked that behavior in the =
necessary spots with the following patch.  I can???t help but think =
there must be a better way to get these Thread???s 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???ve attached the patches needed to build and compile on Freebsd. =
 I???ve 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???t tracked down yet =
and will continue looking into.  While I can compile and execute =
HelloWorld, I???m getting a ton of these benign yet annoying messages =
from ConcurrentGC and Worker threads.  I???ll 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???s 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???m 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???ll 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???t 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???d 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????
>>>>>=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
>>=20
>=20
> --=20
> Greg Lewis                          Email   : glewis@eyesbeyond.com
> Eyes Beyond                         Web     : =
http://www.eyesbeyond.com
> Information Technology              FreeBSD : glewis@FreeBSD.org




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?224FFFC1-BAFD-4C90-83A0-5D0CD12F603C>