pkgsrc-Changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: pkgsrc/lang/openjdk21
Hi,
Thanks for your great work!!!
"Masatake Daimon" <pho%netbsd.org@localhost> writes:
> Module Name: pkgsrc
> Committed By: pho
> Date: Mon Aug 11 18:06:32 UTC 2025
>
> Modified Files:
> pkgsrc/lang/openjdk21: Makefile bootstrap.mk distinfo hacks.mk
> options.mk
> Added Files:
> pkgsrc/lang/openjdk21/patches:
> patch-src_hotspot_cpu_aarch64_jniFastGetField__aarch64.cpp
> patch-src_hotspot_os__cpu_bsd__aarch64_os__bsd__aarch64.cpp
> patch-src_hotspot_share_runtime_threadWXSetters.inline.hpp
>
> Log Message:
> lang/openjdk21: Workaround for the VM dying on Apple Silicon chips
>
> See the patch for threadWXSetters.inline.hpp for details. I rebuilt the
> bootkit for aarch64 with new patches applied. This may cause some
> performance regression on Cortex series, but as I stated in the patch
> comment, relying on implementation details of a particular chip is
> fundamentally unsound, and that's why it didn't work on Apple Silicon in
> the first place.
>
> But since the upstream has stated they are knowingly doing this, the chance
> of these patches getting accepted is slim, if not zero.
I want to update lang/openjdk21 to 1.21.0.8.9.
And it requires `make distinfo` and I cannot find the following file
bootstrap-jdk-1.21.0.7.6-netbsd-10-aarch64-20250811.tar.xz
in ftp.NetBSD.org:/pub/pkgsrc/distfiles/LOCAL_PORTS/openjdk21.
Could you please upload your bootstrap kit to ${MASTER_SITE_LOCAL:=openjdk21/}?
Thank you.
> To generate a diff of this commit:
> cvs rdiff -u -r1.18 -r1.19 pkgsrc/lang/openjdk21/Makefile
> cvs rdiff -u -r1.2 -r1.3 pkgsrc/lang/openjdk21/bootstrap.mk
> cvs rdiff -u -r1.9 -r1.10 pkgsrc/lang/openjdk21/distinfo
> cvs rdiff -u -r1.1 -r1.2 pkgsrc/lang/openjdk21/hacks.mk
> cvs rdiff -u -r1.3 -r1.4 pkgsrc/lang/openjdk21/options.mk
> cvs rdiff -u -r0 -r1.1 \
> pkgsrc/lang/openjdk21/patches/patch-src_hotspot_cpu_aarch64_jniFastGetField__aarch64.cpp \
> pkgsrc/lang/openjdk21/patches/patch-src_hotspot_os__cpu_bsd__aarch64_os__bsd__aarch64.cpp \
> pkgsrc/lang/openjdk21/patches/patch-src_hotspot_share_runtime_threadWXSetters.inline.hpp
>
> Please note that diffs are not public domain; they are subject to the
> copyright notices on the relevant files.
>
> Modified files:
>
> Index: pkgsrc/lang/openjdk21/Makefile
> diff -u pkgsrc/lang/openjdk21/Makefile:1.18 pkgsrc/lang/openjdk21/Makefile:1.19
> --- pkgsrc/lang/openjdk21/Makefile:1.18 Sun Jun 15 13:45:03 2025
> +++ pkgsrc/lang/openjdk21/Makefile Mon Aug 11 18:06:32 2025
> @@ -1,4 +1,4 @@
> -# $NetBSD: Makefile,v 1.18 2025/06/15 13:45:03 ryoon Exp $
> +# $NetBSD: Makefile,v 1.19 2025/08/11 18:06:32 pho Exp $
>
> DISTNAME= jdk21u-${GITHUB_TAG:C/\+/-/}
> PKGNAME= openjdk21-1.${GITHUB_TAG:C/\+/./:C/jdk-([.0-9]+).*/\1/}
> @@ -50,6 +50,7 @@ CONFIG_GUESS_OVERRIDE+= make/autoconf/bu
> CONFIG_SUB_OVERRIDE+= make/autoconf/build-aux/autoconf-config.sub
> CONFIG_GUESS_OVERRIDE+= make/autoconf/build-aux/autoconf-config.guess
> USE_LANGUAGES= c c++
> +USE_CXX_FEATURES= c++14
> USE_TOOLS+= bash gmake pax pkg-config unzip:run zip:run autoconf automake
> UNLIMIT_RESOURCES= datasize stacksize virtualsize cputime
>
> @@ -58,6 +59,10 @@ BUILDLINK_PASSTHRU_DIRS+= ${ALT_BOOTDIR}
> # Try to use less POSIX semaphores (large MAKE_JOBS can consume them all)
> BOOT_JVMARGS= -XX:+UnlockDiagnosticVMOptions
>
> +# ${WRKSRC}/doc/building.mk explicitly states that its Makefiles are unsafe
> +# to use -j.
> +MAKE_JOBS_SAFE= no
> +
> CONFIGURE_ARGS+= --openjdk-target=${MACHINE_GNU_PLATFORM}
> CONFIGURE_ARGS+= --with-boot-jdk=${ALT_BOOTDIR}
> CONFIGURE_ARGS+= --with-boot-jdk-jvmargs=${BOOT_JVMARGS:Q}
> @@ -134,6 +139,42 @@ SUBST_FILES.fontpaths= src/java.desktop
> SUBST_FILES.fontpaths+= src/java.desktop/unix/native/common/awt/fontpath.c
> SUBST_VARS.fontpaths= PREFIX BUILDLINK_PREFIX.fontconfig
>
> +.if ${MACHINE_ARCH} == "aarch64"
> +# See patches/patch-*threadWXSetters* for details.
> +SUBST_CLASSES+= aa64-membar
> +SUBST_STAGE.aa64-membar= pre-build
> +SUBST_MESSAGE.aa64-membar= Fixing cache coherency issues
> +SUBST_SED.aa64-membar= -e 's/MACOS_AARCH64_ONLY(ThreadWXEnable /AARCH64_ONLY(ThreadWXEnable /'
> +SUBST_FILES.aa64-membar+= src/hotspot/os/posix/signals_posix.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/c1/c1_Runtime1.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/code/nmethod.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/gc/shared/barrierSetNMethod.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/gc/shenandoah/shenandoahBarrierSetNMethod.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/gc/x/xBarrierSetNMethod.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/gc/z/zBarrierSetNMethod.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/interpreter/interpreterRuntime.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/jfr/instrumentation/jfrJvmtiAgent.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/jfr/jni/jfrJniMethod.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/jfr/recorder/storage/jfrStorage.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/jfr/support/jfrIntrinsics.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/jfr/writers/jfrJavaEventWriter.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/jvmci/jvmciCompilerToVM.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/prims/jniCheck.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/prims/jvmtiEnter.xsl
> +SUBST_FILES.aa64-membar+= src/hotspot/share/prims/jvmtiEnv.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/prims/jvmtiExport.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/prims/jvmtiExtensions.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/prims/unsafe.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/prims/upcallLinker.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/prims/whitebox.inline.hpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/runtime/continuationFreezeThaw.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/runtime/deoptimization.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/runtime/interfaceSupport.inline.hpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/runtime/javaThread.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/runtime/safepoint.cpp
> +SUBST_FILES.aa64-membar+= src/hotspot/share/runtime/sharedRuntime.cpp
> +.endif
> +
> .if ${OPSYS} == "NetBSD"
> # NetBSD's EVFILT_* EV_* are different from FreeBSD/OpenBSD's values.
> SUBST_CLASSES+= kqueue
>
> Index: pkgsrc/lang/openjdk21/bootstrap.mk
> diff -u pkgsrc/lang/openjdk21/bootstrap.mk:1.2 pkgsrc/lang/openjdk21/bootstrap.mk:1.3
> --- pkgsrc/lang/openjdk21/bootstrap.mk:1.2 Thu Dec 7 16:26:37 2023
> +++ pkgsrc/lang/openjdk21/bootstrap.mk Mon Aug 11 18:06:32 2025
> @@ -1,11 +1,11 @@
> -# $NetBSD: bootstrap.mk,v 1.2 2023/12/07 16:26:37 tnn Exp $
> +# $NetBSD: bootstrap.mk,v 1.3 2025/08/11 18:06:32 pho Exp $
>
> .if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 090000
> PKG_FAIL_REASON+= "Only supports NetBSD >= 9"
> .endif
>
> -.if (!empty(MACHINE_PLATFORM:MNetBSD-*-aarch64) || !empty(MACHINE_PLATFORM:MNetBSD-*-*earm*)) && ${OPSYS_VERSION} < 099983
> -PKG_FAIL_REASON+= "PR 55248: please update to NetBSD >= 9.99.83 to use this package"
> +.if !empty(MACHINE_PLATFORM:MNetBSD-*-aarch64) && ${OPSYS_VERSION} < 090400
> +PKG_FAIL_REASON+= "Only supports NetBSD >= 9.4"
> .endif
>
> ONLY_FOR_PLATFORM+= NetBSD-*-i386
> @@ -25,11 +25,11 @@ EXTRACT_ONLY+= ${BOOT.nb9-amd64}
> .endif
>
> ONLY_FOR_PLATFORM+= NetBSD-*-aarch64
> -BOOT.nb9-aarch64= bootstrap-jdk-1.21.0.1.12-netbsd-9-aarch64-20231207.tar.xz
> -SITES.${BOOT.nb9-aarch64}= ${MASTER_SITE_LOCAL:=openjdk21/}
> +BOOT.nb10-aarch64= bootstrap-jdk-1.21.0.7.6-netbsd-10-aarch64-20250811.tar.xz
> +SITES.${BOOT.nb10-aarch64}= ${MASTER_SITE_LOCAL:=openjdk21/}
> .if !empty(MACHINE_PLATFORM:MNetBSD-*-aarch64) || make(distinfo)
> -DISTFILES+= ${BOOT.nb9-aarch64}
> -EXTRACT_ONLY+= ${BOOT.nb9-aarch64}
> +DISTFILES+= ${BOOT.nb10-aarch64}
> +EXTRACT_ONLY+= ${BOOT.nb10-aarch64}
> .endif
>
> #ONLY_FOR_PLATFORM+= NetBSD-*-earmv[67]hf
>
> Index: pkgsrc/lang/openjdk21/distinfo
> diff -u pkgsrc/lang/openjdk21/distinfo:1.9 pkgsrc/lang/openjdk21/distinfo:1.10
> --- pkgsrc/lang/openjdk21/distinfo:1.9 Sun Jun 15 13:45:03 2025
> +++ pkgsrc/lang/openjdk21/distinfo Mon Aug 11 18:06:32 2025
> @@ -1,14 +1,14 @@
> -$NetBSD: distinfo,v 1.9 2025/06/15 13:45:03 ryoon Exp $
> +$NetBSD: distinfo,v 1.10 2025/08/11 18:06:32 pho Exp $
>
> -BLAKE2s (bootstrap-jdk-1.21.0.1.12-netbsd-9-aarch64-20231207.tar.xz) = a4e3fae37a90bcf53a842b94529aa46d5702785e0db27b2bcad0c692012f7953
> -SHA512 (bootstrap-jdk-1.21.0.1.12-netbsd-9-aarch64-20231207.tar.xz) =
> 78563a04627e9cac7da620f4a888b6ad5ab4906cae4738ed4049495a7a07501a740af43557541e06c204503a581ac1be1f250195b3ba7fa882cdbfd09689e9bb
> -Size (bootstrap-jdk-1.21.0.1.12-netbsd-9-aarch64-20231207.tar.xz) = 112924460 bytes
> BLAKE2s (bootstrap-jdk-1.21.0.1.12-netbsd-9-amd64-20231207.tar.xz) = 017a9d787a34faa997d72ac69bcafd9c8ab72354e3a1b751d1cb5d376b364f72
> SHA512 (bootstrap-jdk-1.21.0.1.12-netbsd-9-amd64-20231207.tar.xz) = 7ec4208363f44a378674a2b87687ab7facb60bf73118ebd4bec35f7912f073365b36efc4c4b3c034bc448139cb81106e18d6d3b1db45f4ab086ce1ed72bc21bf
> Size (bootstrap-jdk-1.21.0.1.12-netbsd-9-amd64-20231207.tar.xz) = 113417260 bytes
> BLAKE2s (bootstrap-jdk-1.21.0.1.12-netbsd-9-i386-20231207.tar.xz) = 6df557871e6795552305b28d778bcf8724b06e981ec72b35d2e5406cf1f25591
> SHA512 (bootstrap-jdk-1.21.0.1.12-netbsd-9-i386-20231207.tar.xz) = 15d1e8c3b9e440eb446857c42528d5d409baa6b173742930ec5dfe55ba1501e49af789ea75c8cc78eba6b977d7be2b2b4854d9657d75095c55d3941370ff7b94
> Size (bootstrap-jdk-1.21.0.1.12-netbsd-9-i386-20231207.tar.xz) = 111820092 bytes
> +BLAKE2s (bootstrap-jdk-1.21.0.7.6-netbsd-10-aarch64-20250811.tar.xz) = 0ee9c4b9d6e62a67af62d62121769121d475e9c3a8d7c25a32cd70f62d01b873
> +SHA512 (bootstrap-jdk-1.21.0.7.6-netbsd-10-aarch64-20250811.tar.xz) =
> 7b8b17b9a077ea45d92ad9c855df6f831d0f1233166cf9e1af0e16ed0a747575be0a361c398b981d59aee2c09f1ea3e1dcceef68c9876a6efce3c6a94b7c7e50
> +Size (bootstrap-jdk-1.21.0.7.6-netbsd-10-aarch64-20250811.tar.xz) = 112607360 bytes
> BLAKE2s (jdk21u-jdk-21.0.7-6-1.tar.gz) = a4e744d0c83f45b107209d7ef700601f8f5ffd05a250f35913fda2c36a93822f
> SHA512 (jdk21u-jdk-21.0.7-6-1.tar.gz) = 0d08e2a5a9e24fbf8649cfefe835d3ee3a3a33d8af796d0595e0a8a3f73795246c4ac0a3d7ecb4a05a512045cddbc1c6d5c7b7cc0405790ce28f3a5592e9c8ce
> Size (jdk21u-jdk-21.0.7-6-1.tar.gz) = 113408248 bytes
> @@ -21,6 +21,9 @@ SHA1 (patch-make_autoconf_lib-bundled.m4
> SHA1 (patch-make_autoconf_lib-freetype.m4) = bd791b99e4fd87f24432831fba1e814dd199445f
> SHA1 (patch-make_autoconf_lib-x11.m4) = 38038e6d7cfc2d15fb3537a52f11d2961cc2ec99
> SHA1 (patch-make_lib_Awt2dLibraries.gmk) = d69fa8c5cab173be2f41cfbd6479dad60a6337db
> +SHA1 (patch-src_hotspot_cpu_aarch64_jniFastGetField__aarch64.cpp) = 60fc611b4b90ca9c534f1128256506c1ef9912bc
> +SHA1 (patch-src_hotspot_os__cpu_bsd__aarch64_os__bsd__aarch64.cpp) = 61789f5d3956f45cd6b8c50038e3b27b281f0081
> SHA1 (patch-src_hotspot_os_bsd_os__bsd.cpp) = 5561ed502aa925cd3d0514c7ec298e0491d14ffc
> +SHA1 (patch-src_hotspot_share_runtime_threadWXSetters.inline.hpp) = f704bb060803e500415b5d300e26857cf7288ca5
> SHA1 (patch-src_java.desktop_bsd_data_fontconfig_fontconfig.properties) = 32eda43f536dc3a9afb4f1f5f7acae8cb020d546
> SHA1 (patch-src_java.desktop_unix_native_common_awt_fontpath.c) = 4a65df0bf84af967f230636f1da1ec75fbb3f691
>
> Index: pkgsrc/lang/openjdk21/hacks.mk
> diff -u pkgsrc/lang/openjdk21/hacks.mk:1.1 pkgsrc/lang/openjdk21/hacks.mk:1.2
> --- pkgsrc/lang/openjdk21/hacks.mk:1.1 Wed Nov 22 14:06:50 2023
> +++ pkgsrc/lang/openjdk21/hacks.mk Mon Aug 11 18:06:32 2025
> @@ -1,4 +1,4 @@
> -# $NetBSD: hacks.mk,v 1.1 2023/11/22 14:06:50 ryoon Exp $
> +# $NetBSD: hacks.mk,v 1.2 2025/08/11 18:06:32 pho Exp $
>
> .if !defined(OPENJDK17_HACKS_MK)
> OPENJDK17_HACKS_MK= # empty
> @@ -18,9 +18,12 @@ post-wrapper:
> # JDK can correctly build itself. Compiling or running programs other than
> # openjdk itself on such hardware may still cause unexpected behaviour.
> #
> -
> -.if !empty(MACHINE_PLATFORM:MNetBSD-*-*arm*) || \
> - !empty(MACHINE_PLATFORM:MNetBSD-*-aarch64)
> +# The issue has been fixed in OpenJDK 21 for aarch64. We aren't sure if
> +# it's still an issue on 32bit ARM. Probably not? You know when the issue
> +# bites you: javac enters into an infinite loop while parsing subnormal
> +# numeric constants.
> +#
> +.if ${MACHINE_PLATFORM:MNetBSD-*-*arm*}
> PKG_HACKS+= broken-ieee-floats
> SUBST_CLASSES+= fpu
> SUBST_STAGE.fpu= pre-build
>
> Index: pkgsrc/lang/openjdk21/options.mk
> diff -u pkgsrc/lang/openjdk21/options.mk:1.3 pkgsrc/lang/openjdk21/options.mk:1.4
> --- pkgsrc/lang/openjdk21/options.mk:1.3 Wed Dec 6 12:51:24 2023
> +++ pkgsrc/lang/openjdk21/options.mk Mon Aug 11 18:06:32 2025
> @@ -1,4 +1,4 @@
> -# $NetBSD: options.mk,v 1.3 2023/12/06 12:51:24 tnn Exp $
> +# $NetBSD: options.mk,v 1.4 2025/08/11 18:06:32 pho Exp $
>
> PKG_OPTIONS_VAR= PKG_OPTIONS.openjdk21
> PKG_OPTIONS_OPTIONAL_GROUPS= variant
> @@ -49,8 +49,10 @@ BUILDLINK_DEPMETHOD.libXt?= build
> .include "../../x11/libXtst/buildlink3.mk"
> .include "../../x11/libXrandr/buildlink3.mk"
> .else
> +CONFIGURE_ARGS+= --x-includes=${X11BASE}/include
> +CONFIGURE_ARGS+= --x-libraries=${X11BASE}/lib
> CONFIGURE_ARGS+= --enable-headless-only
> -# We apparently still need the Xlib headers to build headless. why?
> +# We apparently still need the Xlib headers and libraries to build headless. why?
> BUILDLINK_DEPMETHOD.libX11?= build
> .include "../../x11/libX11/buildlink3.mk"
> BUILDLINK_DEPMETHOD.libXext?=build
>
> Added files:
>
> Index: pkgsrc/lang/openjdk21/patches/patch-src_hotspot_cpu_aarch64_jniFastGetField__aarch64.cpp
> diff -u /dev/null pkgsrc/lang/openjdk21/patches/patch-src_hotspot_cpu_aarch64_jniFastGetField__aarch64.cpp:1.1
> --- /dev/null Mon Aug 11 18:06:32 2025
> +++ pkgsrc/lang/openjdk21/patches/patch-src_hotspot_cpu_aarch64_jniFastGetField__aarch64.cpp Mon Aug 11 18:06:32 2025
> @@ -0,0 +1,32 @@
> +$NetBSD: patch-src_hotspot_cpu_aarch64_jniFastGetField__aarch64.cpp,v 1.1 2025/08/11 18:06:32 pho Exp $
> +
> +Workaround for the Hotspot VM dying on Apple Silicon chips. See
> +the patch to threadWXSetters.inline.hpp for details.
> +
> +--- src/hotspot/cpu/aarch64/jniFastGetField_aarch64.cpp.orig 2025-04-19 18:18:28.000000000 +0000
> ++++ src/hotspot/cpu/aarch64/jniFastGetField_aarch64.cpp
> +@@ -59,8 +59,6 @@ static const Register result = r7
> + // (8262896). So each FastGetXXXField is wrapped into a C++ statically
> + // compiled template function that optionally switches to WXExec if necessary.
> +
> +-#ifdef __APPLE__
> +-
> + static address generated_fast_get_field[T_LONG + 1 - T_BOOLEAN];
> +
> + template<int BType> struct BasicTypeToJni {};
> +@@ -87,15 +85,6 @@ address JNI_FastGetField::generate_fast_
> + return (address)static_fast_get_field_wrapper<BType>;
> + }
> +
> +-#else // __APPLE__
> +-
> +-template<int BType>
> +-address JNI_FastGetField::generate_fast_get_int_field1() {
> +- return generate_fast_get_int_field0((BasicType)BType);
> +-}
> +-
> +-#endif // __APPLE__
> +-
> + address JNI_FastGetField::generate_fast_get_int_field0(BasicType type) {
> + const char *name;
> + switch (type) {
> Index: pkgsrc/lang/openjdk21/patches/patch-src_hotspot_os__cpu_bsd__aarch64_os__bsd__aarch64.cpp
> diff -u /dev/null pkgsrc/lang/openjdk21/patches/patch-src_hotspot_os__cpu_bsd__aarch64_os__bsd__aarch64.cpp:1.1
> --- /dev/null Mon Aug 11 18:06:32 2025
> +++ pkgsrc/lang/openjdk21/patches/patch-src_hotspot_os__cpu_bsd__aarch64_os__bsd__aarch64.cpp Mon Aug 11 18:06:32 2025
> @@ -0,0 +1,19 @@
> +$NetBSD: patch-src_hotspot_os__cpu_bsd__aarch64_os__bsd__aarch64.cpp,v 1.1 2025/08/11 18:06:32 pho Exp $
> +
> +Workaround for the Hotspot VM dying on Apple Silicon chips. See
> +the patch to threadWXSetters.inline.hpp for details.
> +
> +--- src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp.orig 2025-04-19 18:18:28.000000000 +0000
> ++++ src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp
> +@@ -694,6 +694,11 @@ bool PosixSignals::pd_hotspot_signal_han
> + assert(sig == info->si_signo, "bad siginfo");
> + }
> + */
> ++
> ++ // Enable WXWrite: this function is called by the signal handler at arbitrary
> ++ // point of execution.
> ++ ThreadWXEnable wx(WXWrite, thread);
> ++
> + // decide if this trap can be handled by a stub
> + address stub = nullptr;
> +
> Index: pkgsrc/lang/openjdk21/patches/patch-src_hotspot_share_runtime_threadWXSetters.inline.hpp
> diff -u /dev/null pkgsrc/lang/openjdk21/patches/patch-src_hotspot_share_runtime_threadWXSetters.inline.hpp:1.1
> --- /dev/null Mon Aug 11 18:06:32 2025
> +++ pkgsrc/lang/openjdk21/patches/patch-src_hotspot_share_runtime_threadWXSetters.inline.hpp Mon Aug 11 18:06:32 2025
> @@ -0,0 +1,63 @@
> +$NetBSD: patch-src_hotspot_share_runtime_threadWXSetters.inline.hpp,v 1.1 2025/08/11 18:06:32 pho Exp $
> +
> +Workaround for the Hotspot VM dying on Apple Silicon chips:
> +https://mail-index.netbsd.org/tech-pkg/2025/07/12/msg031385.html
> +
> +The problem is basically that Hotspot outrightly violates the architecture
> +spec, and then it does all kinds of weird workarounds to compensate,
> +assuming their workarounds happen to work on some implementations of actual
> +chips. It essentially relies on implementation details of chips:
> +https://cr.openjdk.org/~jrose/jvm/hotspot-cmc.html
> +
> +However, their workaround does not work on Apple Silicon. It's not Apple's
> +fault, because Hotspot knowingly violates the spec. The problem does not
> +come to the surface on Darwin/aarch64 but it's only by an accident:
> +Darwin/aarch64 strictly forbids executing code in writable pages, and
> +provides a non-portable function pthread_jit_write_protect_np(), which
> +Hotspot uses every time it needs to modify code in memory.
> +
> +The function temporarily write-protects every executable page in the entire
> +process space but only for the calling thread, so that the thread can
> +execute code in pages that are otherwise writable. The important fact is
> +that the function happens to issue data and instruction memory barriers
> +(i.e. DSB and ISB) in its implementation. It turned out these barriers were
> +what made Hotspot work on Apple Silicon.
> +
> +So, in order to make it work on non-Darwin OSes on Apple Silicon, and
> +possibly on other non-Cortex aarch64 chips, we must issue memory barriers
> +every time it would call pthread_jit_write_protect_np() on
> +Darwin/aarch64. FreeBSD suffers from the same problem:
> +https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=265284
> +
> +--- src/hotspot/share/runtime/threadWXSetters.inline.hpp.orig 2025-08-01 07:55:07.225394550 +0000
> ++++ src/hotspot/share/runtime/threadWXSetters.inline.hpp
> +@@ -43,6 +43,29 @@ public:
> + }
> + }
> + };
> ++#elif defined(AARCH64)
> ++class ThreadWXEnable {
> ++ WXMode _new_mode;
> ++public:
> ++ ThreadWXEnable(WXMode new_mode, Thread*) :
> ++ _new_mode(new_mode)
> ++ {
> ++ if (_new_mode == WXExec) {
> ++ // We are going to execute some code that has been potentially
> ++ // modified.
> ++ __asm__ __volatile__ ("dsb\tsy\n"
> ++ "isb\tsy" : : : "memory");
> ++ }
> ++ }
> ++ ~ThreadWXEnable() {
> ++ if (_new_mode == WXWrite) {
> ++ // We may have modified some code that is going to be executed
> ++ // outside of this block.
> ++ __asm__ __volatile__ ("dsb\tsy\n"
> ++ "isb\tsy" : : : "memory");
> ++ }
> ++ }
> ++};
> + #endif // __APPLE__ && AARCH64
> +
> + #endif // SHARE_RUNTIME_THREADWXSETTERS_INLINE_HPP
>
--
Ryo ONODERA // ryo%tetera.org@localhost
PGP fingerprint = 82A2 DC91 76E0 A10A 8ABB FD1B F404 27FA C7D1 15F3
Home |
Main Index |
Thread Index |
Old Index