This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-mvnd.git


The following commit(s) were added to refs/heads/master by this push:
     new 99bd55d8 Fix CI: GraalVM 25 native builds with glibc backward 
compatibility (#1611)
99bd55d8 is described below

commit 99bd55d8dc9e4b4ac092c3bf7231ea0b4984ee7b
Author: Guillaume Nodet <[email protected]>
AuthorDate: Tue May 19 08:30:27 2026 +0200

    Fix CI: GraalVM 25 native builds with glibc backward compatibility (#1611)
    
    * Pin graalvm/setup-graalvm to ASF-allowed hash and bump Java to 25
    
    ASF policy requires GitHub Actions to use commit hashes instead of tags
    for third-party actions. The graalvm/setup-graalvm@v1 tag reference was
    blocked, causing CI startup failures.
    
    Additionally, native-maven-plugin 1.1.0 (upgraded via dependabot while
    CI was down) downloads reachability metadata with a schema that GraalVM
    for JDK 22 does not support. Bumping to JDK 25 resolves this.
    
    Also fix release.yaml source job: remove undefined GRAALVM_VERSION
    reference and add missing distribution parameter.
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
    
    * Fix spotless formatting and make glibc patching resilient to GraalVM 25
    
    - Fix indentation in BuildTimeEventSpy.java (spotless violation)
    - Replace hardcoded ls of libjvm.a/liblibchelper.a with find in the
      glibc patching scripts — these files were removed in GraalVM 25
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
    
    * Fix Spotless formatting, drop macOS Intel, fix matrix excludes
    
    - Fix DaemonCrashTest.java Spotless formatting violation
    - Remove macOS Intel (macos-15-intel) from CI matrices since Oracle
      dropped macOS x64 support in GraalVM 25.0.2+
    - Fix exclude rules that referenced macos-latest/windows-latest
      instead of macos-15/windows-2025, causing extra unwanted matrix jobs
    - Remove darwin-amd64 deploy steps from release workflow
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
    
    * Upgrade Quarkus to 3.35.3 and Java 17 in type-description test
    
    Quarkus 3.10.0's Byte Buddy does not support JDK 25 class file format,
    causing test failures. Upgrade to 3.35.3 and set Java source/target to
    17 (minimum required by modern Quarkus).
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
    
    * Upgrade maven-invoker-plugin to 3.10.1 in invoker test project
    
    The bundled Groovy 4.0.31 in maven-invoker-plugin 3.10.1 supports
    JDK 25 class file version 69, fixing the verify.groovy script failure.
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
    
    * Fix glibc compatibility for GraalVM 25 native builds
    
    GraalVM 25 links against stat@GLIBC_2.33 which breaks backward
    compatibility. Add stat symbol redefinition to pin it to older glibc
    versions, and separate the glibc patching into arch-specific steps
    (AMD64 targeting glibc 2.12, ARM64 targeting glibc 2.17).
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
    
    * Fix Linux native build: use ARM runner and find for GraalVM 25
    
    - Use ubuntu-24.04-arm runner for ARM64 builds instead of os×arch
      matrix that always ran on x64
    - Use runner.arch instead of matrix.arch for architecture detection
    - Use find with 2>/dev/null for svm/clibraries paths since GraalVM 25
      removed libjvm.a and liblibchelper.a from that directory
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
    
    * ci: add stat() shim for glibc <2.33 compat and relax ldd checks
    
    GraalVM 25 native-image calls stat() directly (compiled against
    glibc 2.33+ headers where stat is a real function). On older glibc,
    stat() was a macro expanding to __xstat(_STAT_VER, ...).
    
    Add a stat-compat.c shim that provides stat() by calling __xstat(1, ...)
    and link it into Scrt1.o so the symbol resolves at link time.
    
    Also remove the hardcoded ldd library count check (expected 4 separate
    libs: libc/libdl/librt/libpthread) since GraalVM 25 with
    +StaticExecutableWithDynamicLibC only dynamically links libc.so.
    The objdump GLIBC version check remains as the real guard.
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
    
    * ci: fix shell syntax error in glibc patch comment
    
    Remove parentheses from bash comment that were being interpreted
    as shell syntax by the : (no-op) command.
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
    
    * ci: add ARM64 glibc backward-compat profile and gcc wrapper
    
    Add a Maven profile activated by target/graalvm-libs-for-glibc-2.17
    that configures native-image to use the patched ARM64 libraries,
    mirroring the existing x86_64 profile for glibc-2.12.
    
    Add gcc-aarch64 wrapper that applies glibc.redef.aarch64 symbol
    renaming during native-image's final link step.
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
    
    * ci: fix aarch64 glibc symver directives in dynamic-libc-start.c
    
    The .symver directives hardcoded x86_64 glibc symbol versions
    (dlsym@GLIBC_2.2.5) which don't exist on aarch64 where the
    earliest version is GLIBC_2.17. Make the directives conditional
    on __aarch64__ to use the correct version tag per architecture.
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
    
    ---------
    
    Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
---
 .github/workflows/early-access.yaml                | 71 ++++++++++++++--------
 .github/workflows/release.yaml                     | 45 ++++----------
 client/pom.xml                                     | 30 +++++++++
 .../src/main/resources/glibc/dynamic-libc-start.c  |  5 ++
 client/src/main/resources/glibc/gcc-aarch64        | 27 ++++++++
 client/src/main/resources/glibc/glibc.redef        |  1 +
 .../glibc/{glibc.redef => glibc.redef.aarch64}     | 39 ++++++------
 client/src/main/resources/glibc/stat-compat.c      | 33 ++++++++++
 .../mvndaemon/mvnd/timing/BuildTimeEventSpy.java   |  2 +-
 .../org/mvndaemon/mvnd/it/DaemonCrashTest.java     |  7 ++-
 .../src/test/projects/invoker/pom.xml              |  2 +-
 .../src/test/projects/type-description/pom.xml     |  6 +-
 12 files changed, 183 insertions(+), 85 deletions(-)

diff --git a/.github/workflows/early-access.yaml 
b/.github/workflows/early-access.yaml
index 10b931fc..30c3979e 100644
--- a/.github/workflows/early-access.yaml
+++ b/.github/workflows/early-access.yaml
@@ -26,7 +26,7 @@ on:
   pull_request:
 
 env:
-  JAVA_VERSION: '22'
+  JAVA_VERSION: '25'
 
 concurrency:
   group: ${{ github.workflow }}-${{ github.ref }}
@@ -74,21 +74,13 @@ jobs:
           include-hidden-files: 'true'
 
   native-build:
-    name: 'Build with GraalVM on ${{ matrix.os }}-${{ matrix.arch }}'
+    name: 'Build with GraalVM on ${{ matrix.os }}'
     if: startsWith(github.event.head_commit.message, '[release] Release ') != 
true
     strategy:
       fail-fast: false
       matrix:
-        # binaries wanted: linux amd64, mac M1, mac intel, windows x86
-        os: [ ubuntu-24.04, macos-15, macos-15-intel, windows-2025 ]
-        arch: [ x64, arm64 ]
-        exclude:
-          - os: macos-latest
-            arch: x64
-          - os: macos-15-intel
-            arch: arm64
-          - os: windows-latest
-            arch: arm64
+        # binaries wanted: linux amd64, linux arm64, mac M1, windows x86
+        os: [ ubuntu-24.04, ubuntu-24.04-arm, macos-15, windows-2025 ]
     runs-on: ${{ matrix.os }}
 
     steps:
@@ -98,7 +90,7 @@ jobs:
       - name: 'Set vars'
         shell: bash
         run: |
-          ARCH=$(echo '${{ matrix.arch }}' | awk '{print tolower($0)}')
+          ARCH=$(echo '${{ runner.arch }}' | awk '{print tolower($0)}')
           if [[ $ARCH == 'x64' ]]
           then
             echo "ARCH=amd64" >> $GITHUB_ENV
@@ -118,7 +110,7 @@ jobs:
           echo "VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q 
-DforceStdout)" >> $GITHUB_ENV
 
       - name: 'Set up GraalVM'
-        uses: graalvm/setup-graalvm@v1
+        uses: graalvm/setup-graalvm@bef4b0e916c7dd079bf60fb95d49139f67e32c5f # 
v1.5.3
         with:
           java-version: ${{ env.JAVA_VERSION }}
           distribution: 'graalvm'
@@ -143,39 +135,70 @@ jobs:
       - name: 'Maven clean'
         run: ./mvnw clean -Dmrm=false -V -B -ntp -e
 
-      - name: 'Patch GraalVM libs for only requiring glibc 2.12'
-        if: ${{ env.OS == 'linux' }}
+      - name: 'Patch AMD64 GraalVM libs for only requiring glibc 2.12'
+        if: ${{ env.OS == 'linux' && env.ARCH == 'amd64' }}
         shell: bash
         run: |
           mkdir -p client/target/graalvm-libs-for-glibc-2.12
 
           : patch common libraries
-          ( find "$GRAALVM_HOME/lib/static/linux-amd64/glibc" -name '*.a'
-            ls -1 /lib/x86_64-linux-gnu/libz.a
-            ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-amd64/libjvm.a"
-            ls -1 
"$GRAALVM_HOME/lib/svm/clibraries/linux-amd64/liblibchelper.a"
+          ( find "$GRAALVM_HOME/lib/static/linux-amd64/glibc" -name '*.a' 
2>/dev/null
+            find "$GRAALVM_HOME/lib/svm/clibraries/linux-amd64" -name '*.a' 
2>/dev/null
+            ls -1 /lib/x86_64-linux-gnu/libz.a 2>/dev/null
           ) | while IFS= read -r input; do
                 output="client/target/graalvm-libs-for-glibc-2.12/$(basename 
-- "$input")"
                 objcopy 
--redefine-syms=client/src/main/resources/glibc/glibc.redef -- "$input" 
"$output" 2>/dev/null
               done
 
+          : compile stat backward-compat shim for glibc before 2.33
+          gcc -O3 -Os -Wall -Wextra -Werror -c -o client/target/stat-compat.o 
client/src/main/resources/glibc/stat-compat.c
+
           : patch gcc startfile
           gcc -O3 -Os -Wall -Wextra -Werror -Wconversion -Wsign-conversion 
-Wcast-qual -pedantic -c -o client/target/dynamic-libc-start.o 
client/src/main/resources/glibc/dynamic-libc-start.c
-          ld -r /lib/x86_64-linux-gnu/Scrt1.o 
client/target/dynamic-libc-start.o -o 
client/target/graalvm-libs-for-glibc-2.12/Scrt1.o
+          ld -r /lib/x86_64-linux-gnu/Scrt1.o 
client/target/dynamic-libc-start.o client/target/stat-compat.o -o 
client/target/graalvm-libs-for-glibc-2.12/Scrt1.o
           objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef 
client/target/graalvm-libs-for-glibc-2.12/Scrt1.o 2>/dev/null
 
+      - name: 'Patch ARM64 GraalVM libs for only requiring glibc 2.17'
+        if: ${{ env.OS == 'linux' && env.ARCH == 'aarch64' }}
+        shell: bash
+        run: |
+          mkdir -p client/target/graalvm-libs-for-glibc-2.17
+
+          : patch common libraries
+          ( find "$GRAALVM_HOME/lib/static/linux-aarch64/glibc" -name '*.a' 
2>/dev/null
+            find "$GRAALVM_HOME/lib/svm/clibraries/linux-aarch64" -name '*.a' 
2>/dev/null
+            ls -1 /lib/aarch64-linux-gnu/libz.a 2>/dev/null
+          ) | while IFS= read -r input; do
+                output="client/target/graalvm-libs-for-glibc-2.17/$(basename 
-- "$input")"
+                objcopy 
--redefine-syms=client/src/main/resources/glibc/glibc.redef.aarch64 -- "$input" 
"$output" 2>/dev/null
+              done
+
+          : patch gcc startfile
+          gcc -O3 -Os -Wall -Wextra -Werror -Wconversion -Wsign-conversion 
-Wcast-qual -pedantic -c -o client/target/dynamic-libc-start.o 
client/src/main/resources/glibc/dynamic-libc-start.c
+          ld -r /lib/aarch64-linux-gnu/Scrt1.o 
client/target/dynamic-libc-start.o -o 
client/target/graalvm-libs-for-glibc-2.17/Scrt1.o
+          objcopy 
--redefine-syms=client/src/main/resources/glibc/glibc.redef.aarch64 
client/target/graalvm-libs-for-glibc-2.17/Scrt1.o 2>/dev/null
+
       - name: 'Build native distribution'
         run: ./mvnw verify -Pnative -Dmrm=false -V -B -ntp -e -s 
