What changed, and why it matters
This commit updates the version of binutils (a set of tools used to build Bitcoin Core's release binaries inside a reproducible build environment called Guix) from 2.44 to 2.46.0. It is a routine build-system dependency bump. There is no direct evidence in the commit or supplied references that this fixes a security vulnerability, introduces a known exploit, or changes any runtime code that end users interact with.
No security action required. Treat as a normal build-system maintenance commit. If reviewing for release engineering, verify the sha256 checksum of binutils-2.46.0.tar.bz2 against a trusted upstream source and confirm the gprofng disable and bison removal do not break any supported build target.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The change modifies contrib/guix/manifest.scm to define a custom base-binutils package that inherits from Guix’s cross-binutils but overrides the version to 2.46.0, fetches the upstream GNU source tarball with a fixed sha256 hash, disables gprofng, and removes bison from native inputs. The make-cross-toolchain and make-mingw-pthreads-cross-toolchain functions are updated to use base-binutils instead of the default cross-binutils. This affects only the Guix reproducible-build toolchain and does not alter consensus, networking, wallet, or node logic.
Changed components
contrib/guix/manifest.scmGuix reproducible build toolchainbinutils dependency (build-time only)Inspect captured patch +26 / −2
diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm
index 0771524b..4fd901e5 100644
--- a/contrib/guix/manifest.scm
+++ b/contrib/guix/manifest.scm
@@ -23,6 +23,7 @@
(guix build-system python)
(guix build-system pyproject)
(guix build-system trivial)
+ (guix download)
(guix gexp)
(guix git-download)
((guix licenses) #:prefix license:)
@@ -38,13 +39,36 @@ FILE-NAME found in ./patches relative to the current file."
(define building-on (string-append "--build=" (list-ref (string-split (%current-system) #\-) 0) "-guix-linux-gnu"))
+(define (base-binutils target)
+ (package
+ (inherit (cross-binutils target)) ;; 2.44
+ (version "2.46.0")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/binutils/binutils-"
+ version ".tar.bz2"))
+ (sha256
+ (base32
+ "04nd9vl7c1pxjbc9wh3ckddzhz5g82xyjqq9y9kf171a59im4c8g"))))
+ (arguments
+ (substitute-keyword-arguments (package-arguments (cross-binutils target))
+ ((#:configure-flags flags)
+ #~(append #$flags
+ (list "--enable-gprofng=no")))))
+ (native-inputs
+ (modify-inputs
+ (package-native-inputs (cross-binutils target))
+ (delete "bison")))
+ )
+)
+
(define (make-cross-toolchain target
base-gcc-for-libc
base-kernel-headers
base-libc
base-gcc)
"Create a cross-compilation toolchain package for TARGET"
- (let* ((xbinutils (cross-binutils target))
+ (let* ((xbinutils (base-binutils target))
;; 1. Build a cross-compiling gcc without targeting any libc, derived
;; from BASE-GCC-FOR-LIBC
(xgcc-sans-libc (cross-gcc target
@@ -119,7 +143,7 @@ desirable for building Bitcoin Core release binaries."
(define (make-mingw-pthreads-cross-toolchain target)
"Create a cross-compilation toolchain package for TARGET"
- (let* ((xbinutils (binutils-mingw-patches (cross-binutils target)))
+ (let* ((xbinutils (binutils-mingw-patches (base-binutils target)))
(machine (substring target 0 (string-index target #\-)))
(pthreads-xlibc (winpthreads-patches (make-mingw-w64 machine
#:xgcc (cross-gcc target #:xgcc base-gcc)
Why this scored 11/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.