gnu: glibc: Update to 2.38.

* gnu/packages/patches/glibc-2.38-ldd-x86_64.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/base.scm (glibc): Update to 2.38.
[source]: Adjust list of patches.
[arguments]: Add ‘--enable-crypt’.
(glibc-2.35): New variable.

Change-Id: I040b724c47d2ee5f90f2deb03a4828e79d1bfc4e
This commit is contained in:
Ludovic Courtès 2023-12-06 10:43:37 +01:00
parent a488866c5f
commit 9dbba02382
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
4 changed files with 52 additions and 40 deletions

View file

@ -1396,6 +1396,7 @@ dist_patch_DATA = \
%D%/packages/patches/glibc-2.37-hurd-clock_t_centiseconds.patch \ %D%/packages/patches/glibc-2.37-hurd-clock_t_centiseconds.patch \
%D%/packages/patches/glibc-2.37-hurd-local-clock_gettime_MONOTONIC.patch \ %D%/packages/patches/glibc-2.37-hurd-local-clock_gettime_MONOTONIC.patch \
%D%/packages/patches/glibc-2.37-versioned-locpath.patch \ %D%/packages/patches/glibc-2.37-versioned-locpath.patch \
%D%/packages/patches/glibc-2.38-ldd-x86_64.patch \
%D%/packages/patches/glibc-hurd-clock_t_centiseconds.patch \ %D%/packages/patches/glibc-hurd-clock_t_centiseconds.patch \
%D%/packages/patches/glibc-hurd-getauxval.patch \ %D%/packages/patches/glibc-hurd-getauxval.patch \
%D%/packages/patches/glibc-hurd-gettyent.patch \ %D%/packages/patches/glibc-hurd-gettyent.patch \

View file