.mvn/release-settings.xml
 
-      - name: 'Verify native binary for only requiring glibc 2.12'
-        if: ${{ env.OS == 'linux' }}
+      - name: 'Verify AMD64 native binary for only requiring glibc 2.12'
+        if: ${{ env.OS == 'linux' && env.ARCH == 'amd64' }}
         shell: bash
         run: |
-          (( 4 == "$(ldd client/target/mvnd | awk '{print $1}' | sort -u | 
grep -c 'lib\(c\|dl\|rt\|pthread\)\.so\.[0-9]')" )) || ( ldd client/target/mvnd 
&& false )
+          ldd client/target/mvnd
           err=0
           objdump -T client/target/mvnd | grep GLIBC_ | grep -v 
'GLIBC_\([01]\|2\.[0-9]\|2\.1[012]\)[^0-9]' || err=$?
           (( err == 1 ))
 
+      - name: 'Verify ARM64 native binary for only requiring glibc 2.17'
+        if: ${{ env.OS == 'linux' && env.ARCH == 'aarch64' }}
+        shell: bash
+        run: |
+          ldd client/target/mvnd
+          err=0
+          objdump -T client/target/mvnd | grep GLIBC_ | grep -v 
'GLIBC_\([01]\|2\.[0-9]\|2\.1[017]\)[^0-9]' || err=$?
+          (( err == 1 ))
+
       - name: 'Upload daemon test logs'
         if: always()
         uses: actions/upload-artifact@v7
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index a39576e4..82db3807 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -26,7 +26,7 @@ on:
       - '*'
 
 env:
