diff --git a/java/openjdk17/Makefile b/java/openjdk17/Makefile index de5545c86a20..792e5e421680 100644 --- a/java/openjdk17/Makefile +++ b/java/openjdk17/Makefile @@ -162,6 +162,11 @@ CONFIGURE_ARGS+= --disable-dtrace .if ${ARCH} == powerpc64 && ${OSREL:C/\.[0-9]//} == 12 EXTRA_PATCHES= ${PATCHDIR}/extra-patch-src_hotspot_cpu_ppc_vm__version__ppc.hpp .endif +.if ${ARCH} == aarch64 +CONFIGURE_ARGS+= --with-boot-jdk-jvmargs=-XX:-UseCompressedClassPointers +MAKE_ENV+= JAVA_TOOL_OPTIONS="-XX:-UseCompressedClassPointers" +EXTRA_PATCHES= ${PATCHDIR}/extra-patch-src_hotspot_share_runtime_arguments.cpp +.endif .if empty(ICONV_LIB) ICONV_CFLAGS= -DLIBICONV_PLUG diff --git a/java/openjdk17/files/extra-patch-src_hotspot_share_runtime_arguments.cpp b/java/openjdk17/files/extra-patch-src_hotspot_share_runtime_arguments.cpp new file mode 100644 index 000000000000..b12ccc4d43fe --- /dev/null +++ b/java/openjdk17/files/extra-patch-src_hotspot_share_runtime_arguments.cpp @@ -0,0 +1,21 @@ +--- src/hotspot/share/runtime/arguments.cpp.orig 2022-10-20 06:03:11 UTC ++++ src/hotspot/share/runtime/arguments.cpp +@@ -1557,6 +1557,10 @@ void Arguments::set_use_compressed_klass_ptrs() { + // set_use_compressed_oops(). + void Arguments::set_use_compressed_klass_ptrs() { + #ifdef _LP64 ++# if defined(__FreeBSD__) && defined(AARCH64) ++ FLAG_SET_DEFAULT(UseCompressedClassPointers, false); ++ FLAG_SET_ERGO(UseCompressedClassPointers, false); ++# else + // On some architectures, the use of UseCompressedClassPointers implies the use of + // UseCompressedOops. The reason is that the rheap_base register of said platforms + // is reused to perform some optimized spilling, in order to use rheap_base as a +@@ -1582,6 +1586,7 @@ void Arguments::set_use_compressed_klass_ptrs() { + } + } + } ++# endif // __FreeBSD__ && AARCH64 + #endif // _LP64 + } +