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>