@ -847,27 +847,25 @@ (define-public glibc
;; version 2.28, GNU/Hurd used a different glibc branch. ;; version 2.28, GNU/Hurd used a different glibc branch.
(package (package
(name "glibc") (name "glibc")
(version "2.35") (version "2.38")
(replacement glibc/fixed)
(source (origin (source (origin
(method url-fetch) (method url-fetch)
(uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz")) (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
(sha256 (sha256
(base32 (base32
"0bpm1kfi09dxl4c6aanc5c9951fmf6ckkzay60cx7k37dcpp68si")) "1lizxxqbfma5zgmcj0gk5iyk171f2nfvdhbv8rjrkcmjk24rk0pv"))
(patches (search-patches "glibc-ldd-powerpc.patch" (patches (search-patches "glibc-ldd-powerpc.patch"
"glibc-ldd-x86_64.patch" "glibc-2.38-ldd-x86_64.patch"
"glibc-dl-cache.patch" "glibc-dl-cache.patch"
"glibc-versioned-locpath.patch" "glibc-2.37-versioned-locpath.patch"
"glibc-allow-kernel-2.6.32.patch" ;; "glibc-allow-kernel-2.6.32.patch"
"glibc-reinstate-prlimit64-fallback.patch" "glibc-reinstate-prlimit64-fallback.patch"
"glibc-supported-locales.patch" "glibc-supported-locales.patch"
"glibc-cross-objdump.patch" "glibc-2.37-hurd-clock_t_centiseconds.patch"
"glibc-cross-objcopy.patch" ;must come 2nd "glibc-2.37-hurd-local-clock_gettime_MONOTONIC.patch"
"glibc-hurd-clock_t_centiseconds.patch"
"glibc-hurd-clock_gettime_monotonic.patch"
"glibc-hurd-mach-print.patch" "glibc-hurd-mach-print.patch"
"glibc-hurd-gettyent.patch")))) "glibc-hurd-gettyent.patch"
"glibc-hurd-getauxval.patch"))))
(build-system gnu-build-system) (build-system gnu-build-system)
;; Glibc's <limits.h> refers to <linux/limit.h>, for instance, so glibc ;; Glibc's <limits.h> refers to <linux/limit.h>, for instance, so glibc
@ -929,6 +927,10 @@ (define-public glibc
"kernel-headers") "kernel-headers")
"/include") "/include")
;; Libcrypt and <crypt.h> are deprecated in glibc 2.38 and not
;; built by default. Build it to reduce application breakage.
"--enable-crypt"
;; This is the default for most architectures as of GNU libc 2.26, ;; This is the default for most architectures as of GNU libc 2.26,
;; but we specify it explicitly for clarity and consistency. See ;; but we specify it explicitly for clarity and consistency. See
;; "kernel-features.h" in the GNU libc for details. ;; "kernel-features.h" in the GNU libc for details.
@ -1145,6 +1147,30 @@ (define-public glibc-for-fhs
;; Below are old libc versions, which we use mostly to build locale data in ;; Below are old libc versions, which we use mostly to build locale data in
;; the old format (which the new libc cannot cope with.) ;; the old format (which the new libc cannot cope with.)
(define-public glibc-2.35
(package
(inherit glibc)
(version "2.35")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
(sha256
(base32
"0bpm1kfi09dxl4c6aanc5c9951fmf6ckkzay60cx7k37dcpp68si"))
(patches (search-patches "glibc-ldd-powerpc.patch"
"glibc-ldd-x86_64.patch"
"glibc-dl-cache.patch"
"glibc-versioned-locpath.patch"
"glibc-allow-kernel-2.6.32.patch"
"glibc-reinstate-prlimit64-fallback.patch"
"glibc-supported-locales.patch"
"glibc-cross-objdump.patch"
"glibc-cross-objcopy.patch" ;must come 2nd
"glibc-hurd-clock_t_centiseconds.patch"
"glibc-hurd-clock_gettime_monotonic.patch"
"glibc-hurd-mach-print.patch"
"glibc-hurd-gettyent.patch"))))))
(define-public glibc-2.33 (define-public glibc-2.33
(package (package
(inherit glibc) (inherit glibc)

View file

@ -1,11 +1,3 @@
From d73ba2caa10b8e9f51ff4239cc32eeb4e0de4279 Mon Sep 17 00:00:00 2001
Message-Id: <d73ba2caa10b8e9f51ff4239cc32eeb4e0de4279.1683980025.git.dev@jpoiret.xyz>
From: Josselin Poiret <dev@jpoiret.xyz>
Date: Sat, 13 May 2023 14:10:43 +0200
Subject: [PATCH] Add versioned locpath
From: Josselin Poiret <dev@jpoiret.xyz>
The format of locale data can be incompatible between libc versions, and The format of locale data can be incompatible between libc versions, and
loading incompatible data can lead to 'setlocale' returning EINVAL at best loading incompatible data can lead to 'setlocale' returning EINVAL at best
or triggering an assertion failure at worst. See or triggering an assertion failure at worst. See
@ -20,20 +12,8 @@ that variable. So, if GUIX_LOCPATH=/foo:/bar, locale data is searched for in
That way, a single 'GUIX_LOCPATH' setting can work even if different libc That way, a single 'GUIX_LOCPATH' setting can work even if different libc
versions coexist on the system. versions coexist on the system.
This patch is adapted from the 2.35 patch.
---
locale/newlocale.c | 15 ++--------
locale/setlocale.c | 68 +++++++++++++++++++++++++++++++++++++-------
string/Makefile | 1 +
string/argz-suffix.c | 56 ++++++++++++++++++++++++++++++++++++
string/argz.h | 10 +++++++
5 files changed, 127 insertions(+), 23 deletions(-)
create mode 100644 string/argz-suffix.c
diff --git a/locale/newlocale.c b/locale/newlocale.c diff --git a/locale/newlocale.c b/locale/newlocale.c
index 108d2428bf..6218e0fa77 100644 index 108d2428..6218e0fa 100644
--- a/locale/newlocale.c --- a/locale/newlocale.c
+++ b/locale/newlocale.c +++ b/locale/newlocale.c
@@ -29,6 +29,7 @@ @@ -29,6 +29,7 @@
@ -73,7 +53,7 @@ index 108d2428bf..6218e0fa77 100644
/* Get the names for the locales we are interested in. We either /* Get the names for the locales we are interested in. We either
allow a composite name or a single name. */ allow a composite name or a single name. */
diff --git a/locale/setlocale.c b/locale/setlocale.c diff --git a/locale/setlocale.c b/locale/setlocale.c
index dd73fa4248..d8eb799384 100644 index 6a902faa..2d07a644 100644
--- a/locale/setlocale.c --- a/locale/setlocale.c
+++ b/locale/setlocale.c +++ b/locale/setlocale.c
@@ -213,12 +213,65 @@ setdata (int category, struct __locale_data *data) @@ -213,12 +213,65 @@ setdata (int category, struct __locale_data *data)
@ -143,7 +123,7 @@ index dd73fa4248..d8eb799384 100644
char *composite; char *composite;
/* Sanity check for CATEGORY argument. */ /* Sanity check for CATEGORY argument. */
@@ -249,17 +302,10 @@ setlocale (int category, const char *locale) @@ -249,17 +308,10 @@ setlocale (int category, const char *locale)
locale_path = NULL; locale_path = NULL;
locale_path_len = 0; locale_path_len = 0;
@ -165,7 +145,7 @@ index dd73fa4248..d8eb799384 100644
if (category == LC_ALL) if (category == LC_ALL)
diff --git a/string/Makefile b/string/Makefile diff --git a/string/Makefile b/string/Makefile
index 3eced0d027..a7e68729ad 100644 index 8cdfd5b0..6b0d606d 100644
--- a/string/Makefile --- a/string/Makefile
+++ b/string/Makefile +++ b/string/Makefile
@@ -51,6 +51,7 @@ routines := \ @@ -51,6 +51,7 @@ routines := \
@ -178,7 +158,7 @@ index 3eced0d027..a7e68729ad 100644
bzero \ bzero \
diff --git a/string/argz-suffix.c b/string/argz-suffix.c diff --git a/string/argz-suffix.c b/string/argz-suffix.c
new file mode 100644 new file mode 100644
index 0000000000..505b0f248c index 00000000..505b0f24
--- /dev/null --- /dev/null
+++ b/string/argz-suffix.c +++ b/string/argz-suffix.c
@@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
@ -239,7 +219,7 @@ index 0000000000..505b0f248c
+} +}
+weak_alias (__argz_suffix_entries, argz_suffix_entries) +weak_alias (__argz_suffix_entries, argz_suffix_entries)
diff --git a/string/argz.h b/string/argz.h diff --git a/string/argz.h b/string/argz.h
index cbc588a8e6..bc6e484c9d 100644 index cbc588a8..bc6e484c 100644
--- a/string/argz.h --- a/string/argz.h
+++ b/string/argz.h +++ b/string/argz.h
@@ -108,6 +108,16 @@ extern error_t argz_replace (char **__restrict __argz, @@ -108,6 +108,16 @@ extern error_t argz_replace (char **__restrict __argz,
@ -259,6 +239,3 @@ index cbc588a8e6..bc6e484c9d 100644
/* Returns the next entry in ARGZ & ARGZ_LEN after ENTRY, or NULL if there /* Returns the next entry in ARGZ & ARGZ_LEN after ENTRY, or NULL if there
are no more. If entry is NULL, then the first entry is returned. This are no more. If entry is NULL, then the first entry is returned. This
--
2.40.1

View file

@ -0,0 +1,8 @@
By default, 'RTDLLIST' in 'ldd' refers to 'lib64/ld-linux-x86-64.so', whereas
it's in 'lib/' for us. This patch fixes that.
--- glibc-2.38/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed
+++ glibc-2.38/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed
@@ -1 +1 @@
-s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|x32\)\(/[^/]*\)\(-x86-64\|-x32\)\(\.so\.[0-9.]*\)[ ]*$_\1"\2\4\6 \264\4-x86-64\6 \2x32\4-x32\6"_
+s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|x32\)\(/[^/]*\)\(-x86-64\|-x32\)\(\.so\.[0-9.]*\)[ ]*$_\1"\2\4\6 \2\4-x86-64\6 \2x32\4-x32\6"_