On 2017-09-04 13:18, John Paul Adrian Glaubitz wrote:
Hello!

I'm currently testing Zero builds on Linux Alpha, in my particular case on QEMU in a Debian unstable alpha chroot, using OpenJDK 8 for bootstrapping.

For some reason, OpenJDK 8 from Debian's openjdk8 assumes a heap size which
is too small and refuses to start:

(sid-alpha-sbuild)root@nofan:/# java -version
Error occurred during initialization of VM
Too small initial heap
(sid-alpha-sbuild)root@nofan:/#

This can be fixed by overriding the heap settings with _JAVA_OPTIONS:

(sid-alpha-sbuild)root@nofan:/# export _JAVA_OPTIONS="-Xmx1024m -Xms256m"
(sid-alpha-sbuild)root@nofan:/# java -version
Picked up _JAVA_OPTIONS: -Xmx1024m -Xms256m
openjdk version "1.8.0_141"
OpenJDK Runtime Environment (build 1.8.0_141-8u141-b15-3-b15)
OpenJDK 64-Bit Zero VM (build 25.141-b15, interpreted mode)
(sid-alpha-sbuild)root@nofan:/#

As you can see, this has the side effect that the JVM becomes very
chatty about the fact that _JAVA_OPTIONS were set.

While this doesn't seem to be a problem at first sight, it becomes
a problem when trying to run configure for JDK10 which will fail
because of the unexpected output when trying to determine the version
of the boot JDK:

configure: Found potential Boot JDK using configure arguments
configure: Potential Boot JDK found at /usr/lib/jvm/java-8-openjdk-alpha/ is incorrect JDK version (Picked up _JAVA_OPTIONS: -Xmx1024m -Xms256m); ignoring
configure: (Your Boot JDK must be version 8 or 9)
configure: error: The path given by --with-boot-jdk does not contain a valid Boot JDK
configure exiting with result code 1

Is there any way to silence the JVM regarding "_JAVA_OPTIONS"? If no,
we should probably patch the JVM to do that by default.
Ouch! Lots of small, idiotic issues.

For the build identification part: are both the _JAVA_OPTIONS and the version outputted to stdout? Or can you separate them by separating stdout/stderr?

Otherwise, this patch would solve the issue in your case. I'm not sure how it would affect all other java instances we try to detect, so I'm a bit reluctant to take it in.

diff --git a/common/autoconf/boot-jdk.m4 b/common/autoconf/boot-jdk.m4
--- a/common/autoconf/boot-jdk.m4
+++ b/common/autoconf/boot-jdk.m4
@@ -74,7 +74,7 @@
           BOOT_JDK_FOUND=no
         else
# Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? - BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $HEAD -n 1` + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $GREP version | $HEAD -n 1`

           # Extra M4 quote needed to protect [] in grep expression.
[FOUND_CORRECT_VERSION=`$ECHO $BOOT_JDK_VERSION | $EGREP '\"9([\.+-].*)?\"|(1\.[89]\.)'`]

But the main problem here seems to be the Debian openjdk8 instance that crashes on "java -version". Seems like a good and simple test to add to your test matrix. ;-)

/Magnus


Adrian


Reply via email to