From 7735901ed266b08912829c701c78893933c48524 Mon Sep 17 00:00:00 2001 From: fanquake Date: Thu, 13 Nov 2025 12:11:13 +0000 Subject: [PATCH 1/7] guix: disable building libgomp in GCC Prunes: libgomp.a libgomp.la libgomp.so libgomp.so.1 libgomp.so.1.0.0 libgomp.spec --- contrib/guix/manifest.scm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm index 011ba0defce..760b1a255fe 100644 --- a/contrib/guix/manifest.scm +++ b/contrib/guix/manifest.scm @@ -422,6 +422,7 @@ inspecting signatures in Mach-O binaries.") (list "--enable-threads=posix", "--enable-default-ssp=yes", "--disable-gcov", + "--disable-libgomp", building-on))))))) (define-public linux-base-gcc @@ -438,6 +439,7 @@ inspecting signatures in Mach-O binaries.") "--enable-standard-branch-protection=yes", "--enable-cet=yes", "--disable-gcov", + "--disable-libgomp", "--disable-libsanitizer", building-on))) ((#:phases phases) From 6f54e267d01d548e5e7aa05e48a5dc859675e6a9 Mon Sep 17 00:00:00 2001 From: fanquake Date: Thu, 13 Nov 2025 12:12:20 +0000 Subject: [PATCH 2/7] guix: disable libquadmath in GCC Prunes: libquadmath.a libquadmath.la libquadmath.so libquadmath.so.0 libquadmath.so.0.0.0 --- contrib/guix/manifest.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm index 760b1a255fe..f805ba6ddd5 100644 --- a/contrib/guix/manifest.scm +++ b/contrib/guix/manifest.scm @@ -440,6 +440,7 @@ inspecting signatures in Mach-O binaries.") "--enable-cet=yes", "--disable-gcov", "--disable-libgomp", + "--disable-libquadmath", "--disable-libsanitizer", building-on))) ((#:phases phases) From ea29329eb706fe4ed57226df59c5d6fe43aa3167 Mon Sep 17 00:00:00 2001 From: fanquake Date: Thu, 13 Nov 2025 16:12:16 +0000 Subject: [PATCH 3/7] guix: build GCC with --enable-host-bind-now --- contrib/guix/manifest.scm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm index f805ba6ddd5..fd0e2e6a83e 100644 --- a/contrib/guix/manifest.scm +++ b/contrib/guix/manifest.scm @@ -421,6 +421,7 @@ inspecting signatures in Mach-O binaries.") ;; https://gcc.gnu.org/install/configure.html (list "--enable-threads=posix", "--enable-default-ssp=yes", + "--enable-host-bind-now=yes", "--disable-gcov", "--disable-libgomp", building-on))))))) @@ -436,6 +437,7 @@ inspecting signatures in Mach-O binaries.") (list "--enable-initfini-array=yes", "--enable-default-ssp=yes", "--enable-default-pie=yes", + "--enable-host-bind-now=yes", "--enable-standard-branch-protection=yes", "--enable-cet=yes", "--disable-gcov", From 47be9122a7f5e37bcd955fe82c2bebcec73703e9 Mon Sep 17 00:00:00 2001 From: fanquake Date: Fri, 28 Nov 2025 14:57:16 +0000 Subject: [PATCH 4/7] guix: disable gprofng in GCC --- contrib/guix/manifest.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm index fd0e2e6a83e..7fe9430c8d7 100644 --- a/contrib/guix/manifest.scm +++ b/contrib/guix/manifest.scm @@ -440,6 +440,7 @@ inspecting signatures in Mach-O binaries.") "--enable-host-bind-now=yes", "--enable-standard-branch-protection=yes", "--enable-cet=yes", + "--enable-gprofng=no", "--disable-gcov", "--disable-libgomp", "--disable-libquadmath", From 34909799fe60055a34f524f7d89bd1a0c02567c1 Mon Sep 17 00:00:00 2001 From: fanquake Date: Mon, 3 Nov 2025 11:00:39 +0000 Subject: [PATCH 5/7] guix: use GCC 14.3.0 over 13.3.0 This will eventually be needed for #25573, and could be useful for #30210. --- contrib/guix/manifest.scm | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm index 7fe9430c8d7..0ad6bdb7b7c 100644 --- a/contrib/guix/manifest.scm +++ b/contrib/guix/manifest.scm @@ -93,7 +93,17 @@ chain for " target " development.")) (home-page (package-home-page xgcc)) (license (package-license xgcc))))) -(define base-gcc gcc-13) ;; 13.3.0 +(define base-gcc + (package + (inherit gcc-14) ;; 14.2.0 + (version "14.3.0") + (source (origin + (method url-fetch) + (uri (string-append "mirror://gnu/gcc/gcc-" + version "/gcc-" version ".tar.xz")) + (sha256 + (base32 + "0fna78ly417g69fdm4i5f3ms96g8xzzjza8gwp41lqr5fqlpgp70")))))) (define base-linux-kernel-headers linux-libre-headers-6.1) @@ -550,7 +560,7 @@ inspecting signatures in Mach-O binaries.") gzip xz ;; Build tools - gcc-toolchain-13 + gcc-toolchain-14 cmake-minimal gnu-make ninja @@ -570,7 +580,7 @@ inspecting signatures in Mach-O binaries.") ((string-contains target "-linux-") (list bison pkg-config - (list gcc-toolchain-13 "static") + (list gcc-toolchain-14 "static") (make-bitcoin-cross-toolchain target))) ((string-contains target "darwin") (list clang-toolchain-19 From fb0e6edfe88145fea6d96feb24ab45d3f43438ed Mon Sep 17 00:00:00 2001 From: Mara van der Laan <126646+laanwj@users.noreply.github.com> Date: Sun, 7 Dec 2025 20:52:11 +0100 Subject: [PATCH 6/7] guix: Apply SSA generation patch to maintain determinism See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123351 https://gcc.gnu.org/pipermail/gcc-patches/2026-January/704817.html --- contrib/guix/manifest.scm | 2 +- contrib/guix/patches/gcc-ssa-generation.patch | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 contrib/guix/patches/gcc-ssa-generation.patch diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm index 0ad6bdb7b7c..bd4996e58e8 100644 --- a/contrib/guix/manifest.scm +++ b/contrib/guix/manifest.scm @@ -123,7 +123,7 @@ desirable for building Bitcoin Core release binaries." (define (gcc-libgcc-patches gcc) (package-with-extra-patches gcc - (search-our-patches "gcc-remap-guix-store.patch"))) + (search-our-patches "gcc-remap-guix-store.patch" "gcc-ssa-generation.patch"))) (define (binutils-mingw-patches binutils) (package-with-extra-patches binutils diff --git a/contrib/guix/patches/gcc-ssa-generation.patch b/contrib/guix/patches/gcc-ssa-generation.patch new file mode 100644 index 00000000000..2e5a600230e --- /dev/null +++ b/contrib/guix/patches/gcc-ssa-generation.patch @@ -0,0 +1,49 @@ +commit b46614ebfc57ccca8a050668ad0e8ba5968c5943 +Author: Jakub Jelinek +Date: Tue Jan 6 08:36:20 2026 +0100 + + tree-object-size: Deterministic SSA generation [PR123351] + + The order of evaluation of function arguments is unspecified in C++. + The function object_sizes_set_temp called object_sizes_set with two + calls to make_ssa_name() as arguments. Since make_ssa_name() has the + side effect of incrementing the global SSA version counter, different + architectures of the same compiler evaluated these calls in different + orders. + + This resulted in non-deterministic SSA version numbering between + x86_64 and aarch64 hosts during cross-compilation, leading to + divergent object files. + + Sequencing the calls into separate statements ensures deterministic + evaluation order. + + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123351 + https://gcc.gnu.org/pipermail/gcc-patches/2026-January/704817.html + + 2026-01-06 Jakub Jelinek + Marco Falke + + PR tree-optimization/123351 + * tree-object-size.cc (object_sizes_set_temp): Separate calls to + make_ssa_name to ensure deterministic execution order. + +diff --git a/gcc/tree-object-size.cc b/gcc/tree-object-size.cc +index 018fbc30cbb..24e7d710371 100644 +--- a/gcc/tree-object-size.cc ++++ b/gcc/tree-object-size.cc +@@ -319,9 +319,11 @@ object_sizes_set_temp (struct object_size_info *osi, unsigned varno) + tree val = object_sizes_get (osi, varno); + + if (size_initval_p (val, osi->object_size_type)) +- object_sizes_set (osi, varno, +- make_ssa_name (sizetype), +- make_ssa_name (sizetype)); ++ { ++ val = make_ssa_name (sizetype); ++ tree wholeval = make_ssa_name (sizetype); ++ object_sizes_set (osi, varno, val, wholeval); ++ } + } + + /* Initialize OFFSET_LIMIT variable. */ From 2a746500fa769f83405349bcffa3f0971b92a2de Mon Sep 17 00:00:00 2001 From: fanquake Date: Tue, 4 Nov 2025 13:08:36 +0000 Subject: [PATCH 7/7] ci: migrate some jobs to Debian Trixie, use GCC 14 --- ci/test/00_setup_env_arm.sh | 2 +- ci/test/00_setup_env_i686_no_ipc.sh | 2 +- ci/test/00_setup_env_native_fuzz_with_valgrind.sh | 2 +- ci/test/00_setup_env_native_valgrind.sh | 2 +- ci/test/00_setup_env_s390x.sh | 2 +- ci/test/00_setup_env_win64_msvcrt.sh | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ci/test/00_setup_env_arm.sh b/ci/test/00_setup_env_arm.sh index 0d05877b6cf..f4ad97d2cc2 100755 --- a/ci/test/00_setup_env_arm.sh +++ b/ci/test/00_setup_env_arm.sh @@ -10,7 +10,7 @@ export HOST=arm-linux-gnueabihf export DPKG_ADD_ARCH="armhf" export PACKAGES="python3-zmq g++-arm-linux-gnueabihf libc6:armhf libstdc++6:armhf libfontconfig1:armhf libxcb1:armhf" export CONTAINER_NAME=ci_arm_linux -export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04" # Check that https://packages.ubuntu.com/noble/g++-arm-linux-gnueabihf (version 13.x, similar to guix) can cross-compile +export CI_IMAGE_NAME_TAG="mirror.gcr.io/debian:trixie" # Check that https://packages.debian.org/trixie/g++-arm-linux-gnueabihf (version 14.x, similar to guix) can cross-compile export CI_IMAGE_PLATFORM="linux/arm64" export GOAL="install" export CI_LIMIT_STACK_SIZE=1 diff --git a/ci/test/00_setup_env_i686_no_ipc.sh b/ci/test/00_setup_env_i686_no_ipc.sh index c32e68cb75b..dca0486fb60 100755 --- a/ci/test/00_setup_env_i686_no_ipc.sh +++ b/ci/test/00_setup_env_i686_no_ipc.sh @@ -8,7 +8,7 @@ export LC_ALL=C.UTF-8 export HOST=i686-pc-linux-gnu export CONTAINER_NAME=ci_i686_no_multiprocess -export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04" +export CI_IMAGE_NAME_TAG="mirror.gcr.io/debian:trixie" export CI_IMAGE_PLATFORM="linux/amd64" export PACKAGES="llvm clang g++-multilib" export DEP_OPTS="DEBUG=1 NO_IPC=1" diff --git a/ci/test/00_setup_env_native_fuzz_with_valgrind.sh b/ci/test/00_setup_env_native_fuzz_with_valgrind.sh index f1d99f81819..d8b0f5f1b5b 100755 --- a/ci/test/00_setup_env_native_fuzz_with_valgrind.sh +++ b/ci/test/00_setup_env_native_fuzz_with_valgrind.sh @@ -6,7 +6,7 @@ export LC_ALL=C.UTF-8 -export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04" +export CI_IMAGE_NAME_TAG="mirror.gcr.io/debian:trixie" export CONTAINER_NAME=ci_native_fuzz_valgrind export PACKAGES="libevent-dev libboost-dev libsqlite3-dev valgrind libcapnp-dev capnproto" export NO_DEPENDS=1 diff --git a/ci/test/00_setup_env_native_valgrind.sh b/ci/test/00_setup_env_native_valgrind.sh index 884bc3955c2..2ef17b02209 100755 --- a/ci/test/00_setup_env_native_valgrind.sh +++ b/ci/test/00_setup_env_native_valgrind.sh @@ -6,7 +6,7 @@ export LC_ALL=C.UTF-8 -export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04" +export CI_IMAGE_NAME_TAG="mirror.gcr.io/debian:trixie" export CONTAINER_NAME=ci_native_valgrind export PACKAGES="valgrind python3-zmq libevent-dev libboost-dev libzmq3-dev libsqlite3-dev libcapnp-dev capnproto python3-pip" export PIP_PACKAGES="--break-system-packages pycapnp" diff --git a/ci/test/00_setup_env_s390x.sh b/ci/test/00_setup_env_s390x.sh index b7d23fbf5ed..5dc6ec6e386 100755 --- a/ci/test/00_setup_env_s390x.sh +++ b/ci/test/00_setup_env_s390x.sh @@ -9,7 +9,7 @@ export LC_ALL=C.UTF-8 export HOST=s390x-linux-gnu export PACKAGES="python3-zmq" export CONTAINER_NAME=ci_s390x -export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04" +export CI_IMAGE_NAME_TAG="mirror.gcr.io/debian:trixie" export CI_IMAGE_PLATFORM="linux/s390x" export TEST_RUNNER_EXTRA="--exclude rpc_bind,feature_bind_extra" # Excluded for now, see https://github.com/bitcoin/bitcoin/issues/17765#issuecomment-602068547 export RUN_FUNCTIONAL_TESTS=true diff --git a/ci/test/00_setup_env_win64_msvcrt.sh b/ci/test/00_setup_env_win64_msvcrt.sh index 86e0ea9c80d..6c948aeb351 100755 --- a/ci/test/00_setup_env_win64_msvcrt.sh +++ b/ci/test/00_setup_env_win64_msvcrt.sh @@ -7,7 +7,7 @@ export LC_ALL=C.UTF-8 export CONTAINER_NAME=ci_win64_msvcrt -export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04" # Check that https://packages.ubuntu.com/noble/g++-mingw-w64-x86-64-posix (version 13.x, similar to guix) can cross-compile +export CI_IMAGE_NAME_TAG="mirror.gcr.io/debian:trixie" # Check that https://packages.debian.org/trixie/g++-mingw-w64-x86-64-posix (version 14.x, similar to guix) can cross-compile export HOST=x86_64-w64-mingw32 export PACKAGES="g++-mingw-w64-x86-64-posix nsis" export RUN_UNIT_TESTS=false