aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib')
-rw-r--r--contrib/guix/manifest.scm4
-rw-r--r--contrib/guix/patches/glibc-ldd-x86_64.patch10
-rw-r--r--contrib/guix/patches/glibc-versioned-locpath.patch240
3 files changed, 1 insertions, 253 deletions
diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm
index d83ff08713..54ddd47353 100644
--- a/contrib/guix/manifest.scm
+++ b/contrib/guix/manifest.scm
@@ -559,9 +559,7 @@ inspecting signatures in Mach-O binaries.")
(sha256
(base32
"0azpb9cvnbv25zg8019rqz48h8i2257ngyjg566dlnp74ivrs9vq"))
- (patches (search-our-patches "glibc-ldd-x86_64.patch"
- "glibc-versioned-locpath.patch"
- "glibc-2.27-riscv64-Use-__has_include-to-include-asm-syscalls.h.patch"
+ (patches (search-our-patches "glibc-2.27-riscv64-Use-__has_include-to-include-asm-syscalls.h.patch"
"glibc-2.27-fcommon.patch"
"glibc-2.27-guix-prefix.patch"))))))
diff --git a/contrib/guix/patches/glibc-ldd-x86_64.patch b/contrib/guix/patches/glibc-ldd-x86_64.patch
deleted file mode 100644
index a23b095caa..0000000000
--- a/contrib/guix/patches/glibc-ldd-x86_64.patch
+++ /dev/null
@@ -1,10 +0,0 @@
-By default, 'RTDLLIST' in 'ldd' refers to 'lib64/ld-linux-x86-64.so', whereas
-it's in 'lib/' for us. This patch fixes that.
-
---- a/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed
-+++ b/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed
-@@ -1,3 +1,3 @@
- /LD_TRACE_LOADED_OBJECTS=1/a\
- add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out"
--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"_
diff --git a/contrib/guix/patches/glibc-versioned-locpath.patch b/contrib/guix/patches/glibc-versioned-locpath.patch
deleted file mode 100644
index bc7652127f..0000000000
--- a/contrib/guix/patches/glibc-versioned-locpath.patch
+++ /dev/null
@@ -1,240 +0,0 @@
-The format of locale data can be incompatible between libc versions, and
-loading incompatible data can lead to 'setlocale' returning EINVAL at best
-or triggering an assertion failure at worst. See
-https://lists.gnu.org/archive/html/guix-devel/2015-09/msg00717.html
-for background information.
-
-To address that, this patch changes libc to honor a new 'GUIX_LOCPATH'
-variable, and to look for locale data in version-specific sub-directories of
-that variable. So, if GUIX_LOCPATH=/foo:/bar, locale data is searched for in
-/foo/X.Y and /bar/X.Y, where X.Y is the libc version number.
-
-That way, a single 'GUIX_LOCPATH' setting can work even if different libc
-versions coexist on the system.
-
---- a/locale/newlocale.c
-+++ b/locale/newlocale.c
-@@ -30,6 +30,7 @@
- /* Lock for protecting global data. */
- __libc_rwlock_define (extern , __libc_setlocale_lock attribute_hidden)
-
-+extern error_t compute_locale_search_path (char **, size_t *);
-
- /* Use this when we come along an error. */
- #define ERROR_RETURN \
-@@ -48,7 +49,6 @@ __newlocale (int category_mask, const char *locale, __locale_t base)
- __locale_t result_ptr;
- char *locale_path;
- size_t locale_path_len;
-- const char *locpath_var;
- int cnt;
- size_t names_len;
-
-@@ -102,17 +102,8 @@ __newlocale (int category_mask, const char *locale, __locale_t base)
- locale_path = NULL;
- locale_path_len = 0;
-
-- locpath_var = getenv ("LOCPATH");
-- if (locpath_var != NULL && locpath_var[0] != '\0')
-- {
-- if (__argz_create_sep (locpath_var, ':',
-- &locale_path, &locale_path_len) != 0)
-- return NULL;
--
-- if (__argz_add_sep (&locale_path, &locale_path_len,
-- _nl_default_locale_path, ':') != 0)
-- return NULL;
-- }
-+ if (compute_locale_search_path (&locale_path, &locale_path_len) != 0)
-+ return NULL;
-
- /* Get the names for the locales we are interested in. We either
- allow a composite name or a single name. */
-diff --git a/locale/setlocale.c b/locale/setlocale.c
-index ead030d..0c0e314 100644
---- a/locale/setlocale.c
-+++ b/locale/setlocale.c
-@@ -215,12 +215,65 @@ setdata (int category, struct __locale_data *data)
- }
- }
-
-+/* Return in *LOCALE_PATH and *LOCALE_PATH_LEN the locale data search path as
-+ a colon-separated list. Return ENOMEN on error, zero otherwise. */
-+error_t
-+compute_locale_search_path (char **locale_path, size_t *locale_path_len)
-+{
-+ char* guix_locpath_var = getenv ("GUIX_LOCPATH");
-+ char *locpath_var = getenv ("LOCPATH");
-+
-+ if (guix_locpath_var != NULL && guix_locpath_var[0] != '\0')
-+ {
-+ /* Entries in 'GUIX_LOCPATH' take precedence over 'LOCPATH'. These
-+ entries are systematically prefixed with "/X.Y" where "X.Y" is the
-+ libc version. */
-+ if (__argz_create_sep (guix_locpath_var, ':',
-+ locale_path, locale_path_len) != 0
-+ || __argz_suffix_entries (locale_path, locale_path_len,
-+ "/" VERSION) != 0)
-+ goto bail_out;
-+ }
-+
-+ if (locpath_var != NULL && locpath_var[0] != '\0')
-+ {
-+ char *reg_locale_path = NULL;
-+ size_t reg_locale_path_len = 0;
-+
-+ if (__argz_create_sep (locpath_var, ':',
-+ &reg_locale_path, &reg_locale_path_len) != 0)
-+ goto bail_out;
-+
-+ if (__argz_append (locale_path, locale_path_len,
-+ reg_locale_path, reg_locale_path_len) != 0)
-+ goto bail_out;
-+
-+ free (reg_locale_path);
-+ }
-+
-+ if (*locale_path != NULL)
-+ {
-+ /* Append the system default locale directory. */
-+ if (__argz_add_sep (locale_path, locale_path_len,
-+ _nl_default_locale_path, ':') != 0)
-+ goto bail_out;
-+ }
-+
-+ return 0;
-+
-+ bail_out:
-+ free (*locale_path);
-+ *locale_path = NULL;
-+ *locale_path_len = 0;
-+
-+ return ENOMEM;
-+}
-+
- char *
- setlocale (int category, const char *locale)
- {
- char *locale_path;
- size_t locale_path_len;
-- const char *locpath_var;
- char *composite;
-
- /* Sanity check for CATEGORY argument. */
-@@ -251,17 +304,10 @@ setlocale (int category, const char *locale)
- locale_path = NULL;
- locale_path_len = 0;
-
-- locpath_var = getenv ("LOCPATH");
-- if (locpath_var != NULL && locpath_var[0] != '\0')
-+ if (compute_locale_search_path (&locale_path, &locale_path_len) != 0)
- {
-- if (__argz_create_sep (locpath_var, ':',
-- &locale_path, &locale_path_len) != 0
-- || __argz_add_sep (&locale_path, &locale_path_len,
-- _nl_default_locale_path, ':') != 0)
-- {
-- __libc_rwlock_unlock (__libc_setlocale_lock);
-- return NULL;
-- }
-+ __libc_rwlock_unlock (__libc_setlocale_lock);
-+ return NULL;
- }
-
- if (category == LC_ALL)
-diff --git a/string/Makefile b/string/Makefile
-index 8424a61..f925503 100644
---- a/string/Makefile
-+++ b/string/Makefile
-@@ -38,7 +38,7 @@ routines := strcat strchr strcmp strcoll strcpy strcspn \
- swab strfry memfrob memmem rawmemchr strchrnul \
- $(addprefix argz-,append count create ctsep next \
- delete extract insert stringify \
-- addsep replace) \
-+ addsep replace suffix) \
- envz basename \
- strcoll_l strxfrm_l string-inlines memrchr \
- xpg-strerror strerror_l
-diff --git a/string/argz-suffix.c b/string/argz-suffix.c
-new file mode 100644
-index 0000000..505b0f2
---- /dev/null
-+++ b/string/argz-suffix.c
-@@ -0,0 +1,56 @@
-+/* Copyright (C) 2015 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+ Contributed by Ludovic Courtès <ludo@gnu.org>.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, see
-+ <http://www.gnu.org/licenses/>. */
-+
-+#include <argz.h>
-+#include <errno.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+
-+error_t
-+__argz_suffix_entries (char **argz, size_t *argz_len, const char *suffix)
-+
-+{
-+ size_t suffix_len = strlen (suffix);
-+ size_t count = __argz_count (*argz, *argz_len);
-+ size_t new_argz_len = *argz_len + count * suffix_len;
-+ char *new_argz = malloc (new_argz_len);
-+
-+ if (new_argz)
-+ {
-+ char *p = new_argz, *entry;
-+
-+ for (entry = *argz;
-+ entry != NULL;
-+ entry = argz_next (*argz, *argz_len, entry))
-+ {
-+ p = stpcpy (p, entry);
-+ p = stpcpy (p, suffix);
-+ p++;
-+ }
-+
-+ free (*argz);
-+ *argz = new_argz;
-+ *argz_len = new_argz_len;
-+
-+ return 0;
-+ }
-+ else
-+ return ENOMEM;
-+}
-+weak_alias (__argz_suffix_entries, argz_suffix_entries)
-diff --git a/string/argz.h b/string/argz.h
-index bb62a31..d276a35 100644
---- a/string/argz.h
-+++ b/string/argz.h
-@@ -134,6 +134,16 @@ extern error_t argz_replace (char **__restrict __argz,
- const char *__restrict __str,
- const char *__restrict __with,
- unsigned int *__restrict __replace_count);
-+
-+/* Suffix each entry of ARGZ & ARGZ_LEN with SUFFIX. Return 0 on success,
-+ and ENOMEN if memory cannot be allocated. */
-+extern error_t __argz_suffix_entries (char **__restrict __argz,
-+ size_t *__restrict __argz_len,
-+ const char *__restrict __suffix);
-+extern error_t argz_suffix_entries (char **__restrict __argz,
-+ size_t *__restrict __argz_len,
-+ const char *__restrict __suffix);
-+
-
- /* 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