-  JAVA_VERSION: '22'
+  JAVA_VERSION: '25'
 
 jobs:
   build:
@@ -34,15 +34,13 @@ jobs:
     strategy:
       fail-fast: true
       matrix:
-        # binaries wanted
-        os: [ ubuntu-24.04, macos-15, macos-15-intel, windows-2025 ]
+        # binaries wanted: linux amd64, linux arm64, mac M1, windows x86
+        os: [ ubuntu-24.04, macos-15, windows-2025 ]
         arch: [ x64, arm64 ]
         exclude:
-          - os: macos-latest
+          - os: macos-15
             arch: x64
-          - os: macos-15-intel
-            arch: arm64
-          - os: windows-latest
+          - os: windows-2025
             arch: arm64
     runs-on: ${{ matrix.os }}
 
@@ -73,7 +71,7 @@ jobs:
           echo "VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q 
-DforceStdout --raw-streams)" >> $GITHUB_ENV
 
       - name: 'Set up GraalVM'
-        uses: graalvm/setup-graalvm@v1
+        uses: graalvm/setup-graalvm@bef4b0e916c7dd079bf60fb95d49139f67e32c5f # 
v1.5.3
         with:
           java-version: ${{ env.JAVA_VERSION }}
           distribution: 'graalvm'
@@ -89,10 +87,9 @@ jobs:
           mkdir -p client/target/graalvm-libs-for-glibc-2.12
 
           : patch common libraries
