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