Re: git: 642e35da1071 - main - java/openjdk27: Add port

From: Ronald Klop <ronald-lists_at_klop.ws>
Date: Tue, 22 Sep 2026 12:49:52 UTC
Awesome work!

Ronald.

 
Van: Harald Eilertsen <haraldei@FreeBSD.org>
Datum: dinsdag, 22 september 2026 13:50
Aan: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Onderwerp: git: 642e35da1071 - main - java/openjdk27: Add port
> 
> The branch main has been updated by haraldei:
> 
> URL: https://cgit.FreeBSD.org/ports/commit/?id=642e35da10717d8920464fdde18f7d322d194ce8
> 
> commit 642e35da10717d8920464fdde18f7d322d194ce8
> Author:     Harald Eilertsen <haraldei@FreeBSD.org>
> AuthorDate: 2026-09-04 10:49:02 +0000
> Commit:     Harald Eilertsen <haraldei@FreeBSD.org>
> CommitDate: 2026-09-22 11:49:52 +0000
> 
>     java/openjdk27: Add port
>     
>     Upstream release notes:
>     https://jdk.java.net/27/release-notes
>     
>     In addition this release contains the following BSD specific fixes:
>     
>     - Fix os::naked_short_nanosleep on OpenBSD when < 20 miliseconds.
>     - Only return symbols that match the requested address for dladdr(3) on
>       BSD.
>     
>     Reviewed by:    pkubaj
>     Sponsored by:   The FreeBSD Foundation
>     Differential Revision:  https://reviews.freebsd.org/D59519
> ---
>  Mk/Uses/java.mk                                    |   9 +-
>  java/Makefile                                      |   1 +
>  java/openjdk27/Makefile                            | 209 +++++++++++++++++++++
>  java/openjdk27/distinfo                            |  11 ++
>  java/openjdk27/files/patch-configure               |  14 ++
>  .../files/patch-make_autoconf_flags-cflags.m4      |  12 ++
>  .../files/patch-make_autoconf_libraries.m4         |  15 ++
>  ...pot_os__cpu_bsd__ppc_atomicAccess__bsd__ppc.hpp |  30 +++
>  ...spot_os__cpu_bsd__ppc_orderAccess__bsd__ppc.hpp |  80 ++++++++
>  ...h-src_hotspot_os__cpu_bsd__ppc_os__bsd__ppc.cpp |  89 +++++++++
>  ...spot_os__cpu_bsd__ppc_vm__version__bsd__ppc.cpp |  49 +++++
>  .../files/patch-src_hotspot_os_bsd_os__bsd.cpp     |  22 +++
>  .../patch-src_hotspot_os_bsd_os__perf__bsd.cpp     |  13 ++
>  java/openjdk27/pkg-descr                           |   1 +
>  java/openjdk27/pkg-message                         |  15 ++
>  15 files changed, 567 insertions(+), 3 deletions(-)
> 
> diff --git a/Mk/Uses/java.mk b/Mk/Uses/java.mk
> index f090e83f56b4..2be68ab30712 100644
> --- a/Mk/Uses/java.mk
> +++ b/Mk/Uses/java.mk
> @@ -30,7 +30,7 @@
>  # JAVA_VERSION     List of space-separated suitable java versions for the
>  #          port. An optional "+" allows you to specify a range of
>  #          versions. (allowed values: 8[+] 11[+] 17[+]
> -#          21[+] 25[+] 26[+])
> +#          21[+] 25[+] 26[+] 27[+])
>  #          JAVA_DEFAULT (Mk/bsd.default-versions.mk) is used if this
>  #          variable is omitted or if JAVA_DEFAULT is part of the range.
>  #          Otherwise the latest LTS from the range is preferred over
> @@ -205,7 +205,7 @@ SUB_LIST+=      JAVA_OS="${JAVA_OS}"
>  .  endif
>  
>  # The complete list of Java versions, os and vendors supported.
> -__JAVA_VERSION_LIST=   8 11 17 21 25 26
> +__JAVA_VERSION_LIST=   8 11 17 21 25 26 27
>  _JAVA_VERSION_LIST=        ${__JAVA_VERSION_LIST} ${__JAVA_VERSION_LIST:S/$/+/}
>  _JAVA_OS_LIST=         native linux
>  _JAVA_VENDOR_LIST=     openjdk oracle
> @@ -224,6 +224,8 @@ _JAVA_PORT_NATIVE_OPENJDK_JDK_25_INFO=      PORT=java/openjdk25         HOME=${LOCALBASE}/
>                                             VERSION=25  OS=native   VENDOR=openjdk
>  _JAVA_PORT_NATIVE_OPENJDK_JDK_26_INFO=     PORT=java/openjdk26         HOME=${LOCALBASE}/openjdk26 \
>                                             VERSION=26  OS=native   VENDOR=openjdk
> +_JAVA_PORT_NATIVE_OPENJDK_JDK_27_INFO=     PORT=java/openjdk27         HOME=${LOCALBASE}/openjdk27 \
> +                                           VERSION=27  OS=native   VENDOR=openjdk
>  _JAVA_PORT_LINUX_ORACLE_JDK_8_INFO=        PORT=java/linux-oracle-jdk18    HOME=${LOCALBASE}/linux-oracle-jdk1.8.0 \
>                                             VERSION=8   OS=linux    VENDOR=oracle
>  
> @@ -243,6 +245,7 @@ __JAVA_PORTS_NATIVE_LTS=    \
>                     JAVA_PORT_NATIVE_OPENJDK_JDK_11 \
>                     JAVA_PORT_NATIVE_OPENJDK_JDK_8
>  __JAVA_PORTS_NATIVE_NON_LTS=   \
> +                   JAVA_PORT_NATIVE_OPENJDK_JDK_27 \
>                     JAVA_PORT_NATIVE_OPENJDK_JDK_26
>  __JAVA_PORTS_ALL=  \
>                     ${__JAVA_PORTS_NATIVE_LTS} \
> @@ -310,7 +313,7 @@ check-makevars::
>  .      undef _JAVA_PORTS_INSTALLED
>  .      undef _JAVA_PORTS_POSSIBLE
>  .  if defined(JAVA_VERSION)
> -_JAVA_VERSION= ${JAVA_VERSION:S/^8+/8 11+/:S/^11+/11 17+/:S/^17+/17 21+/:S/^21+/21 25+/:S/^25+/25 26+/:S/^26+/26/}
> +_JAVA_VERSION= ${JAVA_VERSION:S/^8+/8 11+/:S/^11+/11 17+/:S/^17+/17 21+/:S/^21+/21 25+/:S/^25+/25 26+/:S/^26+/26 27+/:S/^27+/27/}
>  .  else
>  _JAVA_VERSION= ${__JAVA_VERSION_LIST}
>  .  endif
> diff --git a/java/Makefile b/java/Makefile
> index c906f0188037..d77b61fb8191 100644
> --- a/java/Makefile
> +++ b/java/Makefile
> @@ -85,6 +85,7 @@
>      SUBDIR += openjdk21-jre
>      SUBDIR += openjdk25
>      SUBDIR += openjdk26
> +    SUBDIR += openjdk27
>      SUBDIR += openjdk8
>      SUBDIR += openjdk8-jre
>      SUBDIR += openjfx14
> diff --git a/java/openjdk27/Makefile b/java/openjdk27/Makefile
> new file mode 100644
> index 000000000000..9020b6ee8f59
> --- /dev/null
> +++ b/java/openjdk27/Makefile
> @@ -0,0 +1,209 @@
> +PORTNAME=  openjdk
> +DISTVERSIONPREFIX= jdk-
> +DISTVERSION=   ${JDK_FULL_VERSION:S/.0.0//}
> +CATEGORIES=    java devel
> +MASTER_SITES=  LOCAL/openjdk:boot
> +PKGNAMESUFFIX?=    ${JDK_MAJOR_VERSION}
> +DISTFILES= ${BOOTSTRAPJDKFILE}:boot
> +
> +MAINTAINER=        java@FreeBSD.org
> +COMMENT=       ${COMMENT_${FLAVOR}} ${JDK_MAJOR_VERSION}
> +COMMENT_jdk=       Java Development Kit
> +COMMENT_headless=  Java Development Kit (headless version)
> +COMMENT_jre=       Java Runtime Environment
> +COMMENT_jre_headless=  Java Runtime Environment (headless version)
> +
> +WWW=       https://openjdk.java.net/projects/jdk/27/
> +
> +LICENSE=   GPLv2
> +
> +ONLY_FOR_ARCHS=    aarch64 amd64 powerpc64 powerpc64le
> +
> +BUILD_DEPENDS= ${LOCALBASE}/include/cups/cups.h:print/cups \
> +       bash:shells/bash \
> +       gsed:textproc/gsed \
> +       zip:archivers/zip
> +
> +LIB_DEPENDS=   libasound.so:audio/alsa-lib \
> +       libfontconfig.so:x11-fonts/fontconfig \
> +       libfreetype.so:print/freetype2 \
> +       libgif.so:graphics/giflib \
> +       libharfbuzz.so:print/harfbuzz \
> +       liblcms2.so:graphics/lcms2 \
> +       libpng.so:graphics/png
> +
> +RUN_DEPENDS=   javavm:java/javavmwrapper
> +
> +# This port supports the following flavors:
> +#
> +# - jdk (default)  Full OpenJDK including dev tools and x11 support
> +# - headless       Full OpenJDK including dev tools, but without x11 support
> +# - jre            Java Runtime Environment including x11 support
> +# - jre_headless   Java Runtime Environment without x11 support
> +FLAVORS=   jdk jre headless jre_headless
> +FLAVOR?=   ${BUILD_JRE:?jre:${FLAVORS:[1]}}
> +
> +headless_PKGNAMESUFFIX=        ${JDK_MAJOR_VERSION}-headless
> +jre_PKGNAMESUFFIX=     ${JDK_MAJOR_VERSION}-jre
> +jre_headless_PKGNAMESUFFIX=    ${JDK_MAJOR_VERSION}-jre-headless
> +
> +.if ${FLAVOR:M*headless} == ""
> +RUN_DEPENDS+=  xorg-fonts-truetype>0:x11-fonts/xorg-fonts-truetype
> +USES=      autoreconf:build compiler:features cpe gmake iconv jpeg \
> +       pkgconfig xorg
> +.else
> +USES=      autoreconf:build compiler:features cpe gmake iconv jpeg \
> +       pkgconfig
> +.endif
> +
> +CPE_VENDOR=    oracle
> +
> +USE_GITHUB=    yes
> +GH_ACCOUNT=    freebsd
> +
> +USE_XORG=  x11 xext xi xrandr xrender xt xtst
> +
> +GNU_CONFIGURE=     yes
> +CONFIGURE_ARGS=        --disable-ccache \
> +           --disable-javac-server \
> +           --with-alsa=${LOCALBASE} \
> +           --with-boot-jdk=${BOOTSTRAPJDKDIR} \
> +           --with-cups=${LOCALBASE} \
> +           --with-debug-level=release \
> +           --with-fontconfig=${LOCALBASE} \
> +           --with-freetype=system \
> +           --with-giflib-include=${LOCALBASE}/include \
> +           --with-giflib-lib=${LOCALBASE}/lib \
> +           --with-giflib=system \
> +           --with-harfbuzz=system \
> +           --with-lcms=system \
> +           --with-libjpeg=system \
> +           --with-libpng=system \
> +           --with-native-debug-symbols=none \
> +           --with-num-cores=${MAKE_JOBS_NUMBER} \
> +           --with-vendor-bug-url="${JDK_BUG_URL}" \
> +           --with-vendor-name="OpenJDK BSD Porting Team" \
> +           --with-vendor-url="https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/" \
> +           --with-vendor-vm-bug-url="${JDK_BUG_URL}" \
> +           --with-version-string=${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_PATCH_VERSION}+${JDK_BUILD_NUMBER}-${BSD_JDK_VERSION} \
> +           --with-zlib=system \
> +           --x-includes=${LOCALBASE}/include \
> +           --x-libraries=${LOCALBASE}/lib
> +.if ${FLAVOR:M*headless}
> +CONFIGURE_ARGS+=   --enable-headless-only
> +.endif
> +
> +CONFIGURE_ENV=     ac_cv_path_SED=${LOCALBASE}/bin/gsed
> +CONFIGURE_TARGET=  ${JDK_ARCH}-portbld-${OPSYS:tl}${OSREL}
> +
> +# Suppress passing -j to do-build target via Mk/bsd.port.mk
> +# In the JDK build the number of parallel jobs is passed in via configure --with-num-cores=N
> +_MAKE_JOBS=    #
> +MAKE_ENV=  CLASSPATH="" \
> +       JAVA_HOME="" \
> +       LD_LIBRARY_PATH="" \
> +       LOG=cmdlines \
> +       MAKEFLAGS="CONF_CHECK=ignore"
> +
> +.if ${FLAVOR:Mjre*}
> +ALL_TARGET=    legacy-images
> +.else
> +ALL_TARGET=    images
> +.endif
> +JDK_BUILD_TYPE=    release
> +
> +JDK_ARCH=      ${ARCH:S/amd64/x86_64/:S/powerpc64/ppc64/}
> +BOOTSTRAPJDKFILE=  openjdk26-26.0.2+10.1.${JDK_ARCH}.tar.xz
> +JDK_OSARCH=        bsd-${JDK_ARCH}
> +JDK_BUILDDIR=      ${WRKSRC}/build/${JDK_OSARCH}-${JDK_BUILD_JVM}-${JDK_BUILD_TYPE}
> +.if ${FLAVOR:Mjre*}
> +BUILD_JRE=     true
> +JDK_IMAGEDIR=      ${JDK_BUILDDIR}/images/jre
> +.else
> +JDK_IMAGEDIR=      ${JDK_BUILDDIR}/images/jdk
> +.endif
> +INSTALLDIR=        ${PREFIX}/${PKGBASE}
> +BOOTSTRAPJDKDIR=   ${WRKDIR}/boot-jdk
> +
> +NO_CCACHE= yes
> +NOPRECIOUSMAKEVARS=    yes
> +
> +JDK_MAJOR_VERSION= 27
> +JDK_MINOR_VERSION= 0
> +JDK_PATCH_VERSION= 0
> +JDK_BUILD_NUMBER=  35
> +BSD_JDK_VERSION=   2
> +JDK_FULL_VERSION=  ${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_PATCH_VERSION}+${JDK_BUILD_NUMBER}-${BSD_JDK_VERSION}
> +
> +JDK_BUG_URL=   https://bugs.freebsd.org/bugzilla/enter_bug.cgi?product=Ports%20%26%20Packages&component=Individual%20Port(s)&short_desc=java/${PORTNAME}${JDK_MAJOR_VERSION}%3A%20
> +
> +.ifnmake portclippy
> +JAVAVMS_COMMENT=   OpenJDK${JDK_MAJOR_VERSION}
> +.endif
> +
> +.include <bsd.port.pre.mk>
> +
> +JDK_BUILD_JVM= server
> +
> +MAKE_ENV+=     --with-toolchain-type=${COMPILER_TYPE}
> +CONFIGURE_ARGS+=   --with-toolchain-type=${COMPILER_TYPE}
> +CONFIGURE_ARGS+=   --disable-warnings-as-errors
> +
> +.if ${COMPILER_TYPE} == gcc
> +USE_GCC=       yes
> +CONFIGURE_ARGS+=   --with-extra-cflags="-Wl,-rpath=${LOCALBASE}/lib/gcc${GCC_DEFAULT}" \
> +           --with-extra-cxxflags="-Wl,-rpath=${LOCALBASE}/lib/gcc${GCC_DEFAULT}" \
> +           --with-extra-ldflags="-Wl,-rpath=${LOCALBASE}/lib/gcc${GCC_DEFAULT} -L${LOCALBASE}/lib/gcc${GCC_DEFAULT}"
> +.else
> +MAKE_ENV+=     USE_CLANG=true
> +EXTRA_CFLAGS+=     -Wno-unused-but-set-parameter
> +EXTRA_CFLAGS+=     -Wno-bitwise-instead-of-logical \
> +           -Wno-error=deprecated-non-prototype
> +CONFIGURE_ARGS+=   --with-extra-cflags="${EXTRA_CFLAGS}"
> +CONFIGURE_ARGS+=   --with-extra-cxxflags="${EXTRA_CFLAGS}"
> +.endif
> +
> +.if ${ARCH} == aarch64
> +CONFIGURE_ARGS+=   --disable-dtrace
> +.endif
> +
> +.if empty(ICONV_LIB)
> +ICONV_CFLAGS=  -DLIBICONV_PLUG
> +.else
> +ICONV_CFLAGS=  -I${LOCALBASE}/include
> +ICONV_LDFLAGS= -L${LOCALBASE}/lib
> +ICONV_LIBS=    ${ICONV_LIB}
> +.endif
> +
> +pre-configure:
> +   @${RM} ${WRKSRC}/src/hotspot/os_cpu/bsd_ppc/thread_bsd_ppc.cpp
> +   @${MV} ${WRKSRC}/src/hotspot/os_cpu/bsd_ppc/thread_bsd_ppc.hpp \
> +       ${WRKSRC}/src/hotspot/os_cpu/bsd_ppc/javaThread_bsd_ppc.hpp
> +
> +   @${FIND} ${WRKSRC} -name '*.orig' -delete
> +   @${CHMOD} 755 ${WRKSRC}/configure
> +   @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|' \
> +       ${WRKSRC}/configure \
> +       ${WRKSRC}/src/hotspot/os/bsd/os_bsd.cpp
> +   @${REINPLACE_CMD} -e 's|%%ICONV_CFLAGS%%|${ICONV_CFLAGS}|' \
> +       -e 's|%%ICONV_LDFLAGS%%|${ICONV_LDFLAGS}|' \
> +       -e 's|%%ICONV_LIBS%%|${ICONV_LIBS}|' \
> +       ${WRKSRC}/make/autoconf/libraries.m4
> +
> +post-build:
> +.if defined(OPENJDK_SYMLINK_CACERTS)
> +   @${RM} ${JDK_IMAGEDIR}/lib/security/cacerts
> +   @${LN} -sf ${OPENJDK_SYMLINK_CACERTS} ${JDK_IMAGEDIR}/lib/security/cacerts
> +.endif
> +
> +do-install:
> +   @${MKDIR} ${STAGEDIR}${INSTALLDIR}
> +   @cd ${JDK_IMAGEDIR} && ${COPYTREE_SHARE} . ${STAGEDIR}${INSTALLDIR}
> +   @cd ${STAGEDIR}${INSTALLDIR} && \
> +       ${FIND} bin -type f -exec ${CHMOD} ${BINMODE} {} \;
> +   @${CHMOD} ${BINMODE} ${STAGEDIR}${INSTALLDIR}/lib/jspawnhelper
> +   @${ECHO} "@javavm ${INSTALLDIR}/bin/java" >> ${TMPPLIST}
> +   @${FIND} ${STAGEDIR}${INSTALLDIR} -not -type d | ${SORT} | \
> +       ${SED} -e 's|^${STAGEDIR}${PREFIX}/||' >> ${TMPPLIST}
> +
> +.include <bsd.port.post.mk>
> diff --git a/java/openjdk27/distinfo b/java/openjdk27/distinfo
> new file mode 100644
> index 000000000000..4d6d1a831435
> --- /dev/null
> +++ b/java/openjdk27/distinfo
> @@ -0,0 +1,11 @@
> +TIMESTAMP = 1789128188
> +SHA256 (openjdk26-26.0.2+10.1.aarch64.tar.xz) = 7b99121085736fea4684c8d206fb8092cc6646714cb98cd86ac47531f696be94
> +SIZE (openjdk26-26.0.2+10.1.aarch64.tar.xz) = 193206720
> +SHA256 (openjdk26-26.0.2+10.1.ppc64.tar.xz) = 1e34fc7388f0a1c2e8428272b838ffa9ce334269b95b9ee1042033a333e6d88c
> +SIZE (openjdk26-26.0.2+10.1.ppc64.tar.xz) = 191014556
> +SHA256 (openjdk26-26.0.2+10.1.ppc64le.tar.xz) = 10d93bdd5b77d32e83bb1fea07565aa5bdb4fb79c5eb7142e0435b842727166d
> +SIZE (openjdk26-26.0.2+10.1.ppc64le.tar.xz) = 192368584
> +SHA256 (openjdk26-26.0.2+10.1.x86_64.tar.xz) = 7ac6abf0c5629ff3e3969680b589269693169557254b26891c586ff3be38a165
> +SIZE (openjdk26-26.0.2+10.1.x86_64.tar.xz) = 195287176
> +SHA256 (freebsd-openjdk-jdk-27+35-2_GH0.tar.gz) = af0153831347365b8ceaa7d9ec2ad49401c2c6948e00b99a6bdb2b951e1c8796
> +SIZE (freebsd-openjdk-jdk-27+35-2_GH0.tar.gz) = 121625688
> diff --git a/java/openjdk27/files/patch-configure b/java/openjdk27/files/patch-configure
> new file mode 100644
> index 000000000000..4c97fddabcd2
> --- /dev/null
> +++ b/java/openjdk27/files/patch-configure
> @@ -0,0 +1,14 @@
> +--- configure.orig 2025-10-24 11:51:54 UTC
> ++++ configure
> +@@ -1,4 +1,4 @@
> +-#!/bin/bash
> ++#!%%LOCALBASE%%/bin/bash
> + #
> + # Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved.
> + # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
> +@@ -36,4 +36,4 @@ fi
> + # Delegate to wrapper, forcing wrapper to believe $0 is this script by using -c.
> + # This trick is needed to get autoconf to co-operate properly.
> + # The ${-:+-$-} construction passes on bash options.
> +-bash ${-:+-$-} -c ". \"${this_script_dir}/make/autoconf/configure\"" "${this_script_dir}/configure" CHECKME "${this_script_dir}" "$@"
> ++%%LOCALBASE%%/bin/bash ${-:+-$-} -c ". \"${this_script_dir}/make/autoconf/configure\"" "${this_script_dir}/configure" CHECKME "${this_script_dir}" "$@"
> diff --git a/java/openjdk27/files/patch-make_autoconf_flags-cflags.m4 b/java/openjdk27/files/patch-make_autoconf_flags-cflags.m4
> new file mode 100644
> index 000000000000..81bc372519f5
> --- /dev/null
> +++ b/java/openjdk27/files/patch-make_autoconf_flags-cflags.m4
> @@ -0,0 +1,12 @@
> +--- make/autoconf/flags-cflags.m4.orig 2025-09-16 10:24:48 UTC
> ++++ make/autoconf/flags-cflags.m4
> +@@ -780,6 +780,9 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
> +         # Use Power8, this is the first CPU to support PPC64 LE with ELFv2 ABI.
> +         $1_CFLAGS_CPU_JVM="${$1_CFLAGS_CPU_JVM} -DABI_ELFv2 -mcpu=power8 -mtune=power10"
> +       fi
> ++      if test "x$FLAGS_CPU" = xppc64; then
> ++        $1_CFLAGS_CPU_JVM="${$1_CFLAGS_CPU_JVM} -DABI_ELFv2 -mcpu=powerpc64 -mtune=power5"
> ++      fi
> +     fi
> +     if test "x$OPENJDK_TARGET_OS" = xaix; then
> +       $1_CFLAGS_CPU="-mcpu=pwr8"
> diff --git a/java/openjdk27/files/patch-make_autoconf_libraries.m4 b/java/openjdk27/files/patch-make_autoconf_libraries.m4
> new file mode 100644
> index 000000000000..9c86f7093ac7
> --- /dev/null
> +++ b/java/openjdk27/files/patch-make_autoconf_libraries.m4
> @@ -0,0 +1,15 @@
> +--- make/autoconf/libraries.m4.orig    2025-10-24 12:39:13 UTC
> ++++ make/autoconf/libraries.m4
> +@@ -212,9 +212,9 @@ AC_DEFUN_ONCE([LIB_SETUP_MISC_LIBS],
> +       ICONV_LDFLAGS="-L/usr/local/lib"
> +       ICONV_LIBS=-liconv
> +     elif test "x$OPENJDK_TARGET_OS_ENV" = "xbsd.freebsd"; then
> +-      ICONV_CFLAGS=-DLIBICONV_PLUG
> +-      ICONV_LDFLAGS=
> +-      ICONV_LIBS=
> ++      ICONV_CFLAGS=%%ICONV_CFLAGS%%
> ++      ICONV_LDFLAGS=%%ICONV_LDFLAGS%%
> ++      ICONV_LIBS=%%ICONV_LIBS%%
> +     else
> +       ICONV_CFLAGS=
> +       ICONV_LDFLAGS=
> diff --git a/java/openjdk27/files/patch-src_hotspot_os__cpu_bsd__ppc_atomicAccess__bsd__ppc.hpp b/java/openjdk27/files/patch-src_hotspot_os__cpu_bsd__ppc_atomicAccess__bsd__ppc.hpp
> new file mode 100644
> index 000000000000..b72ed96107c4
> --- /dev/null
> +++ b/java/openjdk27/files/patch-src_hotspot_os__cpu_bsd__ppc_atomicAccess__bsd__ppc.hpp
> @@ -0,0 +1,30 @@
> +--- src/hotspot/os_cpu/bsd_ppc/atomicAccess_bsd_ppc.hpp.orig   2026-04-13 10:20:52 UTC
> ++++ src/hotspot/os_cpu/bsd_ppc/atomicAccess_bsd_ppc.hpp
> +@@ -0,0 +1,27 @@
> ++/*
> ++ * Copyright (c) 1997, 2025, Oracle and/or its affiliates. All rights reserved.
> ++ * Copyright (c) 2012, 2025 SAP SE. All rights reserved.
> ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
> ++ *
> ++ * This code is free software; you can redistribute it and/or modify it
> ++ * under the terms of the GNU General Public License version 2 only, as
> ++ * published by the Free Software Foundation.
> ++ *
> ++ * This code is distributed in the hope that it will be useful, but WITHOUT
> ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> ++ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> ++ * version 2 for more details (a copy is included in the LICENSE file that
> ++ * accompanied this code).
> ++ *
> ++ * You should have received a copy of the GNU General Public License version
> ++ * 2 along with this work; if not, write to the Free Software Foundation,
> ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
> ++ *
> ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
> ++ * or visit www.oracle.com if you need additional information or have any
> ++ * questions.
> ++ *
> ++ */
> ++
> ++// Including inline assembler functions that are shared between multiple PPC64 platforms.
> ++#include "atomicAccess_ppc.hpp"
> diff --git a/java/openjdk27/files/patch-src_hotspot_os__cpu_bsd__ppc_orderAccess__bsd__ppc.hpp b/java/openjdk27/files/patch-src_hotspot_os__cpu_bsd__ppc_orderAccess__bsd__ppc.hpp
> new file mode 100644
> index 000000000000..07877328b08c
> --- /dev/null
> +++ b/java/openjdk27/files/patch-src_hotspot_os__cpu_bsd__ppc_orderAccess__bsd__ppc.hpp
> @@ -0,0 +1,80 @@
> +--- src/hotspot/os_cpu/bsd_ppc/orderAccess_bsd_ppc.hpp.orig    2026-04-13 11:00:19 UTC
> ++++ src/hotspot/os_cpu/bsd_ppc/orderAccess_bsd_ppc.hpp
> +@@ -1,6 +1,6 @@
> + /*
> +- * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
> +- * Copyright (c) 2012, 2014 SAP SE. All rights reserved.
> ++ * Copyright (c) 1997, 2025, Oracle and/or its affiliates. All rights reserved.
> ++ * Copyright (c) 2012, 2025 SAP SE. All rights reserved.
> +  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
> +  *
> +  * This code is free software; you can redistribute it and/or modify it
> +@@ -23,66 +23,5 @@
> +  *
> +  */
> +
> +-#ifndef OS_CPU_BSD_PPC_VM_ORDERACCESS_BSD_PPC_HPP
> +-#define OS_CPU_BSD_PPC_VM_ORDERACCESS_BSD_PPC_HPP
> +-
> +-// Included in orderAccess.hpp header file.
> +-
> +-#ifndef PPC64
> +-#error "OrderAccess currently only implemented for PPC64"
> +-#endif
> +-
> +-// Compiler version last used for testing: gcc 4.1.2
> +-// Please update this information when this file changes
> +-
> +-// Implementation of class OrderAccess.
> +-
> +-//
> +-// Machine barrier instructions:
> +-//
> +-// - sync            Two-way memory barrier, aka fence.
> +-// - lwsync          orders  Store|Store,
> +-//                            Load|Store,
> +-//                            Load|Load,
> +-//                   but not Store|Load
> +-// - eieio           orders  Store|Store
> +-// - isync           Invalidates speculatively executed instructions,
> +-//                   but isync may complete before storage accesses
> +-//                   associated with instructions preceding isync have
> +-//                   been performed.
> +-//
> +-// Semantic barrier instructions:
> +-// (as defined in orderAccess.hpp)
> +-//
> +-// - release         orders Store|Store,       (maps to lwsync)
> +-//                           Load|Store
> +-// - acquire         orders  Load|Store,       (maps to lwsync)
> +-//                           Load|Load
> +-// - fence           orders Store|Store,       (maps to sync)
> +-//                           Load|Store,
> +-//                           Load|Load,
> +-//                          Store|Load
> +-//
> +-
> +-#define inlasm_sync()     __asm__ __volatile__ ("sync"   : : : "memory");
> +-#define inlasm_lwsync()   __asm__ __volatile__ ("lwsync" : : : "memory");
> +-#define inlasm_eieio()    __asm__ __volatile__ ("eieio"  : : : "memory");
> +-#define inlasm_isync()    __asm__ __volatile__ ("isync"  : : : "memory");
> +-
> +-inline void   OrderAccess::loadload()   { inlasm_lwsync(); }
> +-inline void   OrderAccess::storestore() { inlasm_lwsync(); }
> +-inline void   OrderAccess::loadstore()  { inlasm_lwsync(); }
> +-inline void   OrderAccess::storeload()  { inlasm_sync();   }
> +-
> +-inline void   OrderAccess::acquire()    { inlasm_lwsync(); }
> +-inline void   OrderAccess::release()    { inlasm_lwsync(); }
> +-inline void   OrderAccess::fence()      { inlasm_sync();   }
> +-inline void   OrderAccess::cross_modify_fence_impl()
> +-                                        { inlasm_isync();  }
> +-
> +-#undef inlasm_sync
> +-#undef inlasm_lwsync
> +-#undef inlasm_eieio
> +-#undef inlasm_isync
> +-
> +-#endif // OS_CPU_BSD_PPC_VM_ORDERACCESS_BSD_PPC_HPP
> ++// Including inline assembler functions that are shared between multiple PPC64 platforms.
> ++#include "orderAccess_ppc.hpp"
> diff --git a/java/openjdk27/files/patch-src_hotspot_os__cpu_bsd__ppc_os__bsd__ppc.cpp b/java/openjdk27/files/patch-src_hotspot_os__cpu_bsd__ppc_os__bsd__ppc.cpp
> new file mode 100644
> index 000000000000..d6c4a26c8093
> --- /dev/null
> +++ b/java/openjdk27/files/patch-src_hotspot_os__cpu_bsd__ppc_os__bsd__ppc.cpp
> @@ -0,0 +1,89 @@
> +--- src/hotspot/os_cpu/bsd_ppc/os_bsd_ppc.cpp.orig 2026-04-13 11:53:22 UTC
> ++++ src/hotspot/os_cpu/bsd_ppc/os_bsd_ppc.cpp
> +@@ -179,7 +179,7 @@ intptr_t* os::fetch_bcp_from_context(const void* ucVoi
> +   assert(ucVoid != nullptr, "invariant");
> +   const ucontext_t* uc = (const ucontext_t*)ucVoid;
> +   assert(os::Posix::ucontext_is_interpreter(uc), "invariant");
> +-  return reinterpret_cast<intptr_t*>(uc->uc_mcontext.regs->gpr[14]); // R14_bcp
> ++  return reinterpret_cast<intptr_t*>(uc->uc_mcontext.mc_gpr[14]); // R14_bcp
> + }
> +
> + frame os::get_sender_for_C_frame(frame* fr) {
> +@@ -204,7 +204,6 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig,
> +   address stub = nullptr;
> +   address pc   = nullptr;
> +
> +-  //%note os_trap_1
> +   if (info != nullptr && uc != nullptr && thread != nullptr) {
> +     pc = (address) os::Posix::ucontext_get_pc(uc);
> +
> +@@ -279,15 +278,7 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig,
> +
> +       CodeBlob *cb = nullptr;
> +       int stop_type = -1;
> +-      // Handle signal from NativeJump::patch_verified_entry().
> +-      if (sig == SIGILL && nativeInstruction_at(pc)->is_sigill_not_entrant()) {
> +-        if (TraceTraps) {
> +-          tty->print_cr("trap: not_entrant");
> +-        }
> +-        stub = SharedRuntime::get_handle_wrong_method_stub();
> +-      }
> +-
> +-      else if ((sig == (USE_POLL_BIT_ONLY ? SIGTRAP : SIGSEGV)) &&
> ++      if ((sig == (USE_POLL_BIT_ONLY ? SIGTRAP : SIGSEGV)) &&
> +                // A bsd-ppc64 kernel before 2.6.6 doesn't set si_addr on some segfaults
> +                // in 64bit mode (cf. http://www.kernel.org/pub/bsd/kernel/v2.6/ChangeLog-2.6.6),
> +                // especially when we try to read from the safepoint polling page. So the check
> +@@ -315,6 +306,17 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig,
> +         stub = SharedRuntime::polling_page_return_handler_blob()->entry_point();
> +       }
> +
> ++      // SIGTRAP-based nmethod entry barriers.
> ++      else if (sig == SIGTRAP && TrapBasedNMethodEntryBarriers &&
> ++               nativeInstruction_at(pc)->is_sigtrap_nmethod_entry_barrier() &&
> ++               CodeCache::contains((void*) pc)) {
> ++        if (TraceTraps) {
> ++          tty->print_cr("trap: nmethod entry barrier at " INTPTR_FORMAT " (SIGTRAP)", p2i(pc));
> ++        }
> ++        stub = StubRoutines::method_entry_barrier();
> ++        uc->uc_mcontext.mc_lr = (uintptr_t)(pc + BytesPerInstWord); // emulate call by setting LR
> ++      }
> ++
> +       // SIGTRAP-based ic miss check in compiled code.
> +       else if (sig == SIGTRAP && TrapBasedICMissChecks &&
> +                nativeInstruction_at(pc)->is_sigtrap_ic_miss_check()) {
> +@@ -408,7 +410,8 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig,
> +                         // flushing of icache is not necessary.
> +         stub = pc + 4;  // continue with next instruction.
> +       }
> +-      else if (thread->thread_state() == _thread_in_vm &&
> ++      else if ((thread->thread_state() == _thread_in_vm ||
> ++                thread->thread_state() == _thread_in_native) &&
> +                sig == SIGBUS && thread->doing_unsafe_access()) {
> +         address next_pc = pc + 4;
> +         if (UnsafeMemoryAccess::contains_pc(pc)) {
> +@@ -419,6 +422,15 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig,
> +         return true;
> +       }
> +     }
> ++
> ++    // jni_fast_Get<Primitive>Field can trap at certain pc's if a GC kicks in
> ++    // and the heap gets shrunk before the field access.
> ++    if ((sig == SIGSEGV) || (sig == SIGBUS)) {
> ++      address addr = JNI_FastGetField::find_slowcase_pc(pc);
> ++      if (addr != (address)-1) {
> ++        stub = addr;
> ++      }
> ++    }
> +   }
> +
> +   if (stub != nullptr) {
> +@@ -497,7 +509,7 @@ void os::print_register_info(outputStream *st, const v
> +       break;
> +     default:
> +       st->print("r%-2d=", n-3);
> +-      print_location(st, uc->uc_mcontext.mc_gpr[n-3]);
> ++      print_location(st, (intptr_t)uc->uc_mcontext.mc_gpr[n-3]);
> +       break;
> +     }
> +     ++n;
> diff --git a/java/openjdk27/files/patch-src_hotspot_os__cpu_bsd__ppc_vm__version__bsd__ppc.cpp b/java/openjdk27/files/patch-src_hotspot_os__cpu_bsd__ppc_vm__version__bsd__ppc.cpp
> new file mode 100644
> index 000000000000..8246af15358d
> --- /dev/null
> +++ b/java/openjdk27/files/patch-src_hotspot_os__cpu_bsd__ppc_vm__version__bsd__ppc.cpp
> @@ -0,0 +1,49 @@
> +--- src/hotspot/os_cpu/bsd_ppc/vm_version_bsd_ppc.cpp.orig  2026-09-03 11:42:54 UTC
> ++++ src/hotspot/os_cpu/bsd_ppc/vm_version_bsd_ppc.cpp
> +@@ -0,0 +1,46 @@
> ++/*
> ++ * Copyright (c) 2026, Piotr Kubaj. All rights reserved.
> ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
> ++ *
> ++ * This code is free software; you can redistribute it and/or modify it
> ++ * under the terms of the GNU General Public License version 2 only, as
> ++ * published by the Free Software Foundation.
> ++ *
> ++ * This code is distributed in the hope that it will be useful, but WITHOUT
> ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> ++ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> ++ * version 2 for more details (a copy is included in the LICENSE file that
> ++ * accompanied this code).
> ++ *
> ++ * You should have received a copy of the GNU General Public License version
> ++ * 2 along with this work; if not, write to the Free Software Foundation,
> ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
> ++ *
> ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
> ++ * or visit www.oracle.com if you need additional information or have any
> ++ * questions.
> ++ *
> ++ */
> ++
> ++#include "runtime/vm_version.hpp"
> ++
> ++#include <sys/types.h>
> ++#include <sys/sysctl.h>
> ++
> ++// FreeBSD exposes a single PPC coherency block size covering both caches.
> ++static int cacheline_size() {
> ++  int size = 0;
> ++  size_t len = sizeof(size);
> ++  if (sysctlbyname("machdep.cacheline_size", &size, &len, nullptr, 0) != 0 || size <= 0) {
> ++    return DEFAULT_CACHE_LINE_SIZE;
> ++  }
> ++  return size;
> ++}
> ++
> ++int VM_Version::get_dcache_line_size() {
> ++  return cacheline_size();
> ++}
> ++
> ++int VM_Version::get_icache_line_size() {
> ++  return cacheline_size();
> ++}
> diff --git a/java/openjdk27/files/patch-src_hotspot_os_bsd_os__bsd.cpp b/java/openjdk27/files/patch-src_hotspot_os_bsd_os__bsd.cpp
> new file mode 100644
> index 000000000000..d00189abbf2c
> --- /dev/null
> +++ b/java/openjdk27/files/patch-src_hotspot_os_bsd_os__bsd.cpp
> @@ -0,0 +1,22 @@
> +--- src/hotspot/os/bsd/os_bsd.cpp.orig 2026-04-22 18:05:58 UTC
> ++++ src/hotspot/os/bsd/os_bsd.cpp
> +@@ -132,6 +132,10 @@
> + #define KINFO_PROC_T   kinfo_proc
> + #define KI_RSS         p_vm_rssize
> + #elif defined(__FreeBSD__)
> ++  #if ( defined(__aarch64__) && __FreeBSD_version >= 160000 )
> ++    // do not redefine "breakpoint"
> ++    #define _MACHINE_CPUFUNC_H_
> ++  #endif
> + #include <sys/user.h>
> + #define KERN_PROC_MIB  KERN_PROC
> + #define KINFO_PROC_T   kinfo_proc
> +@@ -480,7 +484,7 @@ void os::init_system_properties_values() {
> +     #elif defined(__NetBSD__)
> +       #define DEFAULT_LIBPATH "/usr/lib:/usr/pkg/lib"
> +     #else
> +-      #define DEFAULT_LIBPATH "/usr/lib:/usr/local/lib"
> ++      #define DEFAULT_LIBPATH "/usr/lib:%%LOCALBASE%%/lib"
> +     #endif
> +   #else
> +     #define DEFAULT_LIBPATH OVERRIDE_LIBPATH
> diff --git a/java/openjdk27/files/patch-src_hotspot_os_bsd_os__perf__bsd.cpp b/java/openjdk27/files/patch-src_hotspot_os_bsd_os__perf__bsd.cpp
> new file mode 100644
> index 000000000000..ca9cd087b470
> --- /dev/null
> +++ b/java/openjdk27/files/patch-src_hotspot_os_bsd_os__perf__bsd.cpp
> @@ -0,0 +1,13 @@
> +--- src/hotspot/os/bsd/os_perf_bsd.cpp.orig    2026-04-22 18:05:58 UTC
> ++++ src/hotspot/os/bsd/os_perf_bsd.cpp
> +@@ -34,6 +34,10 @@
> +   #include <mach/task_info.h>
> + #else
> + # if !defined(__NetBSD__)
> ++  #if ( defined(__aarch64__) && __FreeBSD_version >= 160000 )
> ++    // do not redefine "breakpoint"
> ++    #define _MACHINE_CPUFUNC_H_
> ++  #endif
> +   #include <sys/user.h>
> + # endif
> +   #include <sys/sched.h>
> diff --git a/java/openjdk27/pkg-descr b/java/openjdk27/pkg-descr
> new file mode 100644
> index 000000000000..a6701ff6ef33
> --- /dev/null
> +++ b/java/openjdk27/pkg-descr
> @@ -0,0 +1 @@
> +An open-source implementation of the Java Platform, Standard Edition.
> diff --git a/java/openjdk27/pkg-message b/java/openjdk27/pkg-message
> new file mode 100644
> index 000000000000..c072654ad070
> --- /dev/null
> +++ b/java/openjdk27/pkg-message
> @@ -0,0 +1,15 @@
> +[
> +{ type: install
> +  message: <<EOM
> +This OpenJDK implementation may require procfs(5) mounted on /proc.
> +
> +If you have not done it yet, please do the following:
> +
> +   mount -t procfs proc /proc
> +
> +To make it permanent, you need the following lines in /etc/fstab:
> +
> +   proc    /proc       procfs      rw  0   0
> +EOM
> +}
> +]
>  
> 
> 
>