-          ( find "$GRAALVM_HOME/lib/static/linux-amd64/glibc" -name '*.a'
-            ls -1 /lib/x86_64-linux-gnu/libz.a
-            ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-amd64/libjvm.a"
-            ls -1 
"$GRAALVM_HOME/lib/svm/clibraries/linux-amd64/liblibchelper.a"
+          ( find "$GRAALVM_HOME/lib/static/linux-amd64/glibc" -name '*.a' 
2>/dev/null
+            find "$GRAALVM_HOME/lib/svm/clibraries/linux-amd64" -name '*.a' 
2>/dev/null
+            ls -1 /lib/x86_64-linux-gnu/libz.a 2>/dev/null
           ) | while IFS= read -r input; do
                 output="client/target/graalvm-libs-for-glibc-2.12/$(basename 
-- "$input")"
                 objcopy 
--redefine-syms=client/src/main/resources/glibc/glibc.redef -- "$input" 
"$output" 2>/dev/null
@@ -153,10 +150,10 @@ jobs:
           echo "VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q 
-DforceStdout)" >> $GITHUB_ENV
 
       - name: 'Set up GraalVM'
-        uses: graalvm/setup-graalvm@v1
+        uses: graalvm/setup-graalvm@bef4b0e916c7dd079bf60fb95d49139f67e32c5f # 
v1.5.3
         with:
