PPC-AIX Port to FreeBSD PowerPC Support

Volker Simonis volker.simonis at gmail.com
Fri Feb 12 08:28:10 UTC 2016


Hi Curtis,

congratulations from my side as well. Running HelloWorld is always an
important milestone when porting the OpenJDK to a new platform!

I think Thomas already gave you the right hints. It's true that
SIGTRAP is used a lot within HotSpot and you really need to handle it
correctly.

As a quick workaround you could also try to use -XX:-UseSIGTRAP which
should switch off the usage of SIGTRAP within the VM. You also have to
use this switch when debugging the VM in a native debugger like gdb
because the debugger also uses SIGTRAP internally.

Regards,
Volker


On Fri, Feb 12, 2016 at 8:08 AM, Thomas Stüfe <thomas.stuefe at gmail.com> wrote:
> Hi Curtis,
>
> I think it makes sense to post this on the bsd list too.
>
> See my comments inline.
>
> On Fri, Feb 12, 2016 at 7:26 AM, Curtis Hamilton <hamiltcl at verizon.net>
> wrote:
>>
>> Thomas/Volker,
>>
>>
>>
>> Just wanted to give you an update on my bsd/ppc64 porting effort.  I’m
>> using the standard bsd openjdk8 port, as the bsd mercurial needs freebsd
>> specific patches.
>>
>>
>>
>> I’ve made progress modding the linux/ppc files to work under bsd and can
>> successfully build a native (ppc64) JVM.  Here’s the output I get executing
>> ‘java –version’
>>
>>
>>
>>
>> root at lenoil8:/usr/ports/java/openjdk8/work/openjdk/build/bsd-ppc64-normal-server-slowdebug/jdk/bin
>> # ./java -version
>> openjdk version "1.8.0_72-debug"
>> OpenJDK Runtime Environment (build 1.8.0_72-debug-b15)
>> OpenJDK 64-Bit Server VM (build 25.72-b15-debug, mixed mode)
>>
>> root at lenoil8:/usr/ports/java/openjdk8/work/openjdk/build/bsd-ppc64-normal-server-slowdebug/jdk/bin
>> #
>
>
> Great Job!
>>
>> I can compile and execute the basic “hello world”.  However, compiling
>> more complicated java code results in a core dump.  See the following:
>>
>>
>>
>>
>> root at lenoil8:/usr/ports/java/openjdk8/work/openjdk/build/bsd-ppc64-normal-server-slowdebug/jdk/bin
>> # ./javac HelloWorld.java
>>
>> root at lenoil8:/usr/ports/java/openjdk8/work/openjdk/build/bsd-ppc64-normal-server-slowdebug/jdk/bin
>> # ./java HelloWorld
>> Hello, World
>>
>> root at lenoil8:/usr/ports/java/openjdk8/work/openjdk/build/bsd-ppc64-normal-server-slowdebug/jdk/bin
>> # ./javac zip.java
>> Trace/BPT trap (core dumped)
>>
>> root at lenoil8:/usr/ports/java/openjdk8/work/openjdk/build/bsd-ppc64-normal-server-slowdebug/jdk/bin
>> # ./javac LargeZip.java
>> Trace/BPT trap (core dumped)
>>
>> root at lenoil8:/usr/ports/java/openjdk8/work/openjdk/build/bsd-ppc64-normal-server-slowdebug/jdk/bin
>> #
>>
>> As you can see this is a debug build and I’ve been able to tell from the
>> core dump, using gdb, that it’s getting a signal 5 at abort.
>>
>>
>
>
> I think SIGTRAP is used by the ppc JIT for some things (implicit nullchecks?
> Volker would know better). So, SIGTRAP must be handled for this to work.
>
> The JVM has a central signal handler, entry point is "signalHandler" in
> os_<os>.cpp, and then it goes on to, in your case, JVM_handler_bsd_signal()
> in os_bsd_ppc.cpp.
>
> So, make sure that
>
> 1) SIGTRAP is handled by this signal handler - I think, by default bsd does
> not install a signal handler for SIGTRAP. See
> os::Bsd::install_signal_handlers(), and compare it with the Linux version.
>
> 2) Then, SIGTRAP must be handled in JVM_handler_bsd_signal(). Compare with
> the SIGTRAP handling for Linux (os_linux_ppc.cpp). But if you copied that
> code, maybe SIGTRAP handling is already in place and (1) was all that was
> missing.
>
> Also note: The jvm normally writes a error log on crashes which is very
> useful ("hs_err_<pid>") but in your case it was not written at all, because
> no signal handler was installed for SIGTRAP. So, if you took care of (1) but
> (2) is still missing, you may still crash but with a real error report log
> this time.
>
> Side note: Magnus Ihse Bursie is cleaning up and repairing the BSD port,
> see:
> http://mail.openjdk.java.net/pipermail/bsd-port-dev/2016-January/002739.html
>
> His changes are not yet committed, but he posted a webrev with his changes
> (http://cr.openjdk.java.net/~ihse/JDK-8147795_addendum-bsd-source-patches/webrev.01/).
> It may make sense to integrate this in your build, he did some worthwhile
> fixes.
>
> Kind Regards, Thomas
>
>>
>> Any recommendations on what to look at or how to further debug?
>>
>>
>>
>> Regards,
>>
>>
>>
>> Curtis
>>
>>
>>
>> From: Curtis Hamilton [mailto:hamiltcl at verizon.net]
>> Sent: Monday, January 11, 2016 3:29 PM
>> To: 'Thomas Stüfe' <thomas.stuefe at gmail.com>
>> Cc: 'Volker Simonis' <volker.simonis at gmail.com>;
>> 'ppc-aix-port-dev at openjdk.java.net' <ppc-aix-port-dev at openjdk.java.net>
>> Subject: RE: PPC-AIX Port to FreeBSD PowerPC Support
>>
>>
>>
>> Thomas,
>>
>>
>>
>> Thanks for the vector check!
>>
>>
>>
>> I agree that the AIX os is quite different from other unices (I have an
>> old PowerStation 220 in my collection).  However, the ppc-aix-port was the
>> first that contained code specific to the ppc.  Since there isn’t a ppc-bsd
>> port, I needed somewhere to start.  PPC code for both AIX and Linux can be
>> found in the same port.   The ports available on FreeBSD currently do
>> contain any of the ppc headers or code.  So I decided to use a port that
>> already had the ppc code and go from there.
>>
>>
>>
>> Now that ppc code is being integrated into a more universal port, I just
>> need to check which jdk8 port to work with.
>>
>>
>>
>> Any recommendation?
>>
>>
>>
>> Regards,
>>
>> Curtis
>>
>>
>>
>> From: Thomas Stüfe [mailto:thomas.stuefe at gmail.com]
>> Sent: Monday, January 11, 2016 11:23 AM
>> To: Curtis Hamilton <hamiltcl at verizon.net>
>> Cc: Volker Simonis <volker.simonis at gmail.com>;
>> ppc-aix-port-dev at openjdk.java.net
>>
>>
>> Subject: Re: PPC-AIX Port to FreeBSD PowerPC Support
>>
>>
>>
>> Hi Curtis,
>>
>>
>>
>> I am not sure that AIX ppc would be the best source for an BSD port. AIX
>> os port contains a large number of AIX specifics and it is quite a bit
>> different (sometimes, needlessly) from the other Unices. It is also a moving
>> target, at least on jdk9, as we changed a lot in the AIX os port and will
>> change more until the next feature close.
>>
>>
>>
>> So, it may be that linux ppc would be a better porting source for a bsd
>> ppc port.
>>
>>
>>
>> Kind Regards, Thomas
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> On Mon, Jan 11, 2016 at 3:21 PM, Curtis Hamilton <hamiltcl at verizon.net>
>> wrote:
>>
>> Volker,
>>
>>
>>
>> Thanks for the response.
>>
>>
>>
>> Yes, I’m using the mercurial jdk7u ppc-aix version.  The reason I used
>> this port version was because I was more familiar with the build layout of
>> jdk7 versus jdk8/jdk9.  And it seemed like an easier target to start with,
>> since it already supported ppc64 on AIX and Linux.
>>
>>
>>
>> Full disclosure, I’ve been successful in building zero vm for both jdk7
>> and jdk8 on ppc64/FreeBSD.   They both work great.  The system performance
>> is somewhat sluggish, but usable.  So I decided to see if I could build
>> native ppc64 versions leveraging the existing AIX and Linux ppc64 support in
>> the ppc-aix-port, since the bsd-port lacks support for PowerPC.
>>
>>
>>
>> I’m aware of the integration effort for jdk9.  So on your advice, I will
>> start working with ppc-aix jdk8u.  I don’t want anyone to waste time with
>> jdk7u. Although my efforts with this older version is not completely wasted.
>>
>>
>>
>> I look forward to contributing to the ppc64/bsd port OpenJDK integration
>> effort.
>>
>>
>>
>> Regards,
>>
>> Curtis
>>
>>
>>
>> From: Volker Simonis [mailto:volker.simonis at gmail.com]
>> Sent: Monday, January 11, 2016 5:22 AM
>> To: Curtis Hamilton <hamiltcl at verizon.net>
>> Cc: ppc-aix-port-dev at openjdk.java.net
>> Subject: Re: PPC-AIX Port to FreeBSD PowerPC Support
>>
>>
>>
>> Hi Curtis,
>>
>> no, I'm not aware of any effort to port the ppc64 port to BSD.
>>
>> My first question is why are you building jdk7. It is quite old and we
>> don't actually support it any more. It was also never integrated into the
>> main jdk7u branch. I'd strongly recommend to use at least the jdk8u version.
>> If you plan to contribute the ppc64/bsd port for integration into the
>> OpenJDK, this has to be done into the head revision (currently jdk9) anyway.
>> Once it's there, it may be possible to downport it to jdk8u (but not to
>> jdk7u because that on doesn't even contain the ppc64 port).
>>
>> That said, which version of jdk7u are you using? Is it the one from
>> http://hg.openjdk.java.net/ppc-aix-port/jdk7u/ ?
>>
>> One problem you may encounter with jdk7u is that it was never compiled
>> with new versions of gcc. I see you are using gcc4.8 but we used 4.1.2 back
>> then when we were doing the port.
>>
>> Another problem is that we didn't support the serviceability agent in
>> jdk7u. Support for the SA agent on Linux/ppc64 (but not for AIX) was added
>> in jdk8. The error you see in vmStructs.cpp is most probably from SA coding.
>> How does your file vmStructs_bsd_ppc.hpp looks like. As you can see,
>> vmStructs_linux_ppc.hpp is empty in jdk7u for the ppc64 port while it has
>> some code in jdk8u-dev and jdk9.
>>
>> Unfortunately the place in vmStructs.cpp where the error happens is deeply
>> nested macro coding so it's hard to say what's wrong from the error message.
>> You could preprocess the file and post that to the list, maybe we can see
>> more. Just issue the following command from a shell from within
>> /usr/ports/tmp/jdk7u/build/bsd-ppc/hotspot/outputdir/bsd_ppc64_compiler2/product:
>>
>>  g++48 -DBSD -DPPC64 -D_ALLBSD_SOURCE -D_GNU_SOURCE -DPRODUCT
>> -I/usr/ports/tmp/jdk7u/hotspot/src/share/vm/prims
>> -I/usr/ports/tmp/jdk7u/hotspot/src/share/vm
>> -I/usr/ports/tmp/jdk7u/hotspot/src/share/vm/precompiled
>> -I/usr/ports/tmp/jdk7u/hotspot/src/cpu/ppc/vm
>> -I/usr/ports/tmp/jdk7u/hotspot/src/os_cpu/bsd_ppc/vm
>> -I/usr/ports/tmp/jdk7u/hotspot/src/os/bsd/vm
>> -I/usr/ports/tmp/jdk7u/hotspot/src/os/posix/vm -I../generated
>> -DHOTSPOT_RELEASE_VERSION="\"24.80-b11\""
>> -DHOTSPOT_BUILD_TARGET="\"product\"" -DHOTSPOT_BUILD_USER="\"root\""
>> -DHOTSPOT_LIB_ARCH=\"ppc\" -DHOTSPOT_VM_DISTRO="\"OpenJDK\""
>> -DDEFAULT_LIBPATH="\"/lib:/usr/lib:/usr/local/lib\"" -DTARGET_OS_FAMILY_bsd
>> -DTARGET_ARCH_ppc -DTARGET_ARCH_MODEL_ppc_64 -DTARGET_OS_ARCH_bsd_ppc
>> -DTARGET_OS_ARCH_MODEL_bsd_ppc_64 -DTARGET_COMPILER_gcc -DCOMPILER2 -fPIC
>> -fno-rtti -fno-exceptions -pthread -fcheck-new -mpowerpc64 -pipe
>> -DDONT_USE_PRECOMPILED_HEADER -O3 -fno-strict-aliasing -D_LP64=1 -m64
>> -mminimal-toc -mcpu=powerpc64 -mtune=power5
>> -minsert-sched-nops=regroup_exact -mno-multiple -mno-string
>> -DSAFEFETCH_STUBS -DINCLUDE_TRACE=1 -Werror -Wpointer-arith -Wconversion
>> -Wsign-compare    -E
>> /usr/ports/tmp/jdk7u/hotspot/src/share/vm/runtime/vmStructs.cpp
>>
>> Regards,
>>
>> Volker
>>
>>
>>
>> On Sun, Jan 10, 2016 at 3:04 PM, Curtis Hamilton <hamiltcl at verizon.net>
>> wrote:
>>
>> Hello,
>>
>> I’d like to know if there’s been any work done to support PPC for *BSD?
>>
>> I’ve hacked both the AIX and Linux PPC headers but have been unsuccessful
>> in building HotSpot.  All modules seem to build with the exception of
>> VMStructs.cpp with the below error.
>>
>> /usr/ports/tmp/jdk7u/hotspot/src/share/vm/runtime/vmStructs.cpp: In static
>> member function 'static void VMStructs::init()':
>> /usr/ports/tmp/jdk7u/hotspot/src/share/vm/runtime/vmStructs.cpp:3015:
>> error: cannot convert 'pthread**' to 'pid_t*' in initialization
>>
>> Build log is attached.
>>
>> Thanks in advance!
>>
>>
>>
>> Curtis
>>
>>
>>
>>
>>
>>
>
>


More information about the ppc-aix-port-dev mailing list