AArch64 OpenJDK bootstrap failure on head

Andrew Haley aph at redhat.com
Mon Feb 1 15:38:43 UTC 2021


I've been unable to get OpenJDK to build on one box because of this message:

[0.013s][error][cds] Unable to map CDS archive -- os::vm_allocation_granularity() expected: 4096 actual: 65536

The problem is that this box is using 64kb pages, and the boostrap
Java was built on a machine with 4k pages. It shouldn't really
be a problem, but this happens:

build/linux-aarch64-server-slowdebug/support/gensrc/java.desktop/sun/awt/AWTIcon32_java_icon16_png.java:

package sun.awt;
public class AWTIcon32_java_icon16_png {
public static int[] java_icon16_png = {
[0.013s][error][cds] Unable to map CDS archive -- os::vm_allocation_granularity() expected: 4096 actual: 65536
16,16,
0x689fb5c9,
0xcc9fb5c8, 0xff9fb5c8, 0xff9fb5c8, 0xff9fb5c8, 0xff9fb5c8, 0xff9fb5c8, 0xff9fb5c8, 0xff9fb5c8, 0xff9fb5c8, 0xff9fb5c8,
0xff9fb5c8, 0xff9fb5c8, 0xff9fb5c8, 0xcc9fb5c8, 0x689fb5c9, 0xcc9bb2c4, 0xffd5dade, 0xfff5f5f5, 0xfff7f7f7, 0xfff7f7f7,

As you can see, the generated AWTIcon32_java_icon16_png.java has the error
message mixed in with the Java source code, so bootstrap fails.

I've tried a bunch of ways to get around this problem, but nothing
works.

I did this:

diff --git a/make/autoconf/boot-jdk.m4 b/make/autoconf/boot-jdk.m4
index 1d82f7c79b9..5c26be68fe4 100644
--- a/make/autoconf/boot-jdk.m4
+++ b/make/autoconf/boot-jdk.m4
@@ -413,7 +413,7 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS],
     UTIL_ADD_JVM_ARG_IF_OK([$boot_jdk_cds_args -Xshare:auto],boot_jdk_jvmargs,[$JAVA])
   else
     # Otherwise optimistically use the system-wide one, if one is present
-    UTIL_ADD_JVM_ARG_IF_OK([-Xshare:auto],boot_jdk_jvmargs,[$JAVA])
+    UTIL_ADD_JVM_ARG_IF_OK([-Xshare:off],boot_jdk_jvmargs,[$JAVA])
   fi

   # Finally append user provided options to allow them to override.
@@ -427,6 +427,9 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS],

   AC_MSG_CHECKING([flags for boot jdk java command for big workloads])

+  # Disable UseSharedSpaces in case the boot JVM was built on another system
+  UTIL_ADD_JVM_ARG_IF_OK([-XX:-UseSharedSpaces],boot_jdk_jvmargs,[$JAVA])
+
   # Starting amount of heap memory.
   UTIL_ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs_big,[$JAVA])
   BOOTCYCLE_JVM_ARGS_BIG=-Xms64M

I also tried  --with-boot-jdk-jvmargs='-Xshare:off -XX:-UseSharedSpaces'

but that doesn't work either. Any ideas? I'm really stuck.

-- 
Andrew Haley  (he/him)
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
https://keybase.io/andrewhaley
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671




More information about the build-dev mailing list