-          version: ${{ env.GRAALVM_VERSION }}
           java-version: ${{ env.JAVA_VERSION }}
+          distribution: 'graalvm'
           github-token: ${{ secrets.GITHUB_TOKEN }}
 
       - name: 'Build source distribution'
@@ -254,26 +251,6 @@ jobs:
           asset_name: maven-mvnd-${{ env.VERSION }}-linux-amd64.tar.gz
           asset_content_type: application/x-gzip
 
-      - name: Deploy maven-mvnd-darwin-amd64.zip
-        uses: actions/upload-release-asset@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          upload_url: ${{ steps.create_release.outputs.upload_url }}
-          asset_path: mvnd-darwin-amd64/maven-mvnd-${{ env.VERSION 
}}-darwin-amd64.zip
-          asset_name: maven-mvnd-${{ env.VERSION }}-darwin-amd64.zip
-          asset_content_type: application/zip
-
-      - name: Deploy maven-mvnd-darwin-amd64.tar.gz
-        uses: actions/upload-release-asset@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          upload_url: ${{ steps.create_release.outputs.upload_url }}
-          asset_path: mvnd-darwin-amd64/maven-mvnd-${{ env.VERSION 
}}-darwin-amd64.tar.gz
-          asset_name: maven-mvnd-${{ env.VERSION }}-darwin-amd64.tar.gz
-          asset_content_type: application/x-gzip
-
       - name: Deploy maven-mvnd-darwin-aarch64.zip
         uses: actions/upload-release-asset@v1
         env:
diff --git a/client/pom.xml b/client/pom.xml
index 0d0d525f..1e826ad3 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -189,6 +189,36 @@
       </build>
     </profile>
 
+    <profile>
+      <id>linux-image-only-require-glibc-2.17</id>
+      <activation>
+        <os>
+          <family>linux</family>
+        </os>
+        <file>
+          <exists>target/graalvm-libs-for-glibc-2.17</exists>
+        </file>
+      </activation>
+      <properties>
+        <patchelf.skip>false</patchelf.skip>
+      </properties>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.graalvm.buildtools</groupId>
+            <artifactId>native-maven-plugin</artifactId>
+            <configuration>
+              <buildArgs combine.children="append">
+                
<buildArg>-H:CCompilerPath=${basedir}/src/main/resources/glibc/gcc-aarch64</buildArg>
+                
<buildArg>-H:CCompilerOption=-B${project.build.directory}/graalvm-libs-for-glibc-2.17</buildArg>
+                
<buildArg>-H:CLibraryPath=${project.build.directory}/graalvm-libs-for-glibc-2.17</buildArg>
+              </buildArgs>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+
     <profile>
       <id>native</id>
       <build>
diff --git a/client/src/main/resources/glibc/dynamic-libc-start.c 
b/client/src/main/resources/glibc/dynamic-libc-start.c
index 2272b255..3767c805 100644
--- a/client/src/main/resources/glibc/dynamic-libc-start.c
+++ b/client/src/main/resources/glibc/dynamic-libc-start.c
@@ -27,8 +27,13 @@
 #include <dlfcn.h>
 #include <stdint.h>
 
+#ifdef __aarch64__
+__asm__(".symver dlsym,dlsym@GLIBC_2.17");
+__asm__(".symver dlvsym,dlvsym@GLIBC_2.17");
+#else
 __asm__(".symver dlsym,dlsym@GLIBC_2.2.5");
 __asm__(".symver dlvsym,dlvsym@GLIBC_2.2.5");
+#endif
 
 /* __libc_csu_init is statically linked into each program, and passed to 
__libc_start_main
  * when the program is running with an old glibc (<2.34).
diff --git a/client/src/main/resources/glibc/gcc-aarch64 
b/client/src/main/resources/glibc/gcc-aarch64
new file mode 100755
index 00000000..80c4f24a
--- /dev/null
+++ b/client/src/main/resources/glibc/gcc-aarch64
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -euf
+
+base=$(dirname -- "$0")
+
+# fix glibc api version on the fly
+find . -name '*.o' -print0 | xargs -0rn 1 objcopy 
--redefine-syms="$base/glibc.redef.aarch64"
+
+exec gcc "$@"
diff --git a/client/src/main/resources/glibc/glibc.redef 
b/client/src/main/resources/glibc/glibc.redef
index e2ca74d7..c41275fd 100644
--- a/client/src/main/resources/glibc/glibc.redef
+++ b/client/src/main/resources/glibc/glibc.redef
@@ -34,3 +34,4 @@ sem_destroy sem_destroy@GLIBC_2.2.5
 sem_init sem_init@GLIBC_2.2.5
 sem_post sem_post@GLIBC_2.2.5
 sem_wait sem_wait@GLIBC_2.2.5
+stat stat@GLIBC_2.2.5
diff --git a/client/src/main/resources/glibc/glibc.redef 
b/client/src/main/resources/glibc/glibc.redef.aarch64
similarity index 50%
copy from client/src/main/resources/glibc/glibc.redef
copy to client/src/main/resources/glibc/glibc.redef.aarch64
index e2ca74d7..69f8825c 100644
--- a/client/src/main/resources/glibc/glibc.redef
+++ b/client/src/main/resources/glibc/glibc.redef.aarch64
@@ -15,22 +15,23 @@
 # specific language governing permissions and limitations
 # under the License.
 __libc_start_main __dynamic_libc_start_main
-clock_gettime clock_gettime@GLIBC_2.2.5
-dlopen dlopen@GLIBC_2.2.5
-dlsym dlsym@GLIBC_2.2.5
-memcpy memcpy@GLIBC_2.2.5
-posix_spawn posix_spawn@GLIBC_2.2.5
-pthread_attr_getguardsize pthread_attr_getguardsize@GLIBC_2.2.5
-pthread_attr_getstack pthread_attr_getstack@GLIBC_2.2.5
-pthread_attr_setstacksize pthread_attr_setstacksize@GLIBC_2.2.5
-pthread_condattr_setclock pthread_condattr_setclock@GLIBC_2.3.3
-pthread_create pthread_create@GLIBC_2.2.5
-pthread_getattr_np pthread_getattr_np@GLIBC_2.2.5
-pthread_join pthread_join@GLIBC_2.2.5
-pthread_kill pthread_kill@GLIBC_2.2.5
-pthread_mutex_trylock pthread_mutex_trylock@GLIBC_2.2.5
-pthread_setname_np pthread_setname_np@GLIBC_2.12
-sem_destroy sem_destroy@GLIBC_2.2.5
-sem_init sem_init@GLIBC_2.2.5
-sem_post sem_post@GLIBC_2.2.5
-sem_wait sem_wait@GLIBC_2.2.5
+clock_gettime clock_gettime@GLIBC_2.17
+dlopen dlopen@GLIBC_2.17
+dlsym dlsym@GLIBC_2.17
+memcpy memcpy@GLIBC_2.17
+posix_spawn posix_spawn@GLIBC_2.17
+pthread_attr_getguardsize pthread_attr_getguardsize@GLIBC_2.17
+pthread_attr_getstack pthread_attr_getstack@GLIBC_2.17
+pthread_attr_setstacksize pthread_attr_setstacksize@GLIBC_2.17
+pthread_condattr_setclock pthread_condattr_setclock@GLIBC_2.17
+pthread_create pthread_create@GLIBC_2.17
+pthread_getattr_np pthread_getattr_np@GLIBC_2.17
+pthread_join pthread_join@GLIBC_2.17
+pthread_kill pthread_kill@GLIBC_2.17
+pthread_mutex_trylock pthread_mutex_trylock@GLIBC_2.17
+pthread_setname_np pthread_setname_np@GLIBC_2.17
+sem_destroy sem_destroy@GLIBC_2.17
+sem_init sem_init@GLIBC_2.17
+sem_post sem_post@GLIBC_2.17
+sem_wait sem_wait@GLIBC_2.17
+stat stat@GLIBC_2.17
diff --git a/client/src/main/resources/glibc/stat-compat.c 
b/client/src/main/resources/glibc/stat-compat.c
new file mode 100644
index 00000000..b19bf1bb
--- /dev/null
+++ b/client/src/main/resources/glibc/stat-compat.c
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ * Backward-compatible stat() shim for x86_64 targeting glibc < 2.33.
+ *
+ * Before glibc 2.33, stat() was a macro expanding to __xstat(_STAT_VER, ...).
+ * GraalVM 25 native-image calls stat() directly (compiled against glibc 2.33+
+ * headers where stat is a real function). This shim redirects stat() to
+ * __xstat() which has been available since glibc 2.2.5 on x86_64.
+ */
+
+struct stat;
+extern int __xstat(int ver, const char *path, struct stat *buf);
+
+int stat(const char *path, struct stat *buf) {
+    /* _STAT_VER_LINUX on x86_64 is 1 */
+    return __xstat(1, path, buf);
+}
diff --git 
a/daemon/src/main/java/org/mvndaemon/mvnd/timing/BuildTimeEventSpy.java 
b/daemon/src/main/java/org/mvndaemon/mvnd/timing/BuildTimeEventSpy.java
index 4258f054..6a2bb581 100644
--- a/daemon/src/main/java/org/mvndaemon/mvnd/timing/BuildTimeEventSpy.java
+++ b/daemon/src/main/java/org/mvndaemon/mvnd/timing/BuildTimeEventSpy.java
@@ -100,7 +100,7 @@ public class BuildTimeEventSpy extends AbstractEventSpy {
                 break;
 
             default:
-                // Ignore other events
+            // Ignore other events
         }
     }
 
diff --git 
a/integration-tests/src/test/java/org/mvndaemon/mvnd/it/DaemonCrashTest.java 
b/integration-tests/src/test/java/org/mvndaemon/mvnd/it/DaemonCrashTest.java
index 1cc3232a..dcd98b2d 100644
--- a/integration-tests/src/test/java/org/mvndaemon/mvnd/it/DaemonCrashTest.java
+++ b/integration-tests/src/test/java/org/mvndaemon/mvnd/it/DaemonCrashTest.java
@@ -63,8 +63,9 @@ class DaemonCrashTest {
         Stream.of(installedJars).forEach(jar -> 
Assertions.assertThat(jar).doesNotExist());
 
         final TestClientOutput output = new TestClientOutput();
-        assertThrows(DaemonException.StaleAddressException.class, () -> 
client.execute(
-                        output, "clean", "install", "-e", 
"-Dmvnd.log.level=DEBUG")
-                .assertFailure());
+        assertThrows(
+                DaemonException.StaleAddressException.class,
+                () -> client.execute(output, "clean", "install", "-e", 
"-Dmvnd.log.level=DEBUG")
+                        .assertFailure());
     }
 }
diff --git a/integration-tests/src/test/projects/invoker/pom.xml 
b/integration-tests/src/test/projects/invoker/pom.xml
index cc84c26f..cb59578c 100644
--- a/integration-tests/src/test/projects/invoker/pom.xml
+++ b/integration-tests/src/test/projects/invoker/pom.xml
@@ -91,7 +91,7 @@
             </plugin>
             <plugin>
                 <artifactId>maven-invoker-plugin</artifactId>
-                <version>3.6.1</version>
+                <version>3.10.1</version>
                 <configuration>
                     
<cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
                     
<localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
diff --git a/integration-tests/src/test/projects/type-description/pom.xml 
b/integration-tests/src/test/projects/type-description/pom.xml
index 2ab964e0..372b242c 100644
--- a/integration-tests/src/test/projects/type-description/pom.xml
+++ b/integration-tests/src/test/projects/type-description/pom.xml
@@ -35,14 +35,14 @@
         <maven.build.timestamp.format>yyyy-MM-dd 
HH:mm:ss</maven.build.timestamp.format>
         <timestamp>${maven.build.timestamp}</timestamp>
 
-        <maven.compiler.source>1.8</maven.compiler.source>
-        <maven.compiler.target>1.8</maven.compiler.target>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
 
         <docker.tag.name>latest-release</docker.tag.name>
         <tar.long.file.mode>gnu</tar.long.file.mode>
         
         <!-- Quarkus Version -->
-        <quarkus.version>3.10.0</quarkus.version>
+        <quarkus.version>3.35.3</quarkus.version>
 
         <!-- Jandex -->
         <jandex.version>3.0.3</jandex.version>

Reply via email to