diff --git a/.abf.yml b/.abf.yml index d6aee41..8d958e1 100644 --- a/.abf.yml +++ b/.abf.yml @@ -1,3 +1,3 @@ sources: - glibc-2.36.tar.xz: 1477f605f419c439c03ef90e7851c0856ea679ea + glibc-4f4d7a13edfd2fdc57c9d76e1fd6d017fb47550c.tar.xz: 0e335e549849de97636e63b030e6e444586adbd0 glibc-manpages.tar.bz2: ca54bfb832b703c8e35170fcc1c1f5470b45ff0f diff --git a/0001-stdlib-Suppress-gcc-diagnostic-that-char8_t-is-a-key.patch b/0001-stdlib-Suppress-gcc-diagnostic-that-char8_t-is-a-key.patch deleted file mode 100644 index 89a6540..0000000 --- a/0001-stdlib-Suppress-gcc-diagnostic-that-char8_t-is-a-key.patch +++ /dev/null @@ -1,51 +0,0 @@ -From c3fda489cfdb2260f9fec706e6fd7259858c4467 Mon Sep 17 00:00:00 2001 -From: Tom Honermann -Date: Sun, 24 Jul 2022 01:11:43 -0400 -Subject: [PATCH 01/15] stdlib: Suppress gcc diagnostic that char8_t is a - keyword in C++20 in uchar.h. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -gcc 13 issues the following diagnostic for the uchar.h header when the --Wc++20-compat option is enabled in C++ modes that do not enable char8_t -as a builtin type (C++17 and earlier by default; subject to _GNU_SOURCE -and the gcc -f[no-]char8_t option). - warning: identifier ‘char8_t’ is a keyword in C++20 [-Wc++20-compat] -This change modifies the uchar.h header to suppress the diagnostic through -the use of '#pragma GCC diagnostic' directives for gcc 10 and later (the --Wc++20-compat option was added in gcc version 10). Unfortunately, a bug -in gcc currently prevents those directives from having the intended effect -as reported at https://gcc.gnu.org/PR106423. A patch for that issue has -been submitted and is available in the email thread archive linked below. - https://gcc.gnu.org/pipermail/gcc-patches/2022-July/598736.html - -(cherry picked from commit 825f84f133bd840347dc49229b6d831f07d04775) ---- - wcsmbs/uchar.h | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/wcsmbs/uchar.h b/wcsmbs/uchar.h -index c37e8619a0..5f7139f279 100644 ---- a/wcsmbs/uchar.h -+++ b/wcsmbs/uchar.h -@@ -34,8 +34,16 @@ - /* Declare the C2x char8_t typedef in C2x modes, but only if the C++ - __cpp_char8_t feature test macro is not defined. */ - #if __GLIBC_USE (ISOC2X) && !defined __cpp_char8_t -+#if __GNUC_PREREQ (10, 0) && defined __cplusplus -+/* Suppress the diagnostic regarding char8_t being a keyword in C++20. */ -+# pragma GCC diagnostic push -+# pragma GCC diagnostic ignored "-Wc++20-compat" -+#endif - /* Define the 8-bit character type. */ - typedef unsigned char char8_t; -+#if __GNUC_PREREQ (10, 0) && defined __cplusplus -+# pragma GCC diagnostic pop -+#endif - #endif - - #ifndef __USE_ISOCXX11 --- -2.37.2 - diff --git a/0002-wcsmbs-Add-missing-test-c8rtomb-test-mbrtoc8-depende.patch b/0002-wcsmbs-Add-missing-test-c8rtomb-test-mbrtoc8-depende.patch deleted file mode 100644 index 1db2ec9..0000000 --- a/0002-wcsmbs-Add-missing-test-c8rtomb-test-mbrtoc8-depende.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 33f1b4c1452b33991e670f636ebe98b90a405e10 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Fri, 29 Jul 2022 10:50:56 -0700 -Subject: [PATCH 02/15] wcsmbs: Add missing test-c8rtomb/test-mbrtoc8 - dependency - -Make test-c8rtomb.out and test-mbrtoc8.out depend on $(gen-locales) for - - xsetlocale (LC_ALL, "de_DE.UTF-8"); - xsetlocale (LC_ALL, "zh_HK.BIG5-HKSCS"); - -Reviewed-by: Sunil K Pandey -Reviewed-by: Carlos O'Donell -(cherry picked from commit e03f5ccd6cc8f829416156eac75acee501626c1f) ---- - wcsmbs/Makefile | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile -index e6b9e8743a..3d19d5556f 100644 ---- a/wcsmbs/Makefile -+++ b/wcsmbs/Makefile -@@ -73,6 +73,8 @@ $(objpfx)tst-wcstol-locale.out: $(gen-locales) - $(objpfx)tst-wcstod-nan-locale.out: $(gen-locales) - $(objpfx)tst-c16-surrogate.out: $(gen-locales) - $(objpfx)tst-c32-state.out: $(gen-locales) -+$(objpfx)test-c8rtomb.out: $(gen-locales) -+$(objpfx)test-mbrtoc8.out: $(gen-locales) - endif - - $(objpfx)tst-wcstod-round: $(libm) --- -2.37.2 - diff --git a/0003-dlfcn-Pass-caller-pointer-to-static-dlopen-implement.patch b/0003-dlfcn-Pass-caller-pointer-to-static-dlopen-implement.patch deleted file mode 100644 index 48e3ebf..0000000 --- a/0003-dlfcn-Pass-caller-pointer-to-static-dlopen-implement.patch +++ /dev/null @@ -1,49 +0,0 @@ -From c74bb93cfdb04d49155b0e30983a3c866167bbca Mon Sep 17 00:00:00 2001 -From: Florian Weimer -Date: Thu, 4 Aug 2022 17:54:48 +0200 -Subject: [PATCH 03/15] dlfcn: Pass caller pointer to static dlopen - implementation (bug 29446) - -Fixes commit 0c1c3a771eceec46e66ce1183cf988e2303bd373 ("dlfcn: Move -dlopen into libc"). - -(cherry picked from commit ed0185e4129130cbe081c221efb758fb400623ce) ---- - NEWS | 7 +++++++ - dlfcn/dlopen.c | 2 +- - 2 files changed, 8 insertions(+), 1 deletion(-) - -diff --git a/NEWS b/NEWS -index f61e521fc8..15f3dd2cdb 100644 ---- a/NEWS -+++ b/NEWS -@@ -4,6 +4,13 @@ See the end for copying conditions. - - Please send GNU C library bug reports via - using `glibc' in the "product" field. -+ -+Version 2.36.1 -+ -+The following bugs are resolved with this release: -+ -+ [29446] _dlopen now ignores dl_caller argument in static mode -+ - - Version 2.36 - -diff --git a/dlfcn/dlopen.c b/dlfcn/dlopen.c -index 2696dde4b1..9b07b4e132 100644 ---- a/dlfcn/dlopen.c -+++ b/dlfcn/dlopen.c -@@ -90,7 +90,7 @@ compat_symbol (libdl, ___dlopen, dlopen, GLIBC_2_1); - void * - __dlopen (const char *file, int mode, void *dl_caller) - { -- return dlopen_implementation (file, mode, RETURN_ADDRESS (0)); -+ return dlopen_implementation (file, mode, dl_caller); - } - - void * --- -2.37.2 - diff --git a/0004-Update-syscall-lists-for-Linux-5.19.patch b/0004-Update-syscall-lists-for-Linux-5.19.patch deleted file mode 100644 index 4c26c56..0000000 --- a/0004-Update-syscall-lists-for-Linux-5.19.patch +++ /dev/null @@ -1,61 +0,0 @@ -From ac47d8f6cf9744139adb12f540fb9cc610cac579 Mon Sep 17 00:00:00 2001 -From: Joseph Myers -Date: Tue, 2 Aug 2022 21:05:07 +0000 -Subject: [PATCH 04/15] Update syscall lists for Linux 5.19 - -Linux 5.19 has no new syscalls, but enables memfd_secret in the uapi -headers for RISC-V. Update the version number in syscall-names.list -to reflect that it is still current for 5.19 and regenerate the -arch-syscall.h headers with build-many-glibcs.py update-syscalls. - -Tested with build-many-glibcs.py. - -(cherry picked from commit fccadcdf5bed7ee67a6cef4714e0b477d6c8472c) ---- - sysdeps/unix/sysv/linux/riscv/rv32/arch-syscall.h | 1 + - sysdeps/unix/sysv/linux/riscv/rv64/arch-syscall.h | 1 + - sysdeps/unix/sysv/linux/syscall-names.list | 4 ++-- - 3 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/arch-syscall.h b/sysdeps/unix/sysv/linux/riscv/rv32/arch-syscall.h -index bf4be80f8d..202520ee25 100644 ---- a/sysdeps/unix/sysv/linux/riscv/rv32/arch-syscall.h -+++ b/sysdeps/unix/sysv/linux/riscv/rv32/arch-syscall.h -@@ -122,6 +122,7 @@ - #define __NR_mbind 235 - #define __NR_membarrier 283 - #define __NR_memfd_create 279 -+#define __NR_memfd_secret 447 - #define __NR_migrate_pages 238 - #define __NR_mincore 232 - #define __NR_mkdirat 34 -diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/arch-syscall.h b/sysdeps/unix/sysv/linux/riscv/rv64/arch-syscall.h -index d656aedcc2..4e65f337d4 100644 ---- a/sysdeps/unix/sysv/linux/riscv/rv64/arch-syscall.h -+++ b/sysdeps/unix/sysv/linux/riscv/rv64/arch-syscall.h -@@ -127,6 +127,7 @@ - #define __NR_mbind 235 - #define __NR_membarrier 283 - #define __NR_memfd_create 279 -+#define __NR_memfd_secret 447 - #define __NR_migrate_pages 238 - #define __NR_mincore 232 - #define __NR_mkdirat 34 -diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list -index 6c7b2f7011..028ad3107a 100644 ---- a/sysdeps/unix/sysv/linux/syscall-names.list -+++ b/sysdeps/unix/sysv/linux/syscall-names.list -@@ -21,8 +21,8 @@ - # This file can list all potential system calls. The names are only - # used if the installed kernel headers also provide them. - --# The list of system calls is current as of Linux 5.18. --kernel 5.18 -+# The list of system calls is current as of Linux 5.19. -+kernel 5.19 - - FAST_atomic_update - FAST_cmpxchg --- -2.37.2 - diff --git a/0005-elf-Replace-strcpy-call-with-memcpy-BZ-29454.patch b/0005-elf-Replace-strcpy-call-with-memcpy-BZ-29454.patch deleted file mode 100644 index 4143ab0..0000000 --- a/0005-elf-Replace-strcpy-call-with-memcpy-BZ-29454.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 302bc33bc53c787da6e74162a7092e9c0fb964a8 Mon Sep 17 00:00:00 2001 -From: Noah Goldstein -Date: Mon, 8 Aug 2022 11:26:22 +0800 -Subject: [PATCH 05/15] elf: Replace `strcpy` call with `memcpy` [BZ #29454] - -GCC normally does this optimization for us in -strlen_pass::handle_builtin_strcpy but only for optimized -build. To avoid needing to include strcpy.S in the rtld build to -support the debug build, just do the optimization by hand. - -(cherry picked from commit 483cfe1a6a33d6335b1901581b41040d2d412511) ---- - elf/dl-cache.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/elf/dl-cache.c b/elf/dl-cache.c -index 8bbf110d02..b97c17b3a9 100644 ---- a/elf/dl-cache.c -+++ b/elf/dl-cache.c -@@ -509,8 +509,9 @@ _dl_load_cache_lookup (const char *name) - we are accessing. Therefore we must make the copy of the - mapping data without using malloc. */ - char *temp; -- temp = alloca (strlen (best) + 1); -- strcpy (temp, best); -+ size_t best_len = strlen (best) + 1; -+ temp = alloca (best_len); -+ memcpy (temp, best, best_len); - return __strdup (temp); - } - --- -2.37.2 - diff --git a/0006-Linux-Terminate-subprocess-on-late-failure-in-tst-pi.patch b/0006-Linux-Terminate-subprocess-on-late-failure-in-tst-pi.patch deleted file mode 100644 index fc185e6..0000000 --- a/0006-Linux-Terminate-subprocess-on-late-failure-in-tst-pi.patch +++ /dev/null @@ -1,46 +0,0 @@ -From e982657073c4db21459ffd9e17bc505b1d64b876 Mon Sep 17 00:00:00 2001 -From: Florian Weimer -Date: Mon, 15 Aug 2022 16:43:59 +0200 -Subject: [PATCH 06/15] Linux: Terminate subprocess on late failure in - tst-pidfd (bug 29485) - -Reviewed-by: Carlos O'Donell -(cherry picked from commit f82e05ebb295cadd35f7372f652c72264da810ad) ---- - NEWS | 1 + - sysdeps/unix/sysv/linux/tst-pidfd.c | 7 +++++-- - 2 files changed, 6 insertions(+), 2 deletions(-) - -diff --git a/NEWS b/NEWS -index 15f3dd2cdb..f8fb8db510 100644 ---- a/NEWS -+++ b/NEWS -@@ -10,6 +10,7 @@ Version 2.36.1 - The following bugs are resolved with this release: - - [29446] _dlopen now ignores dl_caller argument in static mode -+ [29485] Linux: Terminate subprocess on late failure in tst-pidfd - - - Version 2.36 -diff --git a/sysdeps/unix/sysv/linux/tst-pidfd.c b/sysdeps/unix/sysv/linux/tst-pidfd.c -index 037af22290..5711d1c312 100644 ---- a/sysdeps/unix/sysv/linux/tst-pidfd.c -+++ b/sysdeps/unix/sysv/linux/tst-pidfd.c -@@ -147,8 +147,11 @@ do_test (void) - may be denied if the process doesn't have CAP_SYS_PTRACE or - if a LSM security_ptrace_access_check denies access. */ - if (fd == -1 && errno == EPERM) -- FAIL_UNSUPPORTED ("don't have permission to use pidfd_getfd on pidfd, " -- "skipping test"); -+ { -+ TEST_COMPARE (pidfd_send_signal (pidfd, SIGKILL, NULL, 0), 0); -+ FAIL_UNSUPPORTED ("don't have permission to use pidfd_getfd on pidfd, " -+ "skipping test"); -+ } - TEST_VERIFY (fd > 0); - - char *path = xasprintf ("/proc/%d/fd/%d", pid, remote_fd); --- -2.37.2 - diff --git a/0007-alpha-Fix-generic-brk-system-call-emulation-in-__brk.patch b/0007-alpha-Fix-generic-brk-system-call-emulation-in-__brk.patch deleted file mode 100644 index 825ce12..0000000 --- a/0007-alpha-Fix-generic-brk-system-call-emulation-in-__brk.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 8b139cd4f1074ae0d95d9bff60db283a1ed72734 Mon Sep 17 00:00:00 2001 -From: Florian Weimer -Date: Mon, 22 Aug 2022 11:04:47 +0200 -Subject: [PATCH 07/15] alpha: Fix generic brk system call emulation in - __brk_call (bug 29490) - -The kernel special-cases the zero argument for alpha brk, and we can -use that to restore the generic Linux error handling behavior. - -Fixes commit b57ab258c1140bc45464b4b9908713e3e0ee35aa ("Linux: -Introduce __brk_call for invoking the brk system call"). - -(cherry picked from commit e7ad26ee3cb74e61d0637c888f24dd478d77af58) ---- - NEWS | 1 + - sysdeps/unix/sysv/linux/alpha/brk_call.h | 7 +++---- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/NEWS b/NEWS -index f8fb8db510..becab3ade9 100644 ---- a/NEWS -+++ b/NEWS -@@ -11,6 +11,7 @@ The following bugs are resolved with this release: - - [29446] _dlopen now ignores dl_caller argument in static mode - [29485] Linux: Terminate subprocess on late failure in tst-pidfd -+ [29490] alpha: New __brk_call implementation is broken - - - Version 2.36 -diff --git a/sysdeps/unix/sysv/linux/alpha/brk_call.h b/sysdeps/unix/sysv/linux/alpha/brk_call.h -index b8088cf13f..0b851b6c86 100644 ---- a/sysdeps/unix/sysv/linux/alpha/brk_call.h -+++ b/sysdeps/unix/sysv/linux/alpha/brk_call.h -@@ -21,8 +21,7 @@ __brk_call (void *addr) - { - unsigned long int result = INTERNAL_SYSCALL_CALL (brk, addr); - if (result == -ENOMEM) -- /* Mimic the default error reporting behavior. */ -- return addr; -- else -- return (void *) result; -+ /* Mimic the generic error reporting behavior. */ -+ result = INTERNAL_SYSCALL_CALL (brk, 0); -+ return (void *) result; - } --- -2.37.2 - diff --git a/0008-socket-Check-lengths-before-advancing-pointer-in-CMS.patch b/0008-socket-Check-lengths-before-advancing-pointer-in-CMS.patch deleted file mode 100644 index e514ecd..0000000 --- a/0008-socket-Check-lengths-before-advancing-pointer-in-CMS.patch +++ /dev/null @@ -1,448 +0,0 @@ -From d13a7a6f100576b1e30dc044b2e0c4cbcb6196f6 Mon Sep 17 00:00:00 2001 -From: Arjun Shankar -Date: Tue, 2 Aug 2022 11:10:25 +0200 -Subject: [PATCH 08/15] socket: Check lengths before advancing pointer in - CMSG_NXTHDR - -The inline and library functions that the CMSG_NXTHDR macro may expand -to increment the pointer to the header before checking the stride of -the increment against available space. Since C only allows incrementing -pointers to one past the end of an array, the increment must be done -after a length check. This commit fixes that and includes a regression -test for CMSG_FIRSTHDR and CMSG_NXTHDR. - -The Linux, Hurd, and generic headers are all changed. - -Tested on Linux on armv7hl, i686, x86_64, aarch64, ppc64le, and s390x. - -[BZ #28846] - -Reviewed-by: Siddhesh Poyarekar -(cherry picked from commit 9c443ac4559a47ed99859bd80d14dc4b6dd220a1) ---- - bits/socket.h | 40 ++++++++++-- - socket/Makefile | 1 + - socket/tst-cmsghdr-skeleton.c | 92 +++++++++++++++++++++++++++ - socket/tst-cmsghdr.c | 56 ++++++++++++++++ - sysdeps/mach/hurd/bits/socket.h | 40 ++++++++++-- - sysdeps/unix/sysv/linux/bits/socket.h | 40 ++++++++++-- - sysdeps/unix/sysv/linux/cmsg_nxthdr.c | 36 ++++++++--- - 7 files changed, 276 insertions(+), 29 deletions(-) - create mode 100644 socket/tst-cmsghdr-skeleton.c - create mode 100644 socket/tst-cmsghdr.c - -diff --git a/bits/socket.h b/bits/socket.h -index 2b99dea33b..aac8c49b00 100644 ---- a/bits/socket.h -+++ b/bits/socket.h -@@ -245,6 +245,12 @@ struct cmsghdr - + CMSG_ALIGN (sizeof (struct cmsghdr))) - #define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) - -+/* Given a length, return the additional padding necessary such that -+ len + __CMSG_PADDING(len) == CMSG_ALIGN (len). */ -+#define __CMSG_PADDING(len) ((sizeof (size_t) \ -+ - ((len) & (sizeof (size_t) - 1))) \ -+ & (sizeof (size_t) - 1)) -+ - extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr, - struct cmsghdr *__cmsg) __THROW; - #ifdef __USE_EXTERN_INLINES -@@ -254,18 +260,38 @@ extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr, - _EXTERN_INLINE struct cmsghdr * - __NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)) - { -+ /* We may safely assume that __cmsg lies between __mhdr->msg_control and -+ __mhdr->msg_controllen because the user is required to obtain the first -+ cmsg via CMSG_FIRSTHDR, set its length, then obtain subsequent cmsgs -+ via CMSG_NXTHDR, setting lengths along the way. However, we don't yet -+ trust the value of __cmsg->cmsg_len and therefore do not use it in any -+ pointer arithmetic until we check its value. */ -+ -+ unsigned char * __msg_control_ptr = (unsigned char *) __mhdr->msg_control; -+ unsigned char * __cmsg_ptr = (unsigned char *) __cmsg; -+ -+ size_t __size_needed = sizeof (struct cmsghdr) -+ + __CMSG_PADDING (__cmsg->cmsg_len); -+ -+ /* The current header is malformed, too small to be a full header. */ - if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr)) -- /* The kernel header does this so there may be a reason. */ - return (struct cmsghdr *) 0; - -+ /* There isn't enough space between __cmsg and the end of the buffer to -+ hold the current cmsg *and* the next one. */ -+ if (((size_t) -+ (__msg_control_ptr + __mhdr->msg_controllen - __cmsg_ptr) -+ < __size_needed) -+ || ((size_t) -+ (__msg_control_ptr + __mhdr->msg_controllen - __cmsg_ptr -+ - __size_needed) -+ < __cmsg->cmsg_len)) -+ -+ return (struct cmsghdr *) 0; -+ -+ /* Now, we trust cmsg_len and can use it to find the next header. */ - __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg - + CMSG_ALIGN (__cmsg->cmsg_len)); -- if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control -- + __mhdr->msg_controllen) -- || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len) -- > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen))) -- /* No more entries. */ -- return (struct cmsghdr *) 0; - return __cmsg; - } - #endif /* Use `extern inline'. */ -diff --git a/socket/Makefile b/socket/Makefile -index 156eec6c85..2bde78387f 100644 ---- a/socket/Makefile -+++ b/socket/Makefile -@@ -34,6 +34,7 @@ routines := accept bind connect getpeername getsockname getsockopt \ - tests := \ - tst-accept4 \ - tst-sockopt \ -+ tst-cmsghdr \ - # tests - - tests-internal := \ -diff --git a/socket/tst-cmsghdr-skeleton.c b/socket/tst-cmsghdr-skeleton.c -new file mode 100644 -index 0000000000..4c6898569b ---- /dev/null -+++ b/socket/tst-cmsghdr-skeleton.c -@@ -0,0 +1,92 @@ -+/* Test ancillary data header creation. -+ Copyright (C) 2022 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ 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 -+ . */ -+ -+/* We use the preprocessor to generate the function/macro tests instead of -+ using indirection because having all the macro expansions alongside -+ each other lets the compiler warn us about suspicious pointer -+ arithmetic across subsequent CMSG_{FIRST,NXT}HDR expansions. */ -+ -+#include -+ -+#define RUN_TEST_CONCAT(suffix) run_test_##suffix -+#define RUN_TEST_FUNCNAME(suffix) RUN_TEST_CONCAT (suffix) -+ -+static void -+RUN_TEST_FUNCNAME (CMSG_NXTHDR_IMPL) (void) -+{ -+ struct msghdr m = {0}; -+ struct cmsghdr *cmsg; -+ char cmsgbuf[3 * CMSG_SPACE (sizeof (PAYLOAD))] = {0}; -+ -+ m.msg_control = cmsgbuf; -+ m.msg_controllen = sizeof (cmsgbuf); -+ -+ /* First header should point to the start of the buffer. */ -+ cmsg = CMSG_FIRSTHDR (&m); -+ TEST_VERIFY_EXIT ((char *) cmsg == cmsgbuf); -+ -+ /* If the first header length consumes the entire buffer, there is no -+ space remaining for additional headers. */ -+ cmsg->cmsg_len = sizeof (cmsgbuf); -+ cmsg = CMSG_NXTHDR_IMPL (&m, cmsg); -+ TEST_VERIFY_EXIT (cmsg == NULL); -+ -+ /* The first header length is so big, using it would cause an overflow. */ -+ cmsg = CMSG_FIRSTHDR (&m); -+ TEST_VERIFY_EXIT ((char *) cmsg == cmsgbuf); -+ cmsg->cmsg_len = SIZE_MAX; -+ cmsg = CMSG_NXTHDR_IMPL (&m, cmsg); -+ TEST_VERIFY_EXIT (cmsg == NULL); -+ -+ /* The first header leaves just enough space to hold another header. */ -+ cmsg = CMSG_FIRSTHDR (&m); -+ TEST_VERIFY_EXIT ((char *) cmsg == cmsgbuf); -+ cmsg->cmsg_len = sizeof (cmsgbuf) - sizeof (struct cmsghdr); -+ cmsg = CMSG_NXTHDR_IMPL (&m, cmsg); -+ TEST_VERIFY_EXIT (cmsg != NULL); -+ -+ /* The first header leaves space but not enough for another header. */ -+ cmsg = CMSG_FIRSTHDR (&m); -+ TEST_VERIFY_EXIT ((char *) cmsg == cmsgbuf); -+ cmsg->cmsg_len ++; -+ cmsg = CMSG_NXTHDR_IMPL (&m, cmsg); -+ TEST_VERIFY_EXIT (cmsg == NULL); -+ -+ /* The second header leaves just enough space to hold another header. */ -+ cmsg = CMSG_FIRSTHDR (&m); -+ TEST_VERIFY_EXIT ((char *) cmsg == cmsgbuf); -+ cmsg->cmsg_len = CMSG_LEN (sizeof (PAYLOAD)); -+ cmsg = CMSG_NXTHDR_IMPL (&m, cmsg); -+ TEST_VERIFY_EXIT (cmsg != NULL); -+ cmsg->cmsg_len = sizeof (cmsgbuf) -+ - CMSG_SPACE (sizeof (PAYLOAD)) /* First header. */ -+ - sizeof (struct cmsghdr); -+ cmsg = CMSG_NXTHDR_IMPL (&m, cmsg); -+ TEST_VERIFY_EXIT (cmsg != NULL); -+ -+ /* The second header leaves space but not enough for another header. */ -+ cmsg = CMSG_FIRSTHDR (&m); -+ TEST_VERIFY_EXIT ((char *) cmsg == cmsgbuf); -+ cmsg = CMSG_NXTHDR_IMPL (&m, cmsg); -+ TEST_VERIFY_EXIT (cmsg != NULL); -+ cmsg->cmsg_len ++; -+ cmsg = CMSG_NXTHDR_IMPL (&m, cmsg); -+ TEST_VERIFY_EXIT (cmsg == NULL); -+ -+ return; -+} -diff --git a/socket/tst-cmsghdr.c b/socket/tst-cmsghdr.c -new file mode 100644 -index 0000000000..68c96d3c9d ---- /dev/null -+++ b/socket/tst-cmsghdr.c -@@ -0,0 +1,56 @@ -+/* Test ancillary data header creation. -+ Copyright (C) 2022 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ 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 -+ . */ -+ -+#include -+#include -+#include -+#include -+ -+#define PAYLOAD "Hello, World!" -+ -+/* CMSG_NXTHDR is a macro that calls an inline function defined in -+ bits/socket.h. In case the function cannot be inlined, libc.so carries -+ a copy. Both versions need to be tested. */ -+ -+#define CMSG_NXTHDR_IMPL CMSG_NXTHDR -+#include "tst-cmsghdr-skeleton.c" -+#undef CMSG_NXTHDR_IMPL -+ -+static struct cmsghdr * (* cmsg_nxthdr) (struct msghdr *, struct cmsghdr *); -+ -+#define CMSG_NXTHDR_IMPL cmsg_nxthdr -+#include "tst-cmsghdr-skeleton.c" -+#undef CMSG_NXTHDR_IMPL -+ -+static int -+do_test (void) -+{ -+ static void *handle; -+ -+ run_test_CMSG_NXTHDR (); -+ -+ handle = xdlopen (LIBC_SO, RTLD_LAZY); -+ cmsg_nxthdr = (struct cmsghdr * (*) (struct msghdr *, struct cmsghdr *)) -+ xdlsym (handle, "__cmsg_nxthdr"); -+ -+ run_test_cmsg_nxthdr (); -+ -+ return 0; -+} -+ -+#include -diff --git a/sysdeps/mach/hurd/bits/socket.h b/sysdeps/mach/hurd/bits/socket.h -index 5b35ea81ec..70fce4fb27 100644 ---- a/sysdeps/mach/hurd/bits/socket.h -+++ b/sysdeps/mach/hurd/bits/socket.h -@@ -249,6 +249,12 @@ struct cmsghdr - + CMSG_ALIGN (sizeof (struct cmsghdr))) - #define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) - -+/* Given a length, return the additional padding necessary such that -+ len + __CMSG_PADDING(len) == CMSG_ALIGN (len). */ -+#define __CMSG_PADDING(len) ((sizeof (size_t) \ -+ - ((len) & (sizeof (size_t) - 1))) \ -+ & (sizeof (size_t) - 1)) -+ - extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr, - struct cmsghdr *__cmsg) __THROW; - #ifdef __USE_EXTERN_INLINES -@@ -258,18 +264,38 @@ extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr, - _EXTERN_INLINE struct cmsghdr * - __NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)) - { -+ /* We may safely assume that __cmsg lies between __mhdr->msg_control and -+ __mhdr->msg_controllen because the user is required to obtain the first -+ cmsg via CMSG_FIRSTHDR, set its length, then obtain subsequent cmsgs -+ via CMSG_NXTHDR, setting lengths along the way. However, we don't yet -+ trust the value of __cmsg->cmsg_len and therefore do not use it in any -+ pointer arithmetic until we check its value. */ -+ -+ unsigned char * __msg_control_ptr = (unsigned char *) __mhdr->msg_control; -+ unsigned char * __cmsg_ptr = (unsigned char *) __cmsg; -+ -+ size_t __size_needed = sizeof (struct cmsghdr) -+ + __CMSG_PADDING (__cmsg->cmsg_len); -+ -+ /* The current header is malformed, too small to be a full header. */ - if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr)) -- /* The kernel header does this so there may be a reason. */ - return (struct cmsghdr *) 0; - -+ /* There isn't enough space between __cmsg and the end of the buffer to -+ hold the current cmsg *and* the next one. */ -+ if (((size_t) -+ (__msg_control_ptr + __mhdr->msg_controllen - __cmsg_ptr) -+ < __size_needed) -+ || ((size_t) -+ (__msg_control_ptr + __mhdr->msg_controllen - __cmsg_ptr -+ - __size_needed) -+ < __cmsg->cmsg_len)) -+ -+ return (struct cmsghdr *) 0; -+ -+ /* Now, we trust cmsg_len and can use it to find the next header. */ - __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg - + CMSG_ALIGN (__cmsg->cmsg_len)); -- if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control -- + __mhdr->msg_controllen) -- || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len) -- > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen))) -- /* No more entries. */ -- return (struct cmsghdr *) 0; - return __cmsg; - } - #endif /* Use `extern inline'. */ -diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h -index 4f1f810ea1..539b8d7716 100644 ---- a/sysdeps/unix/sysv/linux/bits/socket.h -+++ b/sysdeps/unix/sysv/linux/bits/socket.h -@@ -307,6 +307,12 @@ struct cmsghdr - + CMSG_ALIGN (sizeof (struct cmsghdr))) - #define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) - -+/* Given a length, return the additional padding necessary such that -+ len + __CMSG_PADDING(len) == CMSG_ALIGN (len). */ -+#define __CMSG_PADDING(len) ((sizeof (size_t) \ -+ - ((len) & (sizeof (size_t) - 1))) \ -+ & (sizeof (size_t) - 1)) -+ - extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr, - struct cmsghdr *__cmsg) __THROW; - #ifdef __USE_EXTERN_INLINES -@@ -316,18 +322,38 @@ extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr, - _EXTERN_INLINE struct cmsghdr * - __NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)) - { -+ /* We may safely assume that __cmsg lies between __mhdr->msg_control and -+ __mhdr->msg_controllen because the user is required to obtain the first -+ cmsg via CMSG_FIRSTHDR, set its length, then obtain subsequent cmsgs -+ via CMSG_NXTHDR, setting lengths along the way. However, we don't yet -+ trust the value of __cmsg->cmsg_len and therefore do not use it in any -+ pointer arithmetic until we check its value. */ -+ -+ unsigned char * __msg_control_ptr = (unsigned char *) __mhdr->msg_control; -+ unsigned char * __cmsg_ptr = (unsigned char *) __cmsg; -+ -+ size_t __size_needed = sizeof (struct cmsghdr) -+ + __CMSG_PADDING (__cmsg->cmsg_len); -+ -+ /* The current header is malformed, too small to be a full header. */ - if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr)) -- /* The kernel header does this so there may be a reason. */ - return (struct cmsghdr *) 0; - -+ /* There isn't enough space between __cmsg and the end of the buffer to -+ hold the current cmsg *and* the next one. */ -+ if (((size_t) -+ (__msg_control_ptr + __mhdr->msg_controllen - __cmsg_ptr) -+ < __size_needed) -+ || ((size_t) -+ (__msg_control_ptr + __mhdr->msg_controllen - __cmsg_ptr -+ - __size_needed) -+ < __cmsg->cmsg_len)) -+ -+ return (struct cmsghdr *) 0; -+ -+ /* Now, we trust cmsg_len and can use it to find the next header. */ - __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg - + CMSG_ALIGN (__cmsg->cmsg_len)); -- if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control -- + __mhdr->msg_controllen) -- || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len) -- > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen))) -- /* No more entries. */ -- return (struct cmsghdr *) 0; - return __cmsg; - } - #endif /* Use `extern inline'. */ -diff --git a/sysdeps/unix/sysv/linux/cmsg_nxthdr.c b/sysdeps/unix/sysv/linux/cmsg_nxthdr.c -index 15b7a3a925..24f72b797a 100644 ---- a/sysdeps/unix/sysv/linux/cmsg_nxthdr.c -+++ b/sysdeps/unix/sysv/linux/cmsg_nxthdr.c -@@ -23,18 +23,38 @@ - struct cmsghdr * - __cmsg_nxthdr (struct msghdr *mhdr, struct cmsghdr *cmsg) - { -+ /* We may safely assume that cmsg lies between mhdr->msg_control and -+ mhdr->msg_controllen because the user is required to obtain the first -+ cmsg via CMSG_FIRSTHDR, set its length, then obtain subsequent cmsgs -+ via CMSG_NXTHDR, setting lengths along the way. However, we don't yet -+ trust the value of cmsg->cmsg_len and therefore do not use it in any -+ pointer arithmetic until we check its value. */ -+ -+ unsigned char * msg_control_ptr = (unsigned char *) mhdr->msg_control; -+ unsigned char * cmsg_ptr = (unsigned char *) cmsg; -+ -+ size_t size_needed = sizeof (struct cmsghdr) -+ + __CMSG_PADDING (cmsg->cmsg_len); -+ -+ /* The current header is malformed, too small to be a full header. */ - if ((size_t) cmsg->cmsg_len < sizeof (struct cmsghdr)) -- /* The kernel header does this so there may be a reason. */ -- return NULL; -+ return (struct cmsghdr *) 0; -+ -+ /* There isn't enough space between cmsg and the end of the buffer to -+ hold the current cmsg *and* the next one. */ -+ if (((size_t) -+ (msg_control_ptr + mhdr->msg_controllen - cmsg_ptr) -+ < size_needed) -+ || ((size_t) -+ (msg_control_ptr + mhdr->msg_controllen - cmsg_ptr -+ - size_needed) -+ < cmsg->cmsg_len)) -+ -+ return (struct cmsghdr *) 0; - -+ /* Now, we trust cmsg_len and can use it to find the next header. */ - cmsg = (struct cmsghdr *) ((unsigned char *) cmsg - + CMSG_ALIGN (cmsg->cmsg_len)); -- if ((unsigned char *) (cmsg + 1) > ((unsigned char *) mhdr->msg_control -- + mhdr->msg_controllen) -- || ((unsigned char *) cmsg + CMSG_ALIGN (cmsg->cmsg_len) -- > ((unsigned char *) mhdr->msg_control + mhdr->msg_controllen))) -- /* No more entries. */ -- return NULL; - return cmsg; - } - libc_hidden_def (__cmsg_nxthdr) --- -2.37.2 - diff --git a/0009-NEWS-Add-entry-for-bug-28846.patch b/0009-NEWS-Add-entry-for-bug-28846.patch deleted file mode 100644 index c56e61c..0000000 --- a/0009-NEWS-Add-entry-for-bug-28846.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 5c62874f423af93e97b51bc9a57af228a546156f Mon Sep 17 00:00:00 2001 -From: Arjun Shankar -Date: Mon, 22 Aug 2022 18:21:14 +0200 -Subject: [PATCH 09/15] NEWS: Add entry for bug 28846 - ---- - NEWS | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/NEWS b/NEWS -index becab3ade9..ae30900bbc 100644 ---- a/NEWS -+++ b/NEWS -@@ -9,6 +9,7 @@ Version 2.36.1 - - The following bugs are resolved with this release: - -+ [28846] CMSG_NXTHDR may trigger -Wstrict-overflow warning - [29446] _dlopen now ignores dl_caller argument in static mode - [29485] Linux: Terminate subprocess on late failure in tst-pidfd - [29490] alpha: New __brk_call implementation is broken --- -2.37.2 - diff --git a/0010-glibcextract.py-Add-compile_c_snippet.patch b/0010-glibcextract.py-Add-compile_c_snippet.patch deleted file mode 100644 index 0fea934..0000000 --- a/0010-glibcextract.py-Add-compile_c_snippet.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 0062e7dd1c3674ece2daca53a898badd28b60421 Mon Sep 17 00:00:00 2001 -From: Adhemerval Zanella -Date: Wed, 10 Aug 2022 16:24:06 -0300 -Subject: [PATCH 10/15] glibcextract.py: Add compile_c_snippet - -It might be used on tests to check if a snippet build with the provided -compiler and flags. - -Reviewed-by: Florian Weimer -(cherry picked from commit 841afa116e32b3c7195475769c26bf46fd870d32) ---- - scripts/glibcextract.py | 19 +++++++++++++++++++ - 1 file changed, 19 insertions(+) - -diff --git a/scripts/glibcextract.py b/scripts/glibcextract.py -index 43ab58ffe2..36d204c9b0 100644 ---- a/scripts/glibcextract.py -+++ b/scripts/glibcextract.py -@@ -17,6 +17,7 @@ - # License along with the GNU C Library; if not, see - # . - -+import collections - import os.path - import re - import subprocess -@@ -173,3 +174,21 @@ def compare_macro_consts(source_1, source_2, cc, macro_re, exclude_re=None, - if not allow_extra_2: - ret = 1 - return ret -+ -+CompileResult = collections.namedtuple("CompileResult", "returncode output") -+ -+def compile_c_snippet(snippet, cc, extra_cc_args=''): -+ """Compile and return whether the SNIPPET can be build with CC along -+ EXTRA_CC_ARGS compiler flags. Return a CompileResult with RETURNCODE -+ being 0 for success, or the failure value and the compiler output. -+ """ -+ with tempfile.TemporaryDirectory() as temp_dir: -+ c_file_name = os.path.join(temp_dir, 'test.c') -+ obj_file_name = os.path.join(temp_dir, 'test.o') -+ with open(c_file_name, 'w') as c_file: -+ c_file.write(snippet + '\n') -+ cmd = cc.split() + extra_cc_args.split() + ['-c', '-o', obj_file_name, -+ c_file_name] -+ r = subprocess.run(cmd, check=False, stdout=subprocess.PIPE, -+ stderr=subprocess.STDOUT) -+ return CompileResult(r.returncode, r.stdout) --- -2.37.2 - diff --git a/0011-linux-Use-compile_c_snippet-to-check-linux-pidfd.h-a.patch b/0011-linux-Use-compile_c_snippet-to-check-linux-pidfd.h-a.patch deleted file mode 100644 index 415f940..0000000 --- a/0011-linux-Use-compile_c_snippet-to-check-linux-pidfd.h-a.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 1cc5513114e76083669cba1b11252aad35525e69 Mon Sep 17 00:00:00 2001 -From: Adhemerval Zanella -Date: Wed, 10 Aug 2022 14:24:44 -0300 -Subject: [PATCH 11/15] linux: Use compile_c_snippet to check linux/pidfd.h - availability - -Instead of tying to a specific kernel version. - -Checked on x86_64-linux-gnu. - -Reviewed-by: Florian Weimer -(cherry picked from commit 1542019b69b7ec7b2cd34357af035e406d153631) ---- - sysdeps/unix/sysv/linux/tst-pidfd-consts.py | 10 ++++++---- - 1 file changed, 6 insertions(+), 4 deletions(-) - -diff --git a/sysdeps/unix/sysv/linux/tst-pidfd-consts.py b/sysdeps/unix/sysv/linux/tst-pidfd-consts.py -index 90cbb9be64..d732173abd 100644 ---- a/sysdeps/unix/sysv/linux/tst-pidfd-consts.py -+++ b/sysdeps/unix/sysv/linux/tst-pidfd-consts.py -@@ -33,11 +33,13 @@ def main(): - help='C compiler (including options) to use') - args = parser.parse_args() - -- linux_version_headers = glibcsyscalls.linux_kernel_version(args.cc) -- # Linux started to provide pidfd.h with 5.10. -- if linux_version_headers < (5, 10): -+ if glibcextract.compile_c_snippet( -+ '#include ', -+ args.cc).returncode != 0: - sys.exit (77) -- linux_version_glibc = (5, 18) -+ -+ linux_version_headers = glibcsyscalls.linux_kernel_version(args.cc) -+ linux_version_glibc = (5, 19) - sys.exit(glibcextract.compare_macro_consts( - '#include \n', - '#include \n' --- -2.37.2 - diff --git a/0012-linux-Mimic-kernel-defition-for-BLOCK_SIZE.patch b/0012-linux-Mimic-kernel-defition-for-BLOCK_SIZE.patch deleted file mode 100644 index 44aa767..0000000 --- a/0012-linux-Mimic-kernel-defition-for-BLOCK_SIZE.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 4dad97e2a2e510c6b53a0add29a2188714fcf4ab Mon Sep 17 00:00:00 2001 -From: Adhemerval Zanella -Date: Wed, 10 Aug 2022 14:24:45 -0300 -Subject: [PATCH 12/15] linux: Mimic kernel defition for BLOCK_SIZE - -To avoid possible warnings if the kernel header is included before -sys/mount.h. - -Reviewed-by: Florian Weimer -(cherry picked from commit c68b6044bc7945716431f1adc091b17c39b80a06) ---- - sysdeps/unix/sysv/linux/sys/mount.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h -index f965986ba8..df6b0dbb42 100644 ---- a/sysdeps/unix/sysv/linux/sys/mount.h -+++ b/sysdeps/unix/sysv/linux/sys/mount.h -@@ -27,8 +27,8 @@ - #include - #include - --#define BLOCK_SIZE 1024 - #define BLOCK_SIZE_BITS 10 -+#define BLOCK_SIZE (1< -Date: Wed, 10 Aug 2022 14:24:46 -0300 -Subject: [PATCH 13/15] linux: Use compile_c_snippet to check linux/mount.h - availability - -Checked on x86_64-linux-gnu. - -Reviewed-by: Florian Weimer -(cherry picked from commit e1226cdc6b209539a92d32d5b620ba53fd35abf3) ---- - sysdeps/unix/sysv/linux/tst-mount-consts.py | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/sysdeps/unix/sysv/linux/tst-mount-consts.py b/sysdeps/unix/sysv/linux/tst-mount-consts.py -index a62f803123..be2ef2daf1 100755 ---- a/sysdeps/unix/sysv/linux/tst-mount-consts.py -+++ b/sysdeps/unix/sysv/linux/tst-mount-consts.py -@@ -33,6 +33,11 @@ def main(): - help='C compiler (including options) to use') - args = parser.parse_args() - -+ if glibcextract.compile_c_snippet( -+ '#include ', -+ args.cc).returncode != 0: -+ sys.exit (77) -+ - linux_version_headers = glibcsyscalls.linux_kernel_version(args.cc) - # Constants in glibc were updated to match Linux v5.16. When glibc - # constants are updated this value should be updated to match the --- -2.37.2 - diff --git a/0014-linux-Fix-sys-mount.h-usage-with-kernel-headers.patch b/0014-linux-Fix-sys-mount.h-usage-with-kernel-headers.patch deleted file mode 100644 index bedcfa6..0000000 --- a/0014-linux-Fix-sys-mount.h-usage-with-kernel-headers.patch +++ /dev/null @@ -1,337 +0,0 @@ -From bb1e8b0ca99b5cbedfae3e6245528a87d95ff3e2 Mon Sep 17 00:00:00 2001 -From: Adhemerval Zanella -Date: Wed, 10 Aug 2022 14:24:47 -0300 -Subject: [PATCH 14/15] linux: Fix sys/mount.h usage with kernel headers - -Now that kernel exports linux/mount.h and includes it on linux/fs.h, -its definitions might clash with glibc exports sys/mount.h. To avoid -the need to rearrange the Linux header to be always after glibc one, -the glibc sys/mount.h is changed to: - - 1. Undefine the macros also used as enum constants. This covers prior - inclusion of (for instance MS_RDONLY). - - 2. Include based on the usual __has_include check - (needs to use __has_include ("linux/mount.h") to paper over GCC - bugs. - - 3. Define enum fsconfig_command only if FSOPEN_CLOEXEC is not defined. - (FSOPEN_CLOEXEC should be a very close proxy.) - - 4. Define struct mount_attr if MOUNT_ATTR_SIZE_VER0 is not defined. - (Added in the same commit on the Linux side.) - -This patch also adds some tests to check if including linux/fs.h and -linux/mount.h after and before sys/mount.h does work. - -Checked on x86_64-linux-gnu. - -Reviewed-by: Florian Weimer -(cherry picked from commit 774058d72942249f71d74e7f2b639f77184160a6) ---- - sysdeps/unix/sysv/linux/Makefile | 8 +++ - sysdeps/unix/sysv/linux/sys/mount.h | 71 +++++++++++++++++--- - sysdeps/unix/sysv/linux/tst-mount-compile.py | 66 ++++++++++++++++++ - 3 files changed, 137 insertions(+), 8 deletions(-) - create mode 100755 sysdeps/unix/sysv/linux/tst-mount-compile.py - -diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile -index a139a16532..3ceda9fdbf 100644 ---- a/sysdeps/unix/sysv/linux/Makefile -+++ b/sysdeps/unix/sysv/linux/Makefile -@@ -265,6 +265,14 @@ $(objpfx)tst-mount-consts.out: ../sysdeps/unix/sysv/linux/tst-mount-consts.py - < /dev/null > $@ 2>&1; $(evaluate-test) - $(objpfx)tst-mount-consts.out: $(sysdeps-linux-python-deps) - -+tests-special += $(objpfx)tst-mount-compile.out -+$(objpfx)tst-mount-compile.out: ../sysdeps/unix/sysv/linux/tst-mount-compile.py -+ $(sysdeps-linux-python) \ -+ ../sysdeps/unix/sysv/linux/tst-mount-compile.py \ -+ $(sysdeps-linux-python-cc) \ -+ < /dev/null > $@ 2>&1; $(evaluate-test) -+$(objpfx)tst-mount-compile.out: $(sysdeps-linux-python-deps) -+ - tst-rseq-disable-ENV = GLIBC_TUNABLES=glibc.pthread.rseq=0 - - endif # $(subdir) == misc -diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h -index df6b0dbb42..2e3fd6a7fe 100644 ---- a/sysdeps/unix/sysv/linux/sys/mount.h -+++ b/sysdeps/unix/sysv/linux/sys/mount.h -@@ -27,6 +27,13 @@ - #include - #include - -+#ifdef __has_include -+# if __has_include ("linux/mount.h") -+# include "linux/mount.h" -+# endif -+#endif -+ -+ - #define BLOCK_SIZE_BITS 10 - #define BLOCK_SIZE (1<. -+ -+import argparse -+import sys -+ -+import glibcextract -+ -+ -+def main(): -+ """The main entry point.""" -+ parser = argparse.ArgumentParser( -+ description='Check if glibc provided sys/mount.h can be ' -+ ' used along related kernel headers.') -+ parser.add_argument('--cc', metavar='CC', -+ help='C compiler (including options) to use') -+ args = parser.parse_args() -+ -+ if glibcextract.compile_c_snippet( -+ '#include ', -+ args.cc).returncode != 0: -+ sys.exit (77) -+ -+ def check(testname, snippet): -+ # Add -Werror to catch macro redefinitions and _ISOMAC to avoid -+ # internal glibc definitions. -+ r = glibcextract.compile_c_snippet(snippet, args.cc, -+ '-Werror -D_ISOMAC') -+ if r.returncode != 0: -+ print('error: test {}:\n{}'.format(testname, r.output.decode())) -+ return r.returncode -+ -+ status = max( -+ check("sys/mount.h + linux/mount.h", -+ "#include \n" -+ "#include "), -+ check("sys/mount.h + linux/fs.h", -+ "#include \n" -+ "#include "), -+ check("linux/mount.h + sys/mount.h", -+ "#include \n" -+ "#include "), -+ check("linux/fs.h + sys/mount.h", -+ "#include \n" -+ "#include ")) -+ sys.exit(status) -+ -+if __name__ == '__main__': -+ main() --- -2.37.2 - diff --git a/0015-Linux-Fix-enum-fsconfig_command-detection-in-sys-mou.patch b/0015-Linux-Fix-enum-fsconfig_command-detection-in-sys-mou.patch deleted file mode 100644 index c30efc5..0000000 --- a/0015-Linux-Fix-enum-fsconfig_command-detection-in-sys-mou.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 3bd3c612e98a53ce60ed972f5cd2b90628b3cba5 Mon Sep 17 00:00:00 2001 -From: Florian Weimer -Date: Tue, 16 Aug 2022 09:25:23 +0200 -Subject: [PATCH 15/15] Linux: Fix enum fsconfig_command detection in - - -The #ifdef FSOPEN_CLOEXEC check did not work because the macro -was always defined in this header prior to the check, so that -the contents did not matter. - -Fixes commit 774058d72942249f71d74e7f2b639f77184160a6 -("linux: Fix sys/mount.h usage with kernel headers"). - -(cherry picked from commit 2955ef4b7c9b56fcd7abfeddef7ee83c60abff98) ---- - sysdeps/unix/sysv/linux/sys/mount.h | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h -index 2e3fd6a7fe..19841d0738 100644 ---- a/sysdeps/unix/sysv/linux/sys/mount.h -+++ b/sysdeps/unix/sysv/linux/sys/mount.h -@@ -188,9 +188,6 @@ enum - }; - - --/* fsopen flags. */ --#define FSOPEN_CLOEXEC 0x00000001 -- - /* fsmount flags. */ - #define FSMOUNT_CLOEXEC 0x00000001 - -@@ -261,6 +258,9 @@ enum fsconfig_command - }; - #endif - -+/* fsopen flags. */ -+#define FSOPEN_CLOEXEC 0x00000001 -+ - /* open_tree flags. */ - #define OPEN_TREE_CLONE 1 /* Clone the target tree and attach the clone */ - #define OPEN_TREE_CLOEXEC O_CLOEXEC /* Close the file on execve() */ --- -2.37.2 - diff --git a/0016-syslog-Fix-large-messages-BZ-29536.patch b/0016-syslog-Fix-large-messages-BZ-29536.patch deleted file mode 100644 index ab9f683..0000000 --- a/0016-syslog-Fix-large-messages-BZ-29536.patch +++ /dev/null @@ -1,336 +0,0 @@ -From b0e7888d1fa2dbd2d9e1645ec8c796abf78880b9 Mon Sep 17 00:00:00 2001 -From: Adhemerval Zanella -Date: Sun, 28 Aug 2022 16:52:53 -0300 -Subject: [PATCH 16/22] syslog: Fix large messages (BZ#29536) - -The a583b6add407c17cd change did not handle large messages that -would require a heap allocation correctly, where the message itself -is not take in consideration. - -This patch fixes it and extend the tst-syslog to check for large -messages as well. - -Checked on x86_64-linux-gnu. - -Reviewed-by: Siddhesh Poyarekar -(cherry picked from commit 52a5be0df411ef3ff45c10c7c308cb92993d15b1) ---- - misc/syslog.c | 18 +++--- - misc/tst-syslog.c | 152 +++++++++++++++++++++++++++++++++++++++------- - 2 files changed, 142 insertions(+), 28 deletions(-) - -diff --git a/misc/syslog.c b/misc/syslog.c -index 554089bfc4..b88f66c835 100644 ---- a/misc/syslog.c -+++ b/misc/syslog.c -@@ -193,28 +193,32 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap, - int vl = __vsnprintf_internal (bufs + l, sizeof bufs - l, fmt, apc, - mode_flags); - if (0 <= vl && vl < sizeof bufs - l) -- { -- buf = bufs; -- bufsize = l + vl; -- } -+ buf = bufs; -+ bufsize = l + vl; - - va_end (apc); - } - - if (buf == NULL) - { -- buf = malloc (l * sizeof (char)); -+ buf = malloc ((bufsize + 1) * sizeof (char)); - if (buf != NULL) - { - /* Tell the cancellation handler to free this buffer. */ - clarg.buf = buf; - - if (has_ts) -- __snprintf (bufs, sizeof bufs, -+ __snprintf (buf, l + 1, - SYSLOG_HEADER (pri, timestamp, &msgoff, pid)); - else -- __snprintf (bufs, sizeof bufs, -+ __snprintf (buf, l + 1, - SYSLOG_HEADER_WITHOUT_TS (pri, &msgoff)); -+ -+ va_list apc; -+ va_copy (apc, ap); -+ __vsnprintf_internal (buf + l, bufsize - l + 1, fmt, apc, -+ mode_flags); -+ va_end (apc); - } - else - { -diff --git a/misc/tst-syslog.c b/misc/tst-syslog.c -index e550d15796..1d332ece53 100644 ---- a/misc/tst-syslog.c -+++ b/misc/tst-syslog.c -@@ -68,21 +68,19 @@ static const int priorities[] = - LOG_DEBUG - }; - --enum -- { -- ident_length = 64, -- msg_length = 64 -- }; -+#define IDENT_LENGTH 64 -+#define MSG_LENGTH 1024 - - #define SYSLOG_MSG_BASE "syslog_message" - #define OPENLOG_IDENT "openlog_ident" -+static char large_message[MSG_LENGTH]; - - struct msg_t - { - int priority; - int facility; -- char ident[ident_length]; -- char msg[msg_length]; -+ char ident[IDENT_LENGTH]; -+ char msg[MSG_LENGTH]; - pid_t pid; - }; - -@@ -147,6 +145,37 @@ check_syslog_message (const struct msg_t *msg, int msgnum, int options, - return true; - } - -+static void -+send_syslog_large (int options) -+{ -+ int facility = LOG_USER; -+ int priority = LOG_INFO; -+ -+ syslog (facility | priority, "%s %d %d", large_message, facility, -+ priority); -+} -+ -+static void -+send_vsyslog_large (int options) -+{ -+ int facility = LOG_USER; -+ int priority = LOG_INFO; -+ -+ call_vsyslog (facility | priority, "%s %d %d", large_message, facility, -+ priority); -+} -+ -+static bool -+check_syslog_message_large (const struct msg_t *msg, int msgnum, int options, -+ pid_t pid) -+{ -+ TEST_COMPARE (msg->facility, LOG_USER); -+ TEST_COMPARE (msg->priority, LOG_INFO); -+ TEST_COMPARE_STRING (msg->msg, large_message); -+ -+ return false; -+} -+ - static void - send_openlog (int options) - { -@@ -179,6 +208,17 @@ send_openlog (int options) - closelog (); - } - -+static void -+send_openlog_large (int options) -+{ -+ /* Define a non-default IDENT and a not default facility. */ -+ openlog (OPENLOG_IDENT, options, LOG_LOCAL0); -+ -+ syslog (LOG_INFO, "%s %d %d", large_message, LOG_LOCAL0, LOG_INFO); -+ -+ closelog (); -+} -+ - static bool - check_openlog_message (const struct msg_t *msg, int msgnum, - int options, pid_t pid) -@@ -189,7 +229,7 @@ check_openlog_message (const struct msg_t *msg, int msgnum, - int expected_priority = priorities[msgnum % array_length (priorities)]; - TEST_COMPARE (msg->priority, expected_priority); - -- char expected_ident[ident_length]; -+ char expected_ident[IDENT_LENGTH]; - snprintf (expected_ident, sizeof (expected_ident), "%s%s%.0d%s:", - OPENLOG_IDENT, - options & LOG_PID ? "[" : "", -@@ -211,15 +251,38 @@ check_openlog_message (const struct msg_t *msg, int msgnum, - return true; - } - -+static bool -+check_openlog_message_large (const struct msg_t *msg, int msgnum, -+ int options, pid_t pid) -+{ -+ char expected_ident[IDENT_LENGTH]; -+ snprintf (expected_ident, sizeof (expected_ident), "%s%s%.0d%s:", -+ OPENLOG_IDENT, -+ options & LOG_PID ? "[" : "", -+ options & LOG_PID ? pid : 0, -+ options & LOG_PID ? "]" : ""); -+ -+ TEST_COMPARE_STRING (msg->ident, expected_ident); -+ TEST_COMPARE_STRING (msg->msg, large_message); -+ TEST_COMPARE (msg->priority, LOG_INFO); -+ TEST_COMPARE (msg->facility, LOG_LOCAL0); -+ -+ return false; -+} -+ - static struct msg_t - parse_syslog_msg (const char *msg) - { - struct msg_t r = { .pid = -1 }; - int number; - -+#define STRINPUT(size) XSTRINPUT(size) -+#define XSTRINPUT(size) "%" # size "s" -+ - /* The message in the form: -- <179>Apr 8 14:51:19 tst-syslog: syslog message 176 3 */ -- int n = sscanf (msg, "<%3d>%*s %*d %*d:%*d:%*d %32s %64s %*d %*d", -+ <179>Apr 8 14:51:19 tst-syslog: message 176 3 */ -+ int n = sscanf (msg, "<%3d>%*s %*d %*d:%*d:%*d " STRINPUT(IDENT_LENGTH) -+ " " STRINPUT(MSG_LENGTH) " %*d %*d", - &number, r.ident, r.msg); - TEST_COMPARE (n, 3); - -@@ -246,7 +309,7 @@ parse_syslog_console (const char *msg) - - /* The message in the form: - openlog_ident: syslog_message 128 0 */ -- int n = sscanf (msg, "%32s %64s %d %d", -+ int n = sscanf (msg, STRINPUT(IDENT_LENGTH) " " STRINPUT(MSG_LENGTH) " %d %d", - r.ident, r.msg, &facility, &priority); - TEST_COMPARE (n, 4); - -@@ -281,7 +344,7 @@ check_syslog_udp (void (*syslog_send)(int), int options, - int msgnum = 0; - while (1) - { -- char buf[512]; -+ char buf[2048]; - size_t l = xrecvfrom (server_udp, buf, sizeof (buf), 0, - (struct sockaddr *) &addr, &addrlen); - buf[l] = '\0'; -@@ -325,7 +388,7 @@ check_syslog_tcp (void (*syslog_send)(int), int options, - - int client_tcp = xaccept (server_tcp, NULL, NULL); - -- char buf[512], *rb = buf; -+ char buf[2048], *rb = buf; - size_t rbl = sizeof (buf); - size_t prl = 0; /* Track the size of the partial record. */ - int msgnum = 0; -@@ -393,20 +456,34 @@ check_syslog_console_read (FILE *fp) - } - - static void --check_syslog_console (void) -+check_syslog_console_read_large (FILE *fp) -+{ -+ char buf[2048]; -+ TEST_VERIFY (fgets (buf, sizeof (buf), fp) != NULL); -+ struct msg_t msg = parse_syslog_console (buf); -+ -+ TEST_COMPARE_STRING (msg.ident, OPENLOG_IDENT ":"); -+ TEST_COMPARE_STRING (msg.msg, large_message); -+ TEST_COMPARE (msg.priority, LOG_INFO); -+ TEST_COMPARE (msg.facility, LOG_LOCAL0); -+} -+ -+static void -+check_syslog_console (void (*syslog_send)(int), -+ void (*syslog_check)(FILE *fp)) - { - xmkfifo (_PATH_CONSOLE, 0666); - - pid_t sender_pid = xfork (); - if (sender_pid == 0) - { -- send_openlog (LOG_CONS); -+ syslog_send (LOG_CONS); - _exit (0); - } - - { - FILE *fp = xfopen (_PATH_CONSOLE, "r+"); -- check_syslog_console_read (fp); -+ syslog_check (fp); - xfclose (fp); - } - -@@ -425,16 +502,28 @@ send_openlog_callback (void *clousure) - } - - static void --check_syslog_perror (void) -+send_openlog_callback_large (void *clousure) -+{ -+ int options = *(int *) clousure; -+ send_openlog_large (options); -+} -+ -+static void -+check_syslog_perror (bool large) - { - struct support_capture_subprocess result; -- result = support_capture_subprocess (send_openlog_callback, -+ result = support_capture_subprocess (large -+ ? send_openlog_callback_large -+ : send_openlog_callback, - &(int){LOG_PERROR}); - - FILE *mfp = fmemopen (result.err.buffer, result.err.length, "r"); - if (mfp == NULL) - FAIL_EXIT1 ("fmemopen: %m"); -- check_syslog_console_read (mfp); -+ if (large) -+ check_syslog_console_read_large (mfp); -+ else -+ check_syslog_console_read (mfp); - xfclose (mfp); - - support_capture_subprocess_check (&result, "tst-openlog-child", 0, -@@ -462,10 +551,31 @@ do_test (void) - check_syslog_tcp (send_openlog, LOG_PID, check_openlog_message); - - /* Check the LOG_CONS option. */ -- check_syslog_console (); -+ check_syslog_console (send_openlog, check_syslog_console_read); - - /* Check the LOG_PERROR option. */ -- check_syslog_perror (); -+ check_syslog_perror (false); -+ -+ /* Similar tests as before, but with a large message to trigger the -+ syslog path that uses dynamically allocated memory. */ -+ memset (large_message, 'a', sizeof large_message - 1); -+ large_message[sizeof large_message - 1] = '\0'; -+ -+ check_syslog_udp (send_syslog_large, 0, check_syslog_message_large); -+ check_syslog_tcp (send_syslog_large, 0, check_syslog_message_large); -+ -+ check_syslog_udp (send_vsyslog_large, 0, check_syslog_message_large); -+ check_syslog_tcp (send_vsyslog_large, 0, check_syslog_message_large); -+ -+ check_syslog_udp (send_openlog_large, 0, check_openlog_message_large); -+ check_syslog_tcp (send_openlog_large, 0, check_openlog_message_large); -+ -+ check_syslog_udp (send_openlog_large, LOG_PID, check_openlog_message_large); -+ check_syslog_tcp (send_openlog_large, LOG_PID, check_openlog_message_large); -+ -+ check_syslog_console (send_openlog_large, check_syslog_console_read_large); -+ -+ check_syslog_perror (true); - - return 0; - } --- -2.37.2 - diff --git a/0017-elf-Call-__libc_early_init-for-reused-namespaces-bug.patch b/0017-elf-Call-__libc_early_init-for-reused-namespaces-bug.patch deleted file mode 100644 index 08ea489..0000000 --- a/0017-elf-Call-__libc_early_init-for-reused-namespaces-bug.patch +++ /dev/null @@ -1,252 +0,0 @@ -From 924e4f3eaa502ce82fccf8537f021a796d158771 Mon Sep 17 00:00:00 2001 -From: Florian Weimer -Date: Fri, 26 Aug 2022 21:15:43 +0200 -Subject: [PATCH 17/22] elf: Call __libc_early_init for reused namespaces (bug - 29528) - -libc_map is never reset to NULL, neither during dlclose nor on a -dlopen call which reuses the namespace structure. As a result, if a -namespace is reused, its libc is not initialized properly. The most -visible result is a crash in the functions. - -To prevent similar bugs on namespace reuse from surfacing, -unconditionally initialize the chosen namespace to zero using memset. - -(cherry picked from commit d0e357ff45a75553dee3b17ed7d303bfa544f6fe) ---- - NEWS | 1 + - elf/Makefile | 25 ++++++++++++++++++ - elf/dl-open.c | 13 ++++++---- - elf/tst-dlmopen-twice-mod1.c | 37 ++++++++++++++++++++++++++ - elf/tst-dlmopen-twice-mod2.c | 50 ++++++++++++++++++++++++++++++++++++ - elf/tst-dlmopen-twice.c | 34 ++++++++++++++++++++++++ - 6 files changed, 155 insertions(+), 5 deletions(-) - create mode 100644 elf/tst-dlmopen-twice-mod1.c - create mode 100644 elf/tst-dlmopen-twice-mod2.c - create mode 100644 elf/tst-dlmopen-twice.c - -diff --git a/NEWS b/NEWS -index ae30900bbc..6d31e5abba 100644 ---- a/NEWS -+++ b/NEWS -@@ -13,6 +13,7 @@ The following bugs are resolved with this release: - [29446] _dlopen now ignores dl_caller argument in static mode - [29485] Linux: Terminate subprocess on late failure in tst-pidfd - [29490] alpha: New __brk_call implementation is broken -+ [29528] elf: Call __libc_early_init for reused namespaces - - - Version 2.36 -diff --git a/elf/Makefile b/elf/Makefile -index fd77d0c7c8..43353a4b08 100644 ---- a/elf/Makefile -+++ b/elf/Makefile -@@ -408,6 +408,7 @@ tests += \ - tst-dlmopen4 \ - tst-dlmopen-dlerror \ - tst-dlmopen-gethostbyname \ -+ tst-dlmopen-twice \ - tst-dlopenfail \ - tst-dlopenfail-2 \ - tst-dlopenrpath \ -@@ -834,6 +835,8 @@ modules-names += \ - tst-dlmopen1mod \ - tst-dlmopen-dlerror-mod \ - tst-dlmopen-gethostbyname-mod \ -+ tst-dlmopen-twice-mod1 \ -+ tst-dlmopen-twice-mod2 \ - tst-dlopenfaillinkmod \ - tst-dlopenfailmod1 \ - tst-dlopenfailmod2 \ -@@ -2967,3 +2970,25 @@ $(objpfx)tst-tls-allocation-failure-static-patched.out: \ - grep -q '^Fatal glibc error: Cannot allocate TLS block$$' $@ \ - && grep -q '^status: 127$$' $@; \ - $(evaluate-test) -+ -+$(objpfx)tst-audit-tlsdesc: $(objpfx)tst-audit-tlsdesc-mod1.so \ -+ $(objpfx)tst-audit-tlsdesc-mod2.so \ -+ $(shared-thread-library) -+ifeq (yes,$(have-mtls-dialect-gnu2)) -+# The test is valid for all TLS types, but we want to exercise GNU2 -+# TLS if possible. -+CFLAGS-tst-audit-tlsdesc-mod1.c += -mtls-dialect=gnu2 -+CFLAGS-tst-audit-tlsdesc-mod2.c += -mtls-dialect=gnu2 -+endif -+$(objpfx)tst-audit-tlsdesc-dlopen: $(shared-thread-library) -+$(objpfx)tst-audit-tlsdesc-dlopen.out: $(objpfx)tst-audit-tlsdesc-mod1.so \ -+ $(objpfx)tst-audit-tlsdesc-mod2.so -+$(objpfx)tst-audit-tlsdesc-mod1.so: $(objpfx)tst-audit-tlsdesc-mod2.so -+$(objpfx)tst-audit-tlsdesc.out: $(objpfx)tst-auditmod-tlsdesc.so -+tst-audit-tlsdesc-ENV = LD_AUDIT=$(objpfx)tst-auditmod-tlsdesc.so -+$(objpfx)tst-audit-tlsdesc-dlopen.out: $(objpfx)tst-auditmod-tlsdesc.so -+tst-audit-tlsdesc-dlopen-ENV = LD_AUDIT=$(objpfx)tst-auditmod-tlsdesc.so -+ -+$(objpfx)tst-dlmopen-twice.out: \ -+ $(objpfx)tst-dlmopen-twice-mod1.so \ -+ $(objpfx)tst-dlmopen-twice-mod2.so -diff --git a/elf/dl-open.c b/elf/dl-open.c -index a23e65926b..46e8066fd8 100644 ---- a/elf/dl-open.c -+++ b/elf/dl-open.c -@@ -844,11 +844,14 @@ _dl_open (const char *file, int mode, const void *caller_dlopen, Lmid_t nsid, - _dl_signal_error (EINVAL, file, NULL, N_("\ - no more namespaces available for dlmopen()")); - } -- else if (nsid == GL(dl_nns)) -- { -- __rtld_lock_initialize (GL(dl_ns)[nsid]._ns_unique_sym_table.lock); -- ++GL(dl_nns); -- } -+ -+ if (nsid == GL(dl_nns)) -+ ++GL(dl_nns); -+ -+ /* Initialize the new namespace. Most members are -+ zero-initialized, only the lock needs special treatment. */ -+ memset (&GL(dl_ns)[nsid], 0, sizeof (GL(dl_ns)[nsid])); -+ __rtld_lock_initialize (GL(dl_ns)[nsid]._ns_unique_sym_table.lock); - - _dl_debug_update (nsid)->r_state = RT_CONSISTENT; - } -diff --git a/elf/tst-dlmopen-twice-mod1.c b/elf/tst-dlmopen-twice-mod1.c -new file mode 100644 -index 0000000000..0eaf04948c ---- /dev/null -+++ b/elf/tst-dlmopen-twice-mod1.c -@@ -0,0 +1,37 @@ -+/* Initialization of libc after dlmopen/dlclose/dlmopen (bug 29528). Module 1. -+ Copyright (C) 2022 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ 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 -+ . */ -+ -+#include -+ -+static void __attribute__ ((constructor)) -+init (void) -+{ -+ puts ("info: tst-dlmopen-twice-mod1.so loaded"); -+ fflush (stdout); -+} -+ -+static void __attribute__ ((destructor)) -+fini (void) -+{ -+ puts ("info: tst-dlmopen-twice-mod1.so about to be unloaded"); -+ fflush (stdout); -+} -+ -+/* Large allocation. The second module does not have this, so it -+ should load libc at a different address. */ -+char large_allocate[16 * 1024 * 1024]; -diff --git a/elf/tst-dlmopen-twice-mod2.c b/elf/tst-dlmopen-twice-mod2.c -new file mode 100644 -index 0000000000..40c6c01f96 ---- /dev/null -+++ b/elf/tst-dlmopen-twice-mod2.c -@@ -0,0 +1,50 @@ -+/* Initialization of libc after dlmopen/dlclose/dlmopen (bug 29528). Module 2. -+ Copyright (C) 2022 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ 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 -+ . */ -+ -+#include -+#include -+ -+static void __attribute__ ((constructor)) -+init (void) -+{ -+ puts ("info: tst-dlmopen-twice-mod2.so loaded"); -+ fflush (stdout); -+} -+ -+static void __attribute__ ((destructor)) -+fini (void) -+{ -+ puts ("info: tst-dlmopen-twice-mod2.so about to be unloaded"); -+ fflush (stdout); -+} -+ -+int -+run_check (void) -+{ -+ puts ("info: about to call isalpha"); -+ fflush (stdout); -+ -+ volatile char ch = 'a'; -+ if (!isalpha (ch)) -+ { -+ puts ("error: isalpha ('a') is not true"); -+ fflush (stdout); -+ return 1; -+ } -+ return 0; -+} -diff --git a/elf/tst-dlmopen-twice.c b/elf/tst-dlmopen-twice.c -new file mode 100644 -index 0000000000..449f3c8fa9 ---- /dev/null -+++ b/elf/tst-dlmopen-twice.c -@@ -0,0 +1,34 @@ -+/* Initialization of libc after dlmopen/dlclose/dlmopen (bug 29528). Main. -+ Copyright (C) 2022 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ 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 -+ . */ -+ -+#include -+#include -+ -+static int -+do_test (void) -+{ -+ void *handle = xdlmopen (LM_ID_NEWLM, "tst-dlmopen-twice-mod1.so", RTLD_NOW); -+ xdlclose (handle); -+ handle = xdlmopen (LM_ID_NEWLM, "tst-dlmopen-twice-mod2.so", RTLD_NOW); -+ int (*run_check) (void) = xdlsym (handle, "run_check"); -+ TEST_COMPARE (run_check (), 0); -+ xdlclose (handle); -+ return 0; -+} -+ -+#include --- -2.37.2 - diff --git a/0018-Apply-asm-redirections-in-wchar.h-before-first-use.patch b/0018-Apply-asm-redirections-in-wchar.h-before-first-use.patch deleted file mode 100644 index 09b5c1f..0000000 --- a/0018-Apply-asm-redirections-in-wchar.h-before-first-use.patch +++ /dev/null @@ -1,425 +0,0 @@ -From 3c791f2031ca8f6b99e96b774ed1c505ceb93595 Mon Sep 17 00:00:00 2001 -From: Raphael Moreira Zinsly -Date: Wed, 24 Aug 2022 11:43:37 -0300 -Subject: [PATCH 18/22] Apply asm redirections in wchar.h before first use - -Similar to d0fa09a770, but for wchar.h. Fixes [BZ #27087] by applying -all long double related asm redirections before using functions in -bits/wchar2.h. -Moves the function declarations from wcsmbs/bits/wchar2.h to a new file -wcsmbs/bits/wchar2-decl.h that will be included first in wcsmbs/wchar.h. - -Tested with build-many-glibcs.py. -Reviewed-by: Adhemerval Zanella - -(cherry picked from commit c7509d49c4e8fa494120c5ead21338559dad16f5) ---- - include/bits/wchar2-decl.h | 1 + - wcsmbs/Makefile | 5 +- - wcsmbs/bits/wchar2-decl.h | 124 +++++++++++++++++++++++++++++++++++++ - wcsmbs/bits/wchar2.h | 72 --------------------- - wcsmbs/wchar.h | 11 +++- - 5 files changed, 137 insertions(+), 76 deletions(-) - create mode 100644 include/bits/wchar2-decl.h - create mode 100644 wcsmbs/bits/wchar2-decl.h - -diff --git a/include/bits/wchar2-decl.h b/include/bits/wchar2-decl.h -new file mode 100644 -index 0000000000..00b1b93342 ---- /dev/null -+++ b/include/bits/wchar2-decl.h -@@ -0,0 +1 @@ -+#include -diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile -index 3d19d5556f..4af102a3f6 100644 ---- a/wcsmbs/Makefile -+++ b/wcsmbs/Makefile -@@ -22,8 +22,9 @@ subdir := wcsmbs - - include ../Makeconfig - --headers := wchar.h bits/wchar.h bits/wchar2.h bits/wchar-ldbl.h uchar.h \ -- bits/types/__mbstate_t.h bits/types/mbstate_t.h bits/types/wint_t.h -+headers := wchar.h bits/wchar.h bits/wchar2.h bits/wchar2-decl.h \ -+ bits/wchar-ldbl.h uchar.h bits/types/__mbstate_t.h \ -+ bits/types/mbstate_t.h bits/types/wint_t.h - - routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \ - wcsncmp wcsncpy wcspbrk wcsrchr wcsspn wcstok wcsstr wmemchr \ -diff --git a/wcsmbs/bits/wchar2-decl.h b/wcsmbs/bits/wchar2-decl.h -new file mode 100644 -index 0000000000..8e1735c33b ---- /dev/null -+++ b/wcsmbs/bits/wchar2-decl.h -@@ -0,0 +1,124 @@ -+/* Checking macros for wchar functions. Declarations only. -+ Copyright (C) 2004-2022 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ 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 -+ . */ -+ -+#ifndef _BITS_WCHAR2_DECL_H -+#define _BITS_WCHAR2_DECL_H 1 -+ -+#ifndef _WCHAR_H -+# error "Never include directly; use instead." -+#endif -+ -+ -+extern wchar_t *__wmemcpy_chk (wchar_t *__restrict __s1, -+ const wchar_t *__restrict __s2, size_t __n, -+ size_t __ns1) __THROW; -+extern wchar_t *__wmemmove_chk (wchar_t *__s1, const wchar_t *__s2, -+ size_t __n, size_t __ns1) __THROW; -+ -+ -+#ifdef __USE_GNU -+ -+extern wchar_t *__wmempcpy_chk (wchar_t *__restrict __s1, -+ const wchar_t *__restrict __s2, size_t __n, -+ size_t __ns1) __THROW; -+ -+#endif -+ -+ -+extern wchar_t *__wmemset_chk (wchar_t *__s, wchar_t __c, size_t __n, -+ size_t __ns) __THROW; -+extern wchar_t *__wcscpy_chk (wchar_t *__restrict __dest, -+ const wchar_t *__restrict __src, -+ size_t __n) __THROW; -+extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest, -+ const wchar_t *__restrict __src, -+ size_t __destlen) __THROW; -+extern wchar_t *__wcsncpy_chk (wchar_t *__restrict __dest, -+ const wchar_t *__restrict __src, size_t __n, -+ size_t __destlen) __THROW; -+extern wchar_t *__wcpncpy_chk (wchar_t *__restrict __dest, -+ const wchar_t *__restrict __src, size_t __n, -+ size_t __destlen) __THROW; -+extern wchar_t *__wcscat_chk (wchar_t *__restrict __dest, -+ const wchar_t *__restrict __src, -+ size_t __destlen) __THROW; -+extern wchar_t *__wcsncat_chk (wchar_t *__restrict __dest, -+ const wchar_t *__restrict __src, -+ size_t __n, size_t __destlen) __THROW; -+extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n, -+ int __flag, size_t __s_len, -+ const wchar_t *__restrict __format, ...) -+ __THROW /* __attribute__ ((__format__ (__wprintf__, 5, 6))) */; -+extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n, -+ int __flag, size_t __s_len, -+ const wchar_t *__restrict __format, -+ __gnuc_va_list __arg) -+ __THROW /* __attribute__ ((__format__ (__wprintf__, 5, 0))) */; -+ -+#if __USE_FORTIFY_LEVEL > 1 -+ -+extern int __fwprintf_chk (__FILE *__restrict __stream, int __flag, -+ const wchar_t *__restrict __format, ...); -+extern int __wprintf_chk (int __flag, const wchar_t *__restrict __format, -+ ...); -+extern int __vfwprintf_chk (__FILE *__restrict __stream, int __flag, -+ const wchar_t *__restrict __format, -+ __gnuc_va_list __ap); -+extern int __vwprintf_chk (int __flag, const wchar_t *__restrict __format, -+ __gnuc_va_list __ap); -+ -+#endif -+ -+extern wchar_t *__fgetws_chk (wchar_t *__restrict __s, size_t __size, int __n, -+ __FILE *__restrict __stream) __wur; -+ -+#ifdef __USE_GNU -+ -+extern wchar_t *__fgetws_unlocked_chk (wchar_t *__restrict __s, size_t __size, -+ int __n, __FILE *__restrict __stream) -+ __wur; -+ -+#endif -+ -+extern size_t __wcrtomb_chk (char *__restrict __s, wchar_t __wchar, -+ mbstate_t *__restrict __p, -+ size_t __buflen) __THROW __wur; -+extern size_t __mbsrtowcs_chk (wchar_t *__restrict __dst, -+ const char **__restrict __src, -+ size_t __len, mbstate_t *__restrict __ps, -+ size_t __dstlen) __THROW; -+extern size_t __wcsrtombs_chk (char *__restrict __dst, -+ const wchar_t **__restrict __src, -+ size_t __len, mbstate_t *__restrict __ps, -+ size_t __dstlen) __THROW; -+ -+#ifdef __USE_XOPEN2K8 -+ -+extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst, -+ const char **__restrict __src, size_t __nmc, -+ size_t __len, mbstate_t *__restrict __ps, -+ size_t __dstlen) __THROW; -+extern size_t __wcsnrtombs_chk (char *__restrict __dst, -+ const wchar_t **__restrict __src, -+ size_t __nwc, size_t __len, -+ mbstate_t *__restrict __ps, size_t __dstlen) -+ __THROW; -+ -+#endif -+ -+#endif /* bits/wchar2-decl.h. */ -diff --git a/wcsmbs/bits/wchar2.h b/wcsmbs/bits/wchar2.h -index 0e017f458b..3f110efe57 100644 ---- a/wcsmbs/bits/wchar2.h -+++ b/wcsmbs/bits/wchar2.h -@@ -21,9 +21,6 @@ - #endif - - --extern wchar_t *__wmemcpy_chk (wchar_t *__restrict __s1, -- const wchar_t *__restrict __s2, size_t __n, -- size_t __ns1) __THROW; - extern wchar_t *__REDIRECT_NTH (__wmemcpy_alias, - (wchar_t *__restrict __s1, - const wchar_t *__restrict __s2, size_t __n), -@@ -45,8 +42,6 @@ __NTH (wmemcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, - } - - --extern wchar_t *__wmemmove_chk (wchar_t *__s1, const wchar_t *__s2, -- size_t __n, size_t __ns1) __THROW; - extern wchar_t *__REDIRECT_NTH (__wmemmove_alias, (wchar_t *__s1, - const wchar_t *__s2, - size_t __n), wmemmove); -@@ -66,9 +61,6 @@ __NTH (wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n)) - - - #ifdef __USE_GNU --extern wchar_t *__wmempcpy_chk (wchar_t *__restrict __s1, -- const wchar_t *__restrict __s2, size_t __n, -- size_t __ns1) __THROW; - extern wchar_t *__REDIRECT_NTH (__wmempcpy_alias, - (wchar_t *__restrict __s1, - const wchar_t *__restrict __s2, -@@ -91,8 +83,6 @@ __NTH (wmempcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, - #endif - - --extern wchar_t *__wmemset_chk (wchar_t *__s, wchar_t __c, size_t __n, -- size_t __ns) __THROW; - extern wchar_t *__REDIRECT_NTH (__wmemset_alias, (wchar_t *__s, wchar_t __c, - size_t __n), wmemset); - extern wchar_t *__REDIRECT_NTH (__wmemset_chk_warn, -@@ -110,9 +100,6 @@ __NTH (wmemset (wchar_t *__s, wchar_t __c, size_t __n)) - } - - --extern wchar_t *__wcscpy_chk (wchar_t *__restrict __dest, -- const wchar_t *__restrict __src, -- size_t __n) __THROW; - extern wchar_t *__REDIRECT_NTH (__wcscpy_alias, - (wchar_t *__restrict __dest, - const wchar_t *__restrict __src), wcscpy); -@@ -127,9 +114,6 @@ __NTH (wcscpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src)) - } - - --extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest, -- const wchar_t *__restrict __src, -- size_t __destlen) __THROW; - extern wchar_t *__REDIRECT_NTH (__wcpcpy_alias, - (wchar_t *__restrict __dest, - const wchar_t *__restrict __src), wcpcpy); -@@ -144,9 +128,6 @@ __NTH (wcpcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src)) - } - - --extern wchar_t *__wcsncpy_chk (wchar_t *__restrict __dest, -- const wchar_t *__restrict __src, size_t __n, -- size_t __destlen) __THROW; - extern wchar_t *__REDIRECT_NTH (__wcsncpy_alias, - (wchar_t *__restrict __dest, - const wchar_t *__restrict __src, -@@ -168,9 +149,6 @@ __NTH (wcsncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, - } - - --extern wchar_t *__wcpncpy_chk (wchar_t *__restrict __dest, -- const wchar_t *__restrict __src, size_t __n, -- size_t __destlen) __THROW; - extern wchar_t *__REDIRECT_NTH (__wcpncpy_alias, - (wchar_t *__restrict __dest, - const wchar_t *__restrict __src, -@@ -192,9 +170,6 @@ __NTH (wcpncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, - } - - --extern wchar_t *__wcscat_chk (wchar_t *__restrict __dest, -- const wchar_t *__restrict __src, -- size_t __destlen) __THROW; - extern wchar_t *__REDIRECT_NTH (__wcscat_alias, - (wchar_t *__restrict __dest, - const wchar_t *__restrict __src), wcscat); -@@ -209,9 +184,6 @@ __NTH (wcscat (wchar_t *__restrict __dest, const wchar_t *__restrict __src)) - } - - --extern wchar_t *__wcsncat_chk (wchar_t *__restrict __dest, -- const wchar_t *__restrict __src, -- size_t __n, size_t __destlen) __THROW; - extern wchar_t *__REDIRECT_NTH (__wcsncat_alias, - (wchar_t *__restrict __dest, - const wchar_t *__restrict __src, -@@ -228,10 +200,6 @@ __NTH (wcsncat (wchar_t *__restrict __dest, const wchar_t *__restrict __src, - } - - --extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n, -- int __flag, size_t __s_len, -- const wchar_t *__restrict __format, ...) -- __THROW /* __attribute__ ((__format__ (__wprintf__, 5, 6))) */; - - extern int __REDIRECT_NTH_LDBL (__swprintf_alias, - (wchar_t *__restrict __s, size_t __n, -@@ -258,11 +226,6 @@ __NTH (swprintf (wchar_t *__restrict __s, size_t __n, - : swprintf (s, n, __VA_ARGS__)) - #endif - --extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n, -- int __flag, size_t __s_len, -- const wchar_t *__restrict __format, -- __gnuc_va_list __arg) -- __THROW /* __attribute__ ((__format__ (__wprintf__, 5, 0))) */; - - extern int __REDIRECT_NTH_LDBL (__vswprintf_alias, - (wchar_t *__restrict __s, size_t __n, -@@ -283,16 +246,6 @@ __NTH (vswprintf (wchar_t *__restrict __s, size_t __n, - - #if __USE_FORTIFY_LEVEL > 1 - --extern int __fwprintf_chk (__FILE *__restrict __stream, int __flag, -- const wchar_t *__restrict __format, ...); --extern int __wprintf_chk (int __flag, const wchar_t *__restrict __format, -- ...); --extern int __vfwprintf_chk (__FILE *__restrict __stream, int __flag, -- const wchar_t *__restrict __format, -- __gnuc_va_list __ap); --extern int __vwprintf_chk (int __flag, const wchar_t *__restrict __format, -- __gnuc_va_list __ap); -- - # ifdef __va_arg_pack - __fortify_function int - wprintf (const wchar_t *__restrict __fmt, ...) -@@ -328,8 +281,6 @@ vfwprintf (__FILE *__restrict __stream, - - #endif - --extern wchar_t *__fgetws_chk (wchar_t *__restrict __s, size_t __size, int __n, -- __FILE *__restrict __stream) __wur; - extern wchar_t *__REDIRECT (__fgetws_alias, - (wchar_t *__restrict __s, int __n, - __FILE *__restrict __stream), fgetws) __wur; -@@ -351,9 +302,6 @@ fgetws (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) - } - - #ifdef __USE_GNU --extern wchar_t *__fgetws_unlocked_chk (wchar_t *__restrict __s, size_t __size, -- int __n, __FILE *__restrict __stream) -- __wur; - extern wchar_t *__REDIRECT (__fgetws_unlocked_alias, - (wchar_t *__restrict __s, int __n, - __FILE *__restrict __stream), fgetws_unlocked) -@@ -379,9 +327,6 @@ fgetws_unlocked (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) - #endif - - --extern size_t __wcrtomb_chk (char *__restrict __s, wchar_t __wchar, -- mbstate_t *__restrict __p, -- size_t __buflen) __THROW __wur; - extern size_t __REDIRECT_NTH (__wcrtomb_alias, - (char *__restrict __s, wchar_t __wchar, - mbstate_t *__restrict __ps), wcrtomb) __wur; -@@ -404,10 +349,6 @@ __NTH (wcrtomb (char *__restrict __s, wchar_t __wchar, - } - - --extern size_t __mbsrtowcs_chk (wchar_t *__restrict __dst, -- const char **__restrict __src, -- size_t __len, mbstate_t *__restrict __ps, -- size_t __dstlen) __THROW; - extern size_t __REDIRECT_NTH (__mbsrtowcs_alias, - (wchar_t *__restrict __dst, - const char **__restrict __src, -@@ -431,10 +372,6 @@ __NTH (mbsrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, - } - - --extern size_t __wcsrtombs_chk (char *__restrict __dst, -- const wchar_t **__restrict __src, -- size_t __len, mbstate_t *__restrict __ps, -- size_t __dstlen) __THROW; - extern size_t __REDIRECT_NTH (__wcsrtombs_alias, - (char *__restrict __dst, - const wchar_t **__restrict __src, -@@ -458,10 +395,6 @@ __NTH (wcsrtombs (char *__restrict __dst, const wchar_t **__restrict __src, - - - #ifdef __USE_XOPEN2K8 --extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst, -- const char **__restrict __src, size_t __nmc, -- size_t __len, mbstate_t *__restrict __ps, -- size_t __dstlen) __THROW; - extern size_t __REDIRECT_NTH (__mbsnrtowcs_alias, - (wchar_t *__restrict __dst, - const char **__restrict __src, size_t __nmc, -@@ -485,11 +418,6 @@ __NTH (mbsnrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, - } - - --extern size_t __wcsnrtombs_chk (char *__restrict __dst, -- const wchar_t **__restrict __src, -- size_t __nwc, size_t __len, -- mbstate_t *__restrict __ps, size_t __dstlen) -- __THROW; - extern size_t __REDIRECT_NTH (__wcsnrtombs_alias, - (char *__restrict __dst, - const wchar_t **__restrict __src, -diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h -index 5d6a40853d..c1321c7518 100644 ---- a/wcsmbs/wchar.h -+++ b/wcsmbs/wchar.h -@@ -864,14 +864,21 @@ extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize, - - /* Define some macros helping to catch buffer overflows. */ - #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function --# include -+/* Declare all functions from bits/wchar2-decl.h first. */ -+# include - #endif - --#include -+/* The following headers provide asm redirections. These redirections must -+ appear before the first usage of these functions, e.g. in bits/wchar.h. */ - #if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 - # include - #endif - -+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function -+/* Now include the function definitions and redirects too. */ -+# include -+#endif -+ - __END_DECLS - - #endif /* wchar.h */ --- -2.37.2 - diff --git a/0019-elf-Restore-how-vDSO-dependency-is-printed-with-LD_T.patch b/0019-elf-Restore-how-vDSO-dependency-is-printed-with-LD_T.patch deleted file mode 100644 index 26ac3fc..0000000 --- a/0019-elf-Restore-how-vDSO-dependency-is-printed-with-LD_T.patch +++ /dev/null @@ -1,63 +0,0 @@ -From b3736d1a3c60a3ec9959bf3b38794958546bf6a2 Mon Sep 17 00:00:00 2001 -From: Adhemerval Zanella -Date: Tue, 30 Aug 2022 13:35:52 -0300 -Subject: [PATCH 19/22] elf: Restore how vDSO dependency is printed with - LD_TRACE_LOADED_OBJECTS (BZ #29539) - -The d7703d3176d225d5743b21811d888619eba39e82 changed how vDSO like -dependencies are printed, instead of just the name and address it -follows other libraries mode and prints 'name => path'. - -Unfortunately, this broke some ldd consumer that uses the output to -filter out the program's dependencies. For instance CMake -bundleutilities module [1], where GetPrequirite uses the regex to filter -out 'name => path' [2]. - -This patch restore the previous way to print just the name and the -mapping address. - -Checked on x86_64-linux-gnu. - -[1] https://github.com/Kitware/CMake/tree/master/Tests/BundleUtilities -[2] https://github.com/Kitware/CMake/blob/master/Modules/GetPrerequisites.cmake#L733 - -Reviewed-by: Florian Weimer -(cherry picked from commit 1e903124cec4492463d075c6c061a2a772db77bf) ---- - NEWS | 2 +- - elf/rtld.c | 6 ++++++ - 2 files changed, 7 insertions(+), 1 deletion(-) - -diff --git a/NEWS b/NEWS -index 6d31e5abba..757ded85e0 100644 ---- a/NEWS -+++ b/NEWS -@@ -14,7 +14,7 @@ The following bugs are resolved with this release: - [29485] Linux: Terminate subprocess on late failure in tst-pidfd - [29490] alpha: New __brk_call implementation is broken - [29528] elf: Call __libc_early_init for reused namespaces -- -+ [29539] libc: LD_TRACE_LOADED_OBJECTS changed how vDSO library are - - Version 2.36 - -diff --git a/elf/rtld.c b/elf/rtld.c -index cbbaf4a331..3e771a93d8 100644 ---- a/elf/rtld.c -+++ b/elf/rtld.c -@@ -2122,6 +2122,12 @@ dl_main (const ElfW(Phdr) *phdr, - if (l->l_faked) - /* The library was not found. */ - _dl_printf ("\t%s => not found\n", l->l_libname->name); -+ else if (strcmp (l->l_libname->name, l->l_name) == 0) -+ /* Print vDSO like libraries without duplicate name. Some -+ consumers depend of this format. */ -+ _dl_printf ("\t%s (0x%0*Zx)\n", l->l_libname->name, -+ (int) sizeof l->l_map_start * 2, -+ (size_t) l->l_map_start); - else - _dl_printf ("\t%s => %s (0x%0*Zx)\n", - DSO_FILENAME (l->l_libname->name), --- -2.37.2 - diff --git a/0020-syslog-Remove-extra-whitespace-between-timestamp-and.patch b/0020-syslog-Remove-extra-whitespace-between-timestamp-and.patch deleted file mode 100644 index 3410752..0000000 --- a/0020-syslog-Remove-extra-whitespace-between-timestamp-and.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 645d94808aaa90fb1b20a25ff70bb50d9eb1d55b Mon Sep 17 00:00:00 2001 -From: Adhemerval Zanella -Date: Mon, 5 Sep 2022 09:34:39 -0300 -Subject: [PATCH 20/22] syslog: Remove extra whitespace between timestamp and - message (BZ#29544) - -The rfc3164 clear states that a single space character must follow -the timestamp field. - -Checked on x86_64-linux-gnu. ---- - misc/syslog.c | 2 +- - misc/tst-syslog.c | 9 ++++++--- - 2 files changed, 7 insertions(+), 4 deletions(-) - -diff --git a/misc/syslog.c b/misc/syslog.c -index b88f66c835..f67d4b58a4 100644 ---- a/misc/syslog.c -+++ b/misc/syslog.c -@@ -167,7 +167,7 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap, - _nl_C_locobj_ptr); - - #define SYSLOG_HEADER(__pri, __timestamp, __msgoff, pid) \ -- "<%d>%s %n%s%s%.0d%s: ", \ -+ "<%d>%s%n%s%s%.0d%s: ", \ - __pri, __timestamp, __msgoff, \ - LogTag == NULL ? __progname : LogTag, \ - "[" + (pid == 0), pid, "]" + (pid == 0) -diff --git a/misc/tst-syslog.c b/misc/tst-syslog.c -index 1d332ece53..3560b518a2 100644 ---- a/misc/tst-syslog.c -+++ b/misc/tst-syslog.c -@@ -275,16 +275,19 @@ parse_syslog_msg (const char *msg) - { - struct msg_t r = { .pid = -1 }; - int number; -+ int wsb, wsa; - - #define STRINPUT(size) XSTRINPUT(size) - #define XSTRINPUT(size) "%" # size "s" - - /* The message in the form: -- <179>Apr 8 14:51:19 tst-syslog: message 176 3 */ -- int n = sscanf (msg, "<%3d>%*s %*d %*d:%*d:%*d " STRINPUT(IDENT_LENGTH) -+ <179>Apr 8 14:51:19 tst-syslog: message 176 3 */ -+ int n = sscanf (msg, "<%3d>%*s %*d %*d:%*d:%*d%n %n" STRINPUT(IDENT_LENGTH) - " " STRINPUT(MSG_LENGTH) " %*d %*d", -- &number, r.ident, r.msg); -+ &number, &wsb, &wsa, r.ident, r.msg); - TEST_COMPARE (n, 3); -+ /* It should only one space between timestamp and message. */ -+ TEST_COMPARE (wsa - wsb, 1); - - r.facility = number & LOG_FACMASK; - r.priority = number & LOG_PRIMASK; --- -2.37.2 - diff --git a/0021-Add-NEWS-entry-for-CVE-2022-39046.patch b/0021-Add-NEWS-entry-for-CVE-2022-39046.patch deleted file mode 100644 index 0b81e31..0000000 --- a/0021-Add-NEWS-entry-for-CVE-2022-39046.patch +++ /dev/null @@ -1,31 +0,0 @@ -From b46412fb17e8bfc6c9e1f144bbcf833320c80f8a Mon Sep 17 00:00:00 2001 -From: Siddhesh Poyarekar -Date: Tue, 6 Sep 2022 09:31:50 -0400 -Subject: [PATCH 21/22] Add NEWS entry for CVE-2022-39046 - -(cherry picked from commit 76fe56020e7ef354685b2284580ac1630c078a2b) ---- - NEWS | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/NEWS b/NEWS -index 757ded85e0..10a7613f09 100644 ---- a/NEWS -+++ b/NEWS -@@ -7,6 +7,13 @@ using `glibc' in the "product" field. - - Version 2.36.1 - -+Security related changes: -+ -+ CVE-2022-39046: When the syslog function is passed a crafted input -+ string larger than 1024 bytes, it reads uninitialized memory from the -+ heap and prints it to the target log file, potentially revealing a -+ portion of the contents of the heap. -+ - The following bugs are resolved with this release: - - [28846] CMSG_NXTHDR may trigger -Wstrict-overflow warning --- -2.37.2 - diff --git a/0022-nscd-Fix-netlink-cache-invalidation-if-epoll-is-used.patch b/0022-nscd-Fix-netlink-cache-invalidation-if-epoll-is-used.patch deleted file mode 100644 index dbff24b..0000000 --- a/0022-nscd-Fix-netlink-cache-invalidation-if-epoll-is-used.patch +++ /dev/null @@ -1,59 +0,0 @@ -From c399271c10bd00714504e8d4dfbec8aebf996dd4 Mon Sep 17 00:00:00 2001 -From: Fabian Vogt -Date: Wed, 27 Jul 2022 11:44:07 +0200 -Subject: [PATCH 22/22] nscd: Fix netlink cache invalidation if epoll is used - [BZ #29415] - -Processes cache network interface information such as whether IPv4 or IPv6 -are enabled. This is only checked again if the "netlink timestamp" provided -by nscd changed, which is triggered by netlink socket activity. - -However, in the epoll handler for the netlink socket, it was missed to -assign the new timestamp to the nscd database. The handler for plain poll -did that properly, copy that over. - -This bug caused that e.g. processes which started before network -configuration got unusuable addresses from getaddrinfo, like IPv6 only even -though only IPv4 is available: -https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1041 - -It's a bit hard to reproduce, so I verified this by checking the timestamp -on calls to __check_pf manually. Without this patch it's stuck at 1, now -it's increasing on network changes as expected. - -Signed-off-by: Fabian Vogt -(cherry picked from commit 02ca25fef2785974011e9c5beecc99b900b69fd7) ---- - NEWS | 1 + - nscd/connections.c | 3 ++- - 2 files changed, 3 insertions(+), 1 deletion(-) - -diff --git a/NEWS b/NEWS -index 10a7613f09..9360596fcc 100644 ---- a/NEWS -+++ b/NEWS -@@ -17,6 +17,7 @@ Security related changes: - The following bugs are resolved with this release: - - [28846] CMSG_NXTHDR may trigger -Wstrict-overflow warning -+ [29415] nscd: Fix netlink cache invalidation if epoll is used - [29446] _dlopen now ignores dl_caller argument in static mode - [29485] Linux: Terminate subprocess on late failure in tst-pidfd - [29490] alpha: New __brk_call implementation is broken -diff --git a/nscd/connections.c b/nscd/connections.c -index 61d1674eb4..531d2e83df 100644 ---- a/nscd/connections.c -+++ b/nscd/connections.c -@@ -2284,7 +2284,8 @@ main_loop_epoll (int efd) - sizeof (buf))) != -1) - ; - -- __bump_nl_timestamp (); -+ dbs[hstdb].head->extra_data[NSCD_HST_IDX_CONF_TIMESTAMP] -+ = __bump_nl_timestamp (); - } - # endif - else --- -2.37.2 - diff --git a/2efa9591e5e8a129e7b73ad0dad3eecbd69482ff.patch b/2efa9591e5e8a129e7b73ad0dad3eecbd69482ff.patch deleted file mode 100644 index 645113e..0000000 --- a/2efa9591e5e8a129e7b73ad0dad3eecbd69482ff.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 2efa9591e5e8a129e7b73ad0dad3eecbd69482ff Mon Sep 17 00:00:00 2001 -From: "Pierre-Loup A. Griffais" -Date: Tue, 30 Jul 2019 16:44:27 -0700 -Subject: [PATCH] HACK: test app for pthread_mutex_lock_any(); should be - tst-mutex* something. - ---- - multimutextestapp/testapp.c | 78 +++++++++++++++++++++++++++++++++++++ - 1 file changed, 78 insertions(+) - create mode 100644 multimutextestapp/testapp.c - -diff --git a/multimutextestapp/testapp.c b/multimutextestapp/testapp.c -new file mode 100644 -index 0000000000..eecf842dbc ---- /dev/null -+++ b/multimutextestapp/testapp.c -@@ -0,0 +1,78 @@ -+#include -+#include -+#include -+#include -+#include -+ -+ -+static pthread_mutex_t m[3]; -+ -+ -+static void * -+tf (void *arg) -+{ -+ int out; -+ int ret = pthread_mutex_lock_any( m, 3, &out ); -+ -+ printf("new thread ret %i out %i!\n", ret, out ); -+ -+ sleep(5); -+ printf("new thread done sleeping!\n"); -+ -+ pthread_mutex_unlock( &m[out] ); -+ -+ return NULL; -+} -+ -+ -+int main(int ac, char**av) -+{ -+ pthread_mutex_init (&m[0], NULL); -+ pthread_mutex_init (&m[1], NULL); -+ pthread_mutex_init (&m[2], NULL); -+ -+ int out; -+ -+ int ret = pthread_mutex_lock_any( m, 3, &out ); -+ -+ printf("main thread ret %i out %i!\n", ret, out ); -+ -+ -+ pthread_t th; -+ if (pthread_create (&th, NULL, tf, NULL) != 0) -+ { -+ puts ("create failed"); -+ return 1; -+ } -+ -+ sleep(1); -+ -+ ret = pthread_mutex_lock_any( m, 3, &out ); -+ -+ printf("main thread ret %i out %i!\n", ret, out ); -+ -+ sleep(1); -+ -+ struct timespec timeoutTime; -+ clock_gettime(CLOCK_REALTIME, &timeoutTime); -+ timeoutTime.tv_sec += 1; -+ -+ ret = pthread_mutex_timedlock_any( m, 3, &timeoutTime, &out ); -+ -+ printf("main thread ret %i out %i!\n", ret, out ); -+ -+ clock_gettime(CLOCK_REALTIME, &timeoutTime); -+ timeoutTime.tv_sec += 3; -+ -+ ret = pthread_mutex_timedlock_any( m, 3, &timeoutTime, &out ); -+ -+ printf("main thread ret %i out %i!\n", ret, out ); -+ -+ pthread_mutex_unlock( &m[out] ); -+ pthread_mutex_unlock( &m[0] ); -+ pthread_mutex_unlock( &m[2] ); -+ -+ printf("DONE unlock!\n"); -+ -+ return 0; -+} diff --git a/4483f2500825a84382c2a6a9ac60fc77954533d7.patch b/4483f2500825a84382c2a6a9ac60fc77954533d7.patch deleted file mode 100644 index a3d30b0..0000000 --- a/4483f2500825a84382c2a6a9ac60fc77954533d7.patch +++ /dev/null @@ -1,297 +0,0 @@ -diff -up glibc-2.35/nptl/pthread_mutex_lock_any.c.46~ glibc-2.35/nptl/pthread_mutex_lock_any.c ---- glibc-2.35/nptl/pthread_mutex_lock_any.c.46~ 2022-02-03 11:21:15.315282335 +0100 -+++ glibc-2.35/nptl/pthread_mutex_lock_any.c 2022-02-03 11:21:15.315282335 +0100 -@@ -0,0 +1,37 @@ -+/* Copyright (C) 2002-2019 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Contributed by Ulrich Drepper , 2002. -+ -+ 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 -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include "pthreadP.h" -+#include -+#include -+#include -+ -+int -+__pthread_mutex_lock_any (pthread_mutex_t *mutexlist, int mutexcount, -+ int *outlocked) -+{ -+ return __pthread_mutex_timedlock_any(mutexlist, mutexcount, NULL, outlocked); -+} -+ -+weak_alias (__pthread_mutex_lock_any, pthread_mutex_lock_any) -diff -up glibc-2.35/nptl/pthread_mutex_timedlock_any.c.46~ glibc-2.35/nptl/pthread_mutex_timedlock_any.c ---- glibc-2.35/nptl/pthread_mutex_timedlock_any.c.46~ 2022-02-03 11:21:15.316282339 +0100 -+++ glibc-2.35/nptl/pthread_mutex_timedlock_any.c 2022-02-03 11:21:15.316282339 +0100 -@@ -0,0 +1,193 @@ -+/* Copyright (C) 2002-2019 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Contributed by Ulrich Drepper , 2002. -+ -+ 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 -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include "pthreadP.h" -+#include -+#include -+#include -+ -+/* TODO: this probably comes from a kernel header when upstream? */ -+struct futex_wait_block { -+ int *uaddr; -+ int val; -+ int bitset; -+} __attribute__((packed)); -+ -+int -+__pthread_mutex_timedlock_any (pthread_mutex_t *mutexlist, int mutexcount, -+ const struct timespec *abstime, int *outlocked) -+{ -+ /* This requires futex support */ -+#ifndef __NR_futex -+ return ENOTSUP; -+#endif -+ -+ if (mutexlist == NULL) -+ { -+ /* User is asking us if kernel supports the feature. */ -+ -+ /* TODO: how does one check if supported? -+ * I was thinking of trying the ioctl once and then returning the static -+ * cached value, is that OK? -+ */ -+ return 0; -+ } -+ -+ if (mutexlist != NULL && mutexcount <= 0) -+ return EINVAL; -+ -+ if (outlocked == NULL) -+ return EINVAL; -+ -+ int type = PTHREAD_MUTEX_TYPE (mutexlist); -+ -+ for (int i = 1; i < mutexcount; i++) -+ { -+ /* Types have to match, since the PRIVATE flag is OP-global. */ -+ if (PTHREAD_MUTEX_TYPE (&mutexlist[i]) != type) -+ return EINVAL; -+ } -+ -+ int kind = type & PTHREAD_MUTEX_KIND_MASK_NP; -+ -+ /* TODO: implement recursive, errorcheck and adaptive. */ -+ if (kind != PTHREAD_MUTEX_NORMAL) -+ return EINVAL; -+ -+ /* TODO: implement robust. */ -+ if (type & PTHREAD_MUTEX_ROBUST_NORMAL_NP) -+ return EINVAL; -+ -+ /* TODO: implement PI. */ -+ if (type & PTHREAD_MUTEX_PRIO_INHERIT_NP) -+ return EINVAL; -+ -+ /* TODO: implement PP. */ -+ if (type & PTHREAD_MUTEX_PRIO_PROTECT_NP) -+ return EINVAL; -+ -+ pid_t id = THREAD_GETMEM (THREAD_SELF, tid); -+ int result; -+ -+ result = -1; -+ -+ for (int i = 0; i < mutexcount; i++) -+ { -+ if (__lll_trylock (&mutexlist[i].__data.__lock) == 0) -+ { -+ result = i; -+ break; -+ } -+ } -+ -+ while (result == -1) -+ { -+ for (int i = 0; i < mutexcount; i++) -+ { -+ int oldval = atomic_exchange_acq (&mutexlist[i].__data.__lock, 2); -+ -+ if (oldval == 0) -+ { -+ result = i; -+ break; -+ } -+ } -+ -+ if (result == -1) -+ { -+ /* Couldn't get one of the locks immediately, we have to sleep now. */ -+ struct timespec *timeout = NULL; -+ struct timespec rt; -+ -+ if (abstime != NULL) -+ { -+ /* Reject invalid timeouts. */ -+ if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) -+ return EINVAL; -+ -+ struct timeval tv; -+ -+ /* Get the current time. */ -+ (void) __gettimeofday (&tv, NULL); -+ -+ /* Compute relative timeout. */ -+ rt.tv_sec = abstime->tv_sec - tv.tv_sec; -+ rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000; -+ if (rt.tv_nsec < 0) -+ { -+ rt.tv_nsec += 1000000000; -+ --rt.tv_sec; -+ } -+ -+ if (rt.tv_sec < 0) -+ return ETIMEDOUT; -+ -+ timeout = &rt; -+ } -+ -+ struct futex_wait_block waitblock[mutexcount]; -+ -+ for (int i = 0; i < mutexcount; i++) -+ { -+ waitblock[i].uaddr = &mutexlist[i].__data.__lock; -+ waitblock[i].val = 2; -+ waitblock[i].bitset = ~0; -+ } -+ -+ long int __ret; -+ -+ /* Safe to use the flag for the first one, since all their types match. */ -+ int private_flag = PTHREAD_MUTEX_PSHARED (&mutexlist[0]); -+ -+ __ret = lll_futex_timed_wait_multiple (waitblock, mutexcount, timeout, -+ private_flag); -+ -+ if (__ret < 0) -+ return -__ret; /* TODO is this correct? */ -+ -+ /* Have slept, try grabbing the one that woke us up? */ -+ if (atomic_exchange_acq (&mutexlist[__ret].__data.__lock, 2) == 0) -+ { -+ /* We got it, done, loop will end below. */ -+ result = __ret; -+ } -+ } -+ } -+ -+ if (result != -1) -+ { -+ /* Record the ownership. */ -+ mutexlist[result].__data.__owner = id; -+ ++mutexlist[result].__data.__nusers; -+ -+ /* Let the user know which mutex is now locked. */ -+ *outlocked = result; -+ -+ result = 0; -+ } -+ -+ return result; -+} -+ -+weak_alias (__pthread_mutex_timedlock_any, pthread_mutex_timedlock_any) -diff -up glibc-2.35/sysdeps/nptl/lowlevellock-futex.h.46~ glibc-2.35/sysdeps/nptl/lowlevellock-futex.h ---- glibc-2.35/sysdeps/nptl/lowlevellock-futex.h.46~ 2022-02-03 06:27:54.000000000 +0100 -+++ glibc-2.35/sysdeps/nptl/lowlevellock-futex.h 2022-02-03 11:25:49.314310869 +0100 -@@ -39,6 +39,7 @@ - #define FUTEX_WAIT_REQUEUE_PI 11 - #define FUTEX_CMP_REQUEUE_PI 12 - #define FUTEX_LOCK_PI2 13 -+#define FUTEX_WAIT_MULTIPLE 14 - #define FUTEX_PRIVATE_FLAG 128 - #define FUTEX_CLOCK_REALTIME 256 - -@@ -62,6 +63,14 @@ - ? -INTERNAL_SYSCALL_ERRNO (__ret) : 0); \ - }) - -+# define lll_futex_syscall_ret(nargs, futexp, op, ...) \ -+ ({ \ -+ long int __ret = INTERNAL_SYSCALL (futex, nargs, futexp, op, \ -+ __VA_ARGS__); \ -+ (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (__ret)) \ -+ ? -INTERNAL_SYSCALL_ERRNO (__ret) : __ret); \ -+ }) -+ - /* For most of these macros, the return value is never really used. - Nevertheless, the protocol is that each one returns a negated errno - code for failure or zero for success. (Note that the corresponding -@@ -78,6 +87,11 @@ - __lll_private_flag (FUTEX_WAIT, private), \ - val, timeout) - -+# define lll_futex_timed_wait_multiple(futexp, val, timeout, private) \ -+ lll_futex_syscall_ret (4, futexp, \ -+ __lll_private_flag (FUTEX_WAIT_MULTIPLE, private), \ -+ val, timeout) -+ - /* Verify whether the supplied clockid is supported by - lll_futex_clock_wait_bitset. */ - # define lll_futex_supported_clockid(clockid) \ -diff -up glibc-2.35/sysdeps/nptl/pthread.h.46~ glibc-2.35/sysdeps/nptl/pthread.h ---- glibc-2.35/sysdeps/nptl/pthread.h.46~ 2022-02-03 06:27:54.000000000 +0100 -+++ glibc-2.35/sysdeps/nptl/pthread.h 2022-02-03 11:21:15.316282339 +0100 -@@ -794,7 +794,17 @@ extern int pthread_mutex_trylock (pthrea - extern int pthread_mutex_lock (pthread_mutex_t *__mutex) - __THROWNL __nonnull ((1)); - -+/* Lock any one of several mutexes. */ -+extern int pthread_mutex_lock_any (pthread_mutex_t *__mutexlist, -+ int mutexcount, int *outlocked); -+ -+ - #ifdef __USE_XOPEN2K -+/* Lock any one of several mutexes, with timeout. */ -+extern int pthread_mutex_timedlock_any (pthread_mutex_t *__mutexlist, -+ int mutexcount, -+ const struct timespec *__restrict -+ __abstime, int *outlocked); - /* Wait until lock becomes available, or specified time passes. */ - # ifndef __USE_TIME_BITS64 - extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex, diff --git a/alternate_trim.patch b/alternate_trim.patch deleted file mode 100644 index d3bae7a..0000000 --- a/alternate_trim.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff --git a/malloc/malloc.c b/malloc/malloc.c -index f8e7250..de6d7fa 100644 ---- a/malloc/malloc.c -+++ b/malloc/malloc.c -@@ -4146,6 +4146,7 @@ _int_free (mstate av, mchunkptr p, int have_lock) - mchunkptr bck; /* misc temp for linking */ - mchunkptr fwd; /* misc temp for linking */ - -+ static int alternate; - size = chunksize (p); - - /* Little security check which won't hurt performance: the -@@ -4364,8 +4365,14 @@ _int_free (mstate av, mchunkptr p, int have_lock) - if (av == &main_arena) { - #ifndef MORECORE_CANNOT_TRIM - if ((unsigned long)(chunksize(av->top)) >= -- (unsigned long)(mp_.trim_threshold)) -- systrim(mp_.top_pad, av); -+ (unsigned long)(mp_.trim_threshold)) { -+ if (alternate) { -+ systrim(mp_.top_pad, av); -+ alternate = 0; -+ } else { -+ alternate = 1; -+ } -+ } - #endif - } else { - /* Always try heap_trim(), even if the top chunk is not diff --git a/eglibc-mandriva-nsswitch.conf.patch b/eglibc-mandriva-nsswitch.conf.patch deleted file mode 100644 index 24489c6..0000000 --- a/eglibc-mandriva-nsswitch.conf.patch +++ /dev/null @@ -1,65 +0,0 @@ ---- glibc-2.3.6/mandriva/nsswitch.conf.nsswitch.conf 2006-03-20 10:39:14.000000000 +0100 -+++ glibc-2.3.6/mandriva/nsswitch.conf 2006-03-20 10:38:42.000000000 +0100 -@@ -0,0 +1,47 @@ -+# -+# /etc/nsswitch.conf -+# -+# An example Name Service Switch config file. This file should be -+# sorted with the most-used services at the beginning. -+# -+# The entry '[NOTFOUND=return]' means that the search for an -+# entry should stop if the search in the previous entry turned -+# up nothing. Note that if the search failed due to some other reason -+# (like no NIS server responding) then the search continues with the -+# next entry. -+# -+# Legal entries are: -+# -+# compat Use compatibility setup for NIS -+# db Use the local database (.db) files -+# dns Use DNS (Domain Name Service) -+# files Use the local files -+# hesiod Use Hesiod for user lookups -+# ldap Use LDAP for user lookups -+# mdns Use Multicast DNS (aka Zeroconf/Rendezvous) for host lookups -+# mdns_minimal Like mdns, but only resolve *.local -+# mdns4 Like mdns, but only for IPv4 -+# mdns6 Like mdns, but only for IPv6 -+# mdns4_minimal Like mdns4, but only resolve *.local -+# mdns6_minimal Like mdns6, but only resolve *.local -+# myhostname Resolves local name -+# nis or yp Use NIS (NIS version 2), also called YP -+# nisplus or nis+ Use NIS+ (NIS version 3) -+# pgsql Use NetBIOS for host lookups -+# sss Use SSSD (System Security Services Daemon) -+# tcb Use TCB for host lookups -+# tinycdb Use a constant database for user lookups -+# wins Use NetBIOS for host lookups -+# winbind Uses a Windows or Samba domain controller for host lookups -+# [NOTFOUND=return] Stop searching if not found so far -+# -+# For more information, please read the nsswitch.conf.5 manual page. -+# -+ -+# passwd: files nis -+# shadow: files nis -+# group: files nis -+ -+passwd: files compat winbind mymachines systemd -+shadow: files nis -+group: files compat winbind mymachines systemd -+ -+hosts: files mymachines resolve [!UNAVAIL=return] dns myhostname nis wins mdns4_minimal -+networks: files -+ -+services: files -+protocols: files -+rpc: files -+ethers: files -+netmasks: files -+netgroup: files -+publickey: files -+ -+bootparams: files -+automount: files nis -+aliases: files diff --git a/eglibc-mandriva-testsuite-ldbl-bits.patch b/eglibc-mandriva-testsuite-ldbl-bits.patch deleted file mode 100644 index e3bbf02..0000000 --- a/eglibc-mandriva-testsuite-ldbl-bits.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- glibc-2.27/stdlib/Makefile.0118~ 2018-02-02 20:31:07.402589690 +0100 -+++ glibc-2.27/stdlib/Makefile 2018-02-02 20:31:53.077710331 +0100 -@@ -190,9 +190,16 @@ test-canon-ARGS = --test-dir=${common-ob - - bug-fmtmsg1-ENV = SEV_LEVEL=foo,11,newsev - -+isomac-includes = -I../include $(+sysdep-includes) $(sysincludes) -I.. -+ifeq (powerpc:8, $(base-machine):$(sizeof-long-double)) -+# XXX only necessary for bootstrapping... -+isomac-includes += -I../libio -I../stdlib -I../wcsmbs -+endif -+ - $(objpfx)isomac.out: $(objpfx)isomac - $(dir $<)$(notdir $<) '$(CC)' \ - '-I../include $(+sysdep-includes) $(sysincludes) -I..' > $@; \ -+ '$(isomac-includes)' > $<.out \ - $(evaluate-test) - - isomac-CFLAGS = -O diff --git a/eglibc-mandriva-testsuite-rt-notparallel.patch b/eglibc-mandriva-testsuite-rt-notparallel.patch deleted file mode 100644 index f0a682b..0000000 --- a/eglibc-mandriva-testsuite-rt-notparallel.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff -up glibc-2.34/rt/Makefile.39~ glibc-2.34/rt/Makefile ---- glibc-2.34/rt/Makefile.39~ 2021-08-02 10:35:18.780415863 +0200 -+++ glibc-2.34/rt/Makefile 2021-08-02 10:35:56.864655876 +0200 -@@ -114,3 +114,13 @@ endif - endif # !$(pthread-in-libc) - - tst-mqueue7-ARGS = -- $(host-test-program-cmd) -+ -+# XXX avoid timing issues on fine-grained SMT systems -+ifeq (powerpc, $(base-machine)) -+no-parallel-testing = yes -+endif -+ifneq ($(filter %tests,$(MAKECMDGOALS)),) -+ifeq ($(no-parallel-testing),yes) -+.NOTPARALLEL: -+endif -+endif diff --git a/eglibc-mandriva-xterm-xvt.patch b/eglibc-mandriva-xterm-xvt.patch deleted file mode 100644 index 87758a7..0000000 --- a/eglibc-mandriva-xterm-xvt.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- glibc-2.2.4/debug/xtrace.sh.chmou Mon Jul 9 20:56:57 2001 -+++ glibc-2.2.4/debug/xtrace.sh Mon Nov 12 14:16:51 2001 -@@ -78,8 +78,8 @@ - # If the variable COLUMNS is not set do this now. - COLUMNS=${COLUMNS:-80} - --# If `TERMINAL_PROG' is not set, set it to `xterm'. --TERMINAL_PROG=${TERMINAL_PROG:-xterm} -+# If `TERMINAL_PROG' is not set, set it to `xvt'. -+TERMINAL_PROG=${TERMINAL_PROG:-xvt} - - # The data file to process, if any. - data= diff --git a/glibc-2.19-no-__builtin_va_arg_pack-with-clang.patch b/glibc-2.19-no-__builtin_va_arg_pack-with-clang.patch deleted file mode 100644 index 2b3623b..0000000 --- a/glibc-2.19-no-__builtin_va_arg_pack-with-clang.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- glibc-2.19/misc/sys/cdefs.h.omv~ 2014-06-22 14:53:05.862531155 +0200 -+++ glibc-2.19/misc/sys/cdefs.h 2014-06-22 14:53:21.560531205 +0200 -@@ -328,7 +328,7 @@ - - /* GCC 4.3 and above allow passing all anonymous arguments of an - __extern_always_inline function to some other vararg function. */ --#if __GNUC_PREREQ (4,3) -+#if __GNUC_PREREQ (4,3) && !defined(__clang__) - # define __va_arg_pack() __builtin_va_arg_pack () - # define __va_arg_pack_len() __builtin_va_arg_pack_len () - #endif diff --git a/glibc-2.29-SIG_BLOCK.patch b/glibc-2.29-SIG_BLOCK.patch deleted file mode 100644 index ce10192..0000000 --- a/glibc-2.29-SIG_BLOCK.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up glibc-2.29/sysdeps/unix/sysv/linux/x86_64/getcontext.S.omv~ glibc-2.29/sysdeps/unix/sysv/linux/x86_64/getcontext.S ---- glibc-2.29/sysdeps/unix/sysv/linux/x86_64/getcontext.S.omv~ 2019-02-01 12:59:33.458555834 +0100 -+++ glibc-2.29/sysdeps/unix/sysv/linux/x86_64/getcontext.S 2019-02-01 13:01:58.194856450 +0100 -@@ -19,6 +19,8 @@ - - #include - #include -+#define __ASSEMBLY__ 1 -+#include /* for SIG_BLOCK */ - - #include "ucontext_i.h" - diff --git a/glibc-2.29-aarch64-buildfix.patch b/glibc-2.29-aarch64-buildfix.patch deleted file mode 100644 index 359aadd..0000000 --- a/glibc-2.29-aarch64-buildfix.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff -up glibc-2.29/locale/weight.h.omv~ glibc-2.29/locale/weight.h -diff -up glibc-2.29/string/strcoll_l.c.omv~ glibc-2.29/string/strcoll_l.c ---- glibc-2.29/string/strcoll_l.c.omv~ 2019-02-01 01:52:36.824032337 +0100 -+++ glibc-2.29/string/strcoll_l.c 2019-02-01 01:56:42.412484448 +0100 -@@ -40,7 +40,11 @@ - #define CONCAT1(a,b) a##b - - #include "../locale/localeinfo.h" -+/* See Line 178+ */ -+DIAG_PUSH_NEEDS_COMMENT; -+DIAG_IGNORE_Os_NEEDS_COMMENT (8, "-Wmaybe-uninitialized"); - #include WEIGHT_H -+DIAG_POP_NEEDS_COMMENT; - - /* Track status while looking for sequences in a string. */ - typedef struct -@@ -292,7 +296,7 @@ STRCOLL (const STRING_TYPE *s1, const ST - - int result = 0, rule = 0; - -- /* With GCC 7 when compiling with -Os the compiler warns that -+ /* With GCC 7 and 8 when compiling with -Os the compiler warns that - seq1.back_us and seq2.back_us might be used uninitialized. - Sometimes this warning appears at locations in locale/weightwc.h - where the actual use is, but on architectures other than x86_64, -@@ -300,7 +304,7 @@ STRCOLL (const STRING_TYPE *s1, const ST - seq2. This uninitialized use is impossible for the same reason - as described in comments in locale/weightwc.h. */ - DIAG_PUSH_NEEDS_COMMENT; -- DIAG_IGNORE_Os_NEEDS_COMMENT (7, "-Wmaybe-uninitialized"); -+ DIAG_IGNORE_Os_NEEDS_COMMENT (8, "-Wmaybe-uninitialized"); - coll_seq seq1, seq2; - DIAG_POP_NEEDS_COMMENT; - seq1.len = 0; diff --git a/glibc-2.31.9000-aarch64-compile.patch b/glibc-2.31.9000-aarch64-compile.patch deleted file mode 100644 index de9471e..0000000 --- a/glibc-2.31.9000-aarch64-compile.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -up glibc-2.31.20200621/iconv/Makefile.omv~ glibc-2.31.20200621/iconv/Makefile ---- glibc-2.31.20200621/iconv/Makefile.omv~ 2020-06-27 03:39:53.689509570 +0200 -+++ glibc-2.31.20200621/iconv/Makefile 2020-06-27 03:41:42.958406000 +0200 -@@ -53,6 +53,7 @@ install-sbin = iconvconfig - CFLAGS-gconv_cache.c += -DGCONV_DIR='"$(gconvdir)"' - CFLAGS-gconv_conf.c += -DGCONV_PATH='"$(gconvdir)"' - CFLAGS-iconvconfig.c += -DGCONV_PATH='"$(gconvdir)"' -DGCONV_DIR='"$(gconvdir)"' -+CFLAGS-gconv_simple.c += -Wno-error=stringop-overflow - - # Set libof-* for each routine. - cpp-srcs-left := $(iconv_prog-modules) $(iconvconfig-modules) diff --git a/glibc-2.33-clang-_Float32-_Float64.patch b/glibc-2.33-clang-_Float32-_Float64.patch deleted file mode 100644 index d2cb2c8..0000000 --- a/glibc-2.33-clang-_Float32-_Float64.patch +++ /dev/null @@ -1,206 +0,0 @@ -diff -up glibc-2.33/bits/floatn-common.h.92~ glibc-2.33/bits/floatn-common.h ---- glibc-2.33/bits/floatn-common.h.92~ 2021-02-01 18:15:33.000000000 +0100 -+++ glibc-2.33/bits/floatn-common.h 2021-07-10 03:25:10.190826118 +0200 -@@ -145,7 +145,7 @@ typedef _Complex float __cfloat16 __attr - # endif - - # if __HAVE_FLOAT32 --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined __clang__ - # define __CFLOAT32 _Complex float - # else - # define __CFLOAT32 _Complex _Float32 -@@ -153,7 +153,7 @@ typedef _Complex float __cfloat16 __attr - # endif - - # if __HAVE_FLOAT64 --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined __clang__ - # ifdef __NO_LONG_DOUBLE_MATH - # define __CFLOAT64 _Complex long double - # else -@@ -165,7 +165,7 @@ typedef _Complex float __cfloat16 __attr - # endif - - # if __HAVE_FLOAT32X --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined __clang__ - # define __CFLOAT32X _Complex double - # else - # define __CFLOAT32X _Complex _Float32x -@@ -173,7 +173,7 @@ typedef _Complex float __cfloat16 __attr - # endif - - # if __HAVE_FLOAT64X --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined __clang__ - # if __HAVE_FLOAT64X_LONG_DOUBLE - # define __CFLOAT64X _Complex long double - # else -@@ -210,11 +210,11 @@ typedef float _Float16 __attribute__ ((_ - - # if __HAVE_FLOAT32 - --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined(__clang__) - typedef float _Float32; - # endif - --# if !__GNUC_PREREQ (7, 0) -+# if !__GNUC_PREREQ (7, 0) || defined(__clang__) - # define __builtin_huge_valf32() (__builtin_huge_valf ()) - # define __builtin_inff32() (__builtin_inff ()) - # define __builtin_nanf32(x) (__builtin_nanf (x)) -@@ -234,11 +234,11 @@ typedef float _Float32; - - # ifdef __NO_LONG_DOUBLE_MATH - --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined(__clang__) - typedef long double _Float64; - # endif - --# if !__GNUC_PREREQ (7, 0) -+# if !__GNUC_PREREQ (7, 0) || defined(__clang__) - # define __builtin_huge_valf64() (__builtin_huge_vall ()) - # define __builtin_inff64() (__builtin_infl ()) - # define __builtin_nanf64(x) (__builtin_nanl (x)) -@@ -247,11 +247,11 @@ typedef long double _Float64; - - # else - --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined(__clang__) - typedef double _Float64; - # endif - --# if !__GNUC_PREREQ (7, 0) -+# if !__GNUC_PREREQ (7, 0) || defined(__clang__) - # define __builtin_huge_valf64() (__builtin_huge_val ()) - # define __builtin_inff64() (__builtin_inf ()) - # define __builtin_nanf64(x) (__builtin_nan (x)) -@@ -264,11 +264,11 @@ typedef double _Float64; - - # if __HAVE_FLOAT32X - --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined(__clang__) - typedef double _Float32x; - # endif - --# if !__GNUC_PREREQ (7, 0) -+# if !__GNUC_PREREQ (7, 0) || defined(__clang__) - # define __builtin_huge_valf32x() (__builtin_huge_val ()) - # define __builtin_inff32x() (__builtin_inf ()) - # define __builtin_nanf32x(x) (__builtin_nan (x)) -@@ -281,11 +281,11 @@ typedef double _Float32x; - - # if __HAVE_FLOAT64X_LONG_DOUBLE - --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined(__clang__) - typedef long double _Float64x; - # endif - --# if !__GNUC_PREREQ (7, 0) -+# if !__GNUC_PREREQ (7, 0) || defined(__clang__) - # define __builtin_huge_valf64x() (__builtin_huge_vall ()) - # define __builtin_inff64x() (__builtin_infl ()) - # define __builtin_nanf64x(x) (__builtin_nanl (x)) -@@ -294,11 +294,11 @@ typedef long double _Float64x; - - # else - --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined(__clang__) - typedef _Float128 _Float64x; - # endif - --# if !__GNUC_PREREQ (7, 0) -+# if !__GNUC_PREREQ (7, 0) || defined(__clang__) - # define __builtin_huge_valf64x() (__builtin_huge_valf128 ()) - # define __builtin_inff64x() (__builtin_inff128 ()) - # define __builtin_nanf64x(x) (__builtin_nanf128 (x)) -@@ -311,11 +311,11 @@ typedef _Float128 _Float64x; - - # if __HAVE_FLOAT128X - --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined(__clang__) - # error "_Float128x supported but no type" - # endif - --# if !__GNUC_PREREQ (7, 0) -+# if !__GNUC_PREREQ (7, 0) || defined(__clang__) - # define __builtin_huge_valf128x() ((_Float128x) __builtin_huge_val ()) - # define __builtin_inff128x() ((_Float128x) __builtin_inf ()) - # define __builtin_nanf128x(x) ((_Float128x) __builtin_nan (x)) -diff -up glibc-2.33/sysdeps/ieee754/ldbl-128/bits/floatn.h.92~ glibc-2.33/sysdeps/ieee754/ldbl-128/bits/floatn.h ---- glibc-2.33/sysdeps/ieee754/ldbl-128/bits/floatn.h.92~ 2021-02-01 18:15:33.000000000 +0100 -+++ glibc-2.33/sysdeps/ieee754/ldbl-128/bits/floatn.h 2021-07-10 03:24:05.274345249 +0200 -@@ -55,7 +55,7 @@ - /* Defined to concatenate the literal suffix to be used with _Float128 - types, if __HAVE_FLOAT128 is 1. */ - # if __HAVE_FLOAT128 --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined __clang__ - /* The literal suffix f128 exists only since GCC 7.0. */ - # define __f128(x) x##l - # else -@@ -65,7 +65,7 @@ - - /* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */ - # if __HAVE_FLOAT128 --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined __clang__ - # define __CFLOAT128 _Complex long double - # else - # define __CFLOAT128 _Complex _Float128 -@@ -76,7 +76,7 @@ - # if __HAVE_FLOAT128 - - /* The type _Float128 exists only since GCC 7.0. */ --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined __clang__ - typedef long double _Float128; - # endif - -diff -up glibc-2.33/sysdeps/x86/bits/floatn.h.92~ glibc-2.33/sysdeps/x86/bits/floatn.h ---- glibc-2.33/sysdeps/x86/bits/floatn.h.92~ 2021-02-01 18:15:33.000000000 +0100 -+++ glibc-2.33/sysdeps/x86/bits/floatn.h 2021-07-10 03:24:05.274345249 +0200 -@@ -58,7 +58,7 @@ - /* Defined to concatenate the literal suffix to be used with _Float128 - types, if __HAVE_FLOAT128 is 1. */ - # if __HAVE_FLOAT128 --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined(__clang__) - /* The literal suffix f128 exists only since GCC 7.0. */ - # define __f128(x) x##q - # else -@@ -68,7 +68,7 @@ - - /* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */ - # if __HAVE_FLOAT128 --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined(__clang__) - /* Add a typedef for older GCC compilers which don't natively support - _Complex _Float128. */ - typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__))); -@@ -82,7 +82,7 @@ typedef _Complex float __cfloat128 __att - # if __HAVE_FLOAT128 - - /* The type _Float128 exists only since GCC 7.0. */ --# if !__GNUC_PREREQ (7, 0) || defined __cplusplus -+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus || defined(__clang__) - typedef __float128 _Float128; - # endif - -@@ -108,7 +108,7 @@ typedef __float128 _Float128; - e.g.: __builtin_signbitf128, before GCC 6. However, there has never - been a __builtin_signbitf128 in GCC and the type-generic builtin is - only available since GCC 6. */ --# if !__GNUC_PREREQ (6, 0) -+# if !__GNUC_PREREQ (6, 0) || defined(__clang__) - # define __builtin_signbitf128 __signbitf128 - # endif - diff --git a/glibc-2.33-gcc-11.1.patch b/glibc-2.33-gcc-11.1.patch deleted file mode 100644 index fa5a90b..0000000 --- a/glibc-2.33-gcc-11.1.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff -up glibc-2.33/sunrpc/netname.c.omv~ glibc-2.33/sunrpc/netname.c ---- glibc-2.33/sunrpc/netname.c.omv~ 2021-05-11 21:34:01.180317491 +0200 -+++ glibc-2.33/sunrpc/netname.c 2021-05-11 21:36:17.125314747 +0200 -@@ -49,7 +49,12 @@ user2netname (char netname[MAXNETNAMELEN - if ((strlen (dfltdom) + OPSYS_LEN + 3 + MAXIPRINT) > (size_t) MAXNETNAMELEN) - return 0; - -+ /* The check above makes sure the line below is actually ok, but -+ * gcc 11.1 spews a warning... */ -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wformat-overflow" - sprintf (netname, "%s.%d@%s", OPSYS, uid, dfltdom); -+#pragma GCC diagnostic pop - i = strlen (netname); - if (netname[i - 1] == '.') - netname[i - 1] = '\0'; diff --git a/glibc-2.33-no-x86-isa-level.patch b/glibc-2.33-no-x86-isa-level.patch deleted file mode 100644 index 675172f..0000000 --- a/glibc-2.33-no-x86-isa-level.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -up glibc-2.35/sysdeps/x86/configure.48~ glibc-2.35/sysdeps/x86/configure ---- glibc-2.35/sysdeps/x86/configure.48~ 2022-02-03 11:26:20.165426217 +0100 -+++ glibc-2.35/sysdeps/x86/configure 2022-02-03 11:27:41.422729679 +0100 -@@ -134,7 +134,7 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS - test $ac_status = 0; }; }; then - count=`LC_ALL=C $READELF -n conftest | grep NT_GNU_PROPERTY_TYPE_0 | wc -l` - if test "$count" = 1; then -- libc_cv_include_x86_isa_level=yes -+ libc_cv_include_x86_isa_level=no # workaround for vbox bug https://forums.gentoo.org/viewtopic-p-8568765.html?sid=563ab671df23b2a550273edc2dea30a2 - fi - fi - rm -f conftest* -diff -up glibc-2.35/sysdeps/x86/configure.ac.48~ glibc-2.35/sysdeps/x86/configure.ac ---- glibc-2.35/sysdeps/x86/configure.ac.48~ 2022-02-03 11:26:20.165426217 +0100 -+++ glibc-2.35/sysdeps/x86/configure.ac 2022-02-03 11:28:02.375807855 +0100 -@@ -101,7 +101,7 @@ libc_cv_include_x86_isa_level=no - if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -nostartfiles -nostdlib -r -o conftest conftest1.S conftest2.S); then - count=`LC_ALL=C $READELF -n conftest | grep NT_GNU_PROPERTY_TYPE_0 | wc -l` - if test "$count" = 1; then -- libc_cv_include_x86_isa_level=yes -+ libc_cv_include_x86_isa_level=no # workaround for vbox bug https://forums.gentoo.org/viewtopic-p-8568765.html?sid=563ab671df23b2a550273edc2dea30a2 - fi - fi - rm -f conftest*]) diff --git a/glibc-2.34-headers-clang.patch b/glibc-2.34-headers-clang.patch deleted file mode 100644 index 2dda74e..0000000 --- a/glibc-2.34-headers-clang.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff -up glibc-2.34/include/sys/cdefs.h.omv~ glibc-2.34/include/sys/cdefs.h -diff -up glibc-2.34/misc/sys/cdefs.h.omv~ glibc-2.34/misc/sys/cdefs.h ---- glibc-2.34/misc/sys/cdefs.h.omv~ 2021-08-14 03:10:05.421588243 +0200 -+++ glibc-2.34/misc/sys/cdefs.h 2021-08-14 03:13:30.178192179 +0200 -@@ -465,7 +465,7 @@ - # endif - #endif - --#if __GNUC_PREREQ (8, 0) -+#if __GNUC_PREREQ (8, 0) && !defined(__clang__) - /* Describes a char array whose address can safely be passed as the first - argument to strncpy and strncat, as the char array is not necessarily - a NUL-terminated string. */ -@@ -476,7 +476,7 @@ - - /* Undefine (also defined in libc-symbols.h). */ - #undef __attribute_copy__ --#if __GNUC_PREREQ (9, 0) -+#if __GNUC_PREREQ (9, 0) && !defined(__clang__) - /* Copies attributes from the declaration or type referenced by - the argument. */ - # define __attribute_copy__(arg) __attribute__ ((__copy__ (arg))) -@@ -596,7 +596,7 @@ _Static_assert (0, "IEEE 128-bits long d - # define __HAVE_GENERIC_SELECTION 0 - #endif - --#if __GNUC_PREREQ (10, 0) -+#if __GNUC_PREREQ (10, 0) && !defined(__clang__) - /* Designates a 1-based positional argument ref-index of pointer type - that can be used to access size-index elements of the pointed-to - array according to access mode, or at least one element when -@@ -613,7 +613,7 @@ _Static_assert (0, "IEEE 128-bits long d - # define __attr_access_none(argno) - #endif - --#if __GNUC_PREREQ (11, 0) -+#if __GNUC_PREREQ (11, 0) && !defined(__clang__) - /* Designates dealloc as a function to call to deallocate objects - allocated by the declared function. */ - # define __attr_dealloc(dealloc, argno) \ diff --git a/glibc-aarch64-tls-fixes.patch b/glibc-aarch64-tls-fixes.patch deleted file mode 100644 index a05d905..0000000 --- a/glibc-aarch64-tls-fixes.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h -index 997c860..50b37b0 100644 ---- a/sysdeps/aarch64/dl-machine.h -+++ b/sysdeps/aarch64/dl-machine.h -@@ -295,7 +295,7 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, - # ifndef SHARED - CHECK_STATIC_TLS (map, sym_map); - # else -- if (!TRY_STATIC_TLS (map, sym_map)) -+ if (1) - { - td->arg = _dl_make_tlsdesc_dynamic - (sym_map, sym->st_value + reloc->r_addend); diff --git a/glibc-arm-hardfloat-3.patch b/glibc-arm-hardfloat-3.patch deleted file mode 100644 index ff4997e..0000000 --- a/glibc-arm-hardfloat-3.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff -Nrup a/elf/dl-load.c b/elf/dl-load.c ---- a/elf/dl-load.c 2012-06-06 13:07:41.727524312 -0600 -+++ b/elf/dl-load.c 2012-06-06 13:11:19.308681002 -0600 -@@ -2093,10 +2093,14 @@ _dl_map_object (struct link_map *loader, - soname = ((const char *) D_PTR (l, l_info[DT_STRTAB]) - + l->l_info[DT_SONAME]->d_un.d_val); - if (strcmp (name, soname) != 0) -- continue; -+#ifdef __arm__ -+ if (strcmp (name, "ld-linux.so.3") -+ || strcmp (soname, "ld-linux-armhf.so.3")) -+#endif -+ continue; - - /* We have a match on a new name -- cache it. */ -- add_name_to_object (l, soname); -+ add_name_to_object (l, name); - l->l_soname_added = 1; - } - diff --git a/glibc-fedora-__libc_multiple_libcs.patch b/glibc-fedora-__libc_multiple_libcs.patch deleted file mode 100644 index 96a62e4..0000000 --- a/glibc-fedora-__libc_multiple_libcs.patch +++ /dev/null @@ -1,56 +0,0 @@ -diff -up glibc-2.33/elf/dl-init.c.12~ glibc-2.33/elf/dl-init.c ---- glibc-2.33/elf/dl-init.c.12~ 2021-02-01 18:15:33.000000000 +0100 -+++ glibc-2.33/elf/dl-init.c 2021-02-02 00:10:07.506005790 +0100 -@@ -120,8 +120,6 @@ _dl_init (struct link_map *main_map, int - while (i-- > 0) - call_init (main_map->l_initfini[i], argc, argv, env); - --#ifndef HAVE_INLINED_SYSCALLS - /* Finished starting up. */ - _dl_starting_up = 0; --#endif - } -diff -up glibc-2.33/elf/dl-support.c.12~ glibc-2.33/elf/dl-support.c ---- glibc-2.33/elf/dl-support.c.12~ 2021-02-01 18:15:33.000000000 +0100 -+++ glibc-2.33/elf/dl-support.c 2021-02-02 00:10:07.506005790 +0100 -@@ -126,10 +126,8 @@ struct r_scope_elem _dl_initial_searchli - .r_nlist = 1, - }; - --#ifndef HAVE_INLINED_SYSCALLS - /* Nonzero during startup. */ - int _dl_starting_up = 1; --#endif - - /* Random data provided by the kernel. */ - void *_dl_random; -diff -up glibc-2.33/elf/rtld.c.12~ glibc-2.33/elf/rtld.c ---- glibc-2.33/elf/rtld.c.12~ 2021-02-01 18:15:33.000000000 +0100 -+++ glibc-2.33/elf/rtld.c 2021-02-02 00:11:06.989150813 +0100 -@@ -299,7 +299,6 @@ dl_main_state_init (struct dl_main_state - state->version_info = false; - } - --#ifndef HAVE_INLINED_SYSCALLS - /* Set nonzero during loading and initialization of executable and - libraries, cleared before the executable's entry point runs. This - must not be initialized to nonzero, because the unused dynamic -@@ -309,7 +308,6 @@ dl_main_state_init (struct dl_main_state - never be called. */ - int _dl_starting_up = 0; - rtld_hidden_def (_dl_starting_up) --#endif - - /* This is the structure which defines all variables global to ld.so - (except those which cannot be added for some reason). */ -@@ -1159,10 +1157,8 @@ dl_main (const ElfW(Phdr) *phdr, - /* Process the environment variable which control the behaviour. */ - process_envvars (&state); - --#ifndef HAVE_INLINED_SYSCALLS - /* Set up a flag which tells we are just starting. */ - _dl_starting_up = 1; --#endif - - const char *ld_so_name = _dl_argv[0]; - if (*user_entry == (ElfW(Addr)) ENTRY_POINT) diff --git a/glibc-fedora-linux-tcsetattr.patch b/glibc-fedora-linux-tcsetattr.patch deleted file mode 100644 index 2390ef9..0000000 --- a/glibc-fedora-linux-tcsetattr.patch +++ /dev/null @@ -1,48 +0,0 @@ ---- glibc-2.25.51/sysdeps/unix/sysv/linux/tcsetattr.c.0025~ 2017-07-11 16:44:14.000000000 +0200 -+++ glibc-2.25.51/sysdeps/unix/sysv/linux/tcsetattr.c 2017-07-11 18:32:38.167537430 +0200 -@@ -45,6 +45,7 @@ __tcsetattr (int fd, int optional_action - { - struct __kernel_termios k_termios; - unsigned long int cmd; -+ int retval; - - switch (optional_actions) - { -@@ -75,7 +76,36 @@ __tcsetattr (int fd, int optional_action - memcpy (&k_termios.c_cc[0], &termios_p->c_cc[0], - __KERNEL_NCCS * sizeof (cc_t)); - -- return INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios); -+ retval = INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios); -+ -+ if (retval == 0 && cmd == TCSETS) -+ { -+ /* The Linux kernel has a bug which silently ignore the invalid -+ c_cflag on pty. We have to check it here. */ -+ int save = errno; -+ retval = INLINE_SYSCALL (ioctl, 3, fd, TCGETS, &k_termios); -+ if (retval) -+ { -+ /* We cannot verify if the setting is ok. We don't return -+ an error (?). */ -+ __set_errno (save); -+ retval = 0; -+ } -+ else if ((termios_p->c_cflag & (PARENB | CREAD)) -+ != (k_termios.c_cflag & (PARENB | CREAD)) -+ || ((termios_p->c_cflag & CSIZE) -+ && ((termios_p->c_cflag & CSIZE) -+ != (k_termios.c_cflag & CSIZE)))) -+ { -+ /* It looks like the Linux kernel silently changed the -+ PARENB/CREAD/CSIZE bits in c_cflag. Report it as an -+ error. */ -+ __set_errno (EINVAL); -+ retval = -1; -+ } -+ } -+ -+ return retval; - } - weak_alias (__tcsetattr, tcsetattr) - libc_hidden_def (tcsetattr) diff --git a/glibc-fedora-ppc-unwind.patch b/glibc-fedora-ppc-unwind.patch deleted file mode 100644 index 0a808ec..0000000 --- a/glibc-fedora-ppc-unwind.patch +++ /dev/null @@ -1,20 +0,0 @@ -glibc-2.3.3-1478-g37582bc - -* Thu Nov 30 2006 Jakub Jelinek 2.5.90-9 -- on ppc64 build __libc_start_main without unwind info, - as it breaks MD_FROB_UPDATE_CONTEXT (#217729, #217775; in the - future that could be fixable just by providing .cfi_undefined r2 - in __libc_start_main instead) - -diff -Nrup a/sysdeps/powerpc/powerpc64/Makefile b/sysdeps/powerpc/powerpc64/Makefile ---- a/sysdeps/powerpc/powerpc64/Makefile 2012-06-05 07:42:49.000000000 -0600 -+++ b/sysdeps/powerpc/powerpc64/Makefile 2012-06-07 12:15:21.828318633 -0600 -@@ -35,6 +35,8 @@ CFLAGS-rtld-memmove.os = $(no-special-re - CFLAGS-rtld-memchr.os = $(no-special-regs) - CFLAGS-rtld-strnlen.os = $(no-special-regs) - -+CFLAGS-libc-start.c += -fno-asynchronous-unwind-tables -+ - ifeq ($(subdir),elf) - # help gcc inline asm code from dl-machine.h - +cflags += -finline-limit=2000 diff --git a/glibc-gcc-PR69537.patch b/glibc-gcc-PR69537.patch deleted file mode 100644 index acb1423..0000000 --- a/glibc-gcc-PR69537.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up glibc-2.30/nis/ypclnt.c.17~ glibc-2.30/nis/ypclnt.c ---- glibc-2.30/nis/ypclnt.c.17~ 2019-08-02 13:54:49.077566424 +0200 -+++ glibc-2.30/nis/ypclnt.c 2019-08-02 13:55:21.850394517 +0200 -@@ -590,7 +590,7 @@ yp_master (const char *indomain, const c - { - ypreq_nokey req; - ypresp_master resp; -- enum clnt_stat result; -+ int result; - - if (indomain == NULL || indomain[0] == '\0' - || inmap == NULL || inmap[0] == '\0') diff --git a/glibc-rh827510.patch b/glibc-rh827510.patch deleted file mode 100644 index 6115891..0000000 --- a/glibc-rh827510.patch +++ /dev/null @@ -1,37 +0,0 @@ -Short description: Fix newlocale error return. -Author(s): Fedora glibc team -Origin: PATCH -Bug-RHEL: #832516 -Bug-Fedora: #827510 -Bug-Upstream: #14247 -Upstream status: not-submitted - -This needs to go upstream right away to fix the error case for -newlocale not correctly returning an error. - -2012-06-14 Jeff Law - - * locale/loadlocale.c (_nl_load_locale): Delay setting - file->decided until we have successfully loaded the file's - data. - -diff --git a/locale/loadlocale.c b/locale/loadlocale.c -index e3fa187..9fd9216 100644 ---- a/locale/loadlocale.c -+++ b/locale/loadlocale.c -@@ -169,7 +169,6 @@ _nl_load_locale (struct loaded_l10nfile *file, int category) - int save_err; - int alloc = ld_mapped; - -- file->decided = 1; - file->data = NULL; - - fd = __open_nocancel (file->filename, O_RDONLY | O_CLOEXEC); -@@ -278,6 +277,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category) - newdata->alloc = alloc; - - file->data = newdata; -+ file->decided = 1; - } - - void diff --git a/glibc-x86_32-workaround-for-gcc-11-bug.patch b/glibc-x86_32-workaround-for-gcc-11-bug.patch deleted file mode 100644 index 815fa69..0000000 --- a/glibc-x86_32-workaround-for-gcc-11-bug.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up glibc-2.33/misc/Makefile.omv~ glibc-2.33/misc/Makefile ---- glibc-2.33/misc/Makefile.omv~ 2021-05-31 23:28:41.341567881 +0200 -+++ glibc-2.33/misc/Makefile 2021-05-31 23:28:51.604675253 +0200 -@@ -107,7 +107,7 @@ tests-special += $(objpfx)tst-error1-mem - $(objpfx)tst-allocate_once-mem.out - endif - --CFLAGS-select.c += -fexceptions -fasynchronous-unwind-tables -+CFLAGS-select.c += -fexceptions -fasynchronous-unwind-tables -mno-stackrealign - CFLAGS-tsearch.c += $(uses-callbacks) - CFLAGS-lsearch.c += $(uses-callbacks) - CFLAGS-pselect.c += -fexceptions diff --git a/glibc.spec b/glibc.spec index 1316d80..b1656d9 100644 --- a/glibc.spec +++ b/glibc.spec @@ -1,3 +1,10 @@ +# Use snapshots of post-release branch +# https://sourceware.org/git/?p=glibc.git;a=log;h=refs/heads/release/2.36/master +# Package from the last commit from there +# Only important patches are ported into it +# (instead of applying many commits as patches) +%define commit 4f4d7a13edfd2fdc57c9d76e1fd6d017fb47550c +%define commit_short %(echo %{commit} | head -c6) %bcond_with crosscompilers # The test suite should be run after updates, but is very @@ -34,7 +41,7 @@ %define oname glibc %define major 6 -%define source_dir %{oname}-%{version} +%define source_dir %{oname}-%{commit} %define checklist %{_builddir}/%{source_dir}/Check.list %define libc %mklibname c %{major} %define devname %mklibname -d c @@ -146,11 +153,10 @@ Summary: The GNU libc libraries Name: %{cross_prefix}%{oname} Epoch: 6 Version: 2.36 -Source0: http://ftp.gnu.org/gnu/glibc/%{oname}-%{version}.tar.xz -#if %(test $(echo %{version}.0 |cut -d. -f3) -lt 90 && echo 1 || echo 0) -#Source1: http://ftp.gnu.org/gnu/glibc/%{oname}-%{version}.tar.xz.sig -#endif -Release: 3 +#Source0: http://ftp.gnu.org/gnu/glibc/%{oname}-%{version}.tar.xz +# use ./upd.sh to make a tarball and automatically update Release +Source0: glibc-%{commit}.tar.xz +Release: 4.git%{commit_short}.1 License: LGPLv2+ and LGPLv2+ with exceptions and GPLv2+ Group: System/Libraries Url: http://www.gnu.org/software/libc/ @@ -168,108 +174,31 @@ Source1001: locale_install.sh Source1002: locale_uninstall.sh Source1003: locales.sysconfig -# Ugly, temporary arch specific (x86_32) hack -Source1010: glibc-x86_32-workaround-for-gcc-11-bug.patch - #----------------------------------------------------------------------- # fedora patches -Patch25: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-fedora-linux-tcsetattr.patch Patch26: eglibc-fedora-locale-euro.patch Patch27: https://src.fedoraproject.org/rpms/glibc/raw/rawhide/f/glibc-fedora-localedata-rh61908.patch -# We disagree with -# http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-fedora-streams-rh436349.patch -# Therefore we don't package/apply it. Patch30: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-fedora-localedef.patch Patch31: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-fedora-locarchive.patch Patch32: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-fedora-manual-dircategory.patch -Patch35: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-fedora-ppc-unwind.patch -Patch36: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-aarch64-tls-fixes.patch -Patch38: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-arm-hardfloat-3.patch Patch41: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-cs-path.patch -# We disagree with http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-disable-rwlock-elision.patch -# Patch 131 is a much nicer solution that disables rwlock elision only on CPUs that can't handle it. -Patch44: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-fedora-__libc_multiple_libcs.patch Patch46: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-fedora-nscd.patch -Patch47: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-gcc-PR69537.patch Patch50: http://pkgs.fedoraproject.org/cgit/rpms/glibc.git/plain/glibc-nscd-sysconfig.patch -Patch65: https://src.fedoraproject.org/rpms/glibc/raw/rawhide/f/glibc-rh827510.patch #----------------------------------------------------------------------- -# Clear Linux patches -Patch83: https://github.com/clearlinux-pkgs/glibc/blob/master/alternate_trim.patch -Patch84: https://github.com/clearlinux-pkgs/glibc/blob/master/madvise-bss.patch -Patch86: https://raw.githubusercontent.com/clearlinux-pkgs/glibc/master/large-page-huge-page.patch -Patch87: https://raw.githubusercontent.com/clearlinux-pkgs/glibc/master/use_madv_free.patch -Patch88: https://raw.githubusercontent.com/clearlinux-pkgs/glibc/master/malloc_tune.patch -# (tpg) CLR disabled this patch -#Patch90: https://raw.githubusercontent.com/clearlinux-pkgs/glibc/master/ldconfig-Os.patch -Patch92: https://raw.githubusercontent.com/clearlinux-pkgs/glibc/master/pause.patch -Patch101: https://raw.githubusercontent.com/clearlinux-pkgs/glibc/master/nostackshrink.patch - -# -# Patches from upstream -# -# Taken from git://sourceware.org/git/glibc.git -# release branch -# git format-patch glibc-2.36 -# (PN=200; for i in *patch; do echo -e "Patch$((PN)):\t$i"; PN=$((PN+1)); done) -Patch200: 0001-stdlib-Suppress-gcc-diagnostic-that-char8_t-is-a-key.patch -Patch201: 0002-wcsmbs-Add-missing-test-c8rtomb-test-mbrtoc8-depende.patch -Patch202: 0003-dlfcn-Pass-caller-pointer-to-static-dlopen-implement.patch -Patch203: 0004-Update-syscall-lists-for-Linux-5.19.patch -Patch204: 0005-elf-Replace-strcpy-call-with-memcpy-BZ-29454.patch -Patch205: 0006-Linux-Terminate-subprocess-on-late-failure-in-tst-pi.patch -Patch206: 0007-alpha-Fix-generic-brk-system-call-emulation-in-__brk.patch -Patch207: 0008-socket-Check-lengths-before-advancing-pointer-in-CMS.patch -Patch208: 0009-NEWS-Add-entry-for-bug-28846.patch -Patch209: 0010-glibcextract.py-Add-compile_c_snippet.patch -Patch210: 0011-linux-Use-compile_c_snippet-to-check-linux-pidfd.h-a.patch -Patch211: 0012-linux-Mimic-kernel-defition-for-BLOCK_SIZE.patch -Patch212: 0013-linux-Use-compile_c_snippet-to-check-linux-mount.h-a.patch -Patch213: 0014-linux-Fix-sys-mount.h-usage-with-kernel-headers.patch -Patch214: 0015-Linux-Fix-enum-fsconfig_command-detection-in-sys-mou.patch -Patch215: 0016-syslog-Fix-large-messages-BZ-29536.patch -Patch216: 0017-elf-Call-__libc_early_init-for-reused-namespaces-bug.patch -Patch217: 0018-Apply-asm-redirections-in-wchar.h-before-first-use.patch -Patch218: 0019-elf-Restore-how-vDSO-dependency-is-printed-with-LD_T.patch -Patch219: 0020-syslog-Remove-extra-whitespace-between-timestamp-and.patch -Patch220: 0021-Add-NEWS-entry-for-CVE-2022-39046.patch -Patch221: 0022-nscd-Fix-netlink-cache-invalidation-if-epoll-is-used.patch - -# from IBM release branch (ibm/%{version}/master branch in git) -# [currently none] +# Clear Linux patches may be found here: https://github.com/clearlinux-pkgs/glibc/tree/main +# Keeping careful with using not widely tested and audited code in libc #----------------------------------------------------------------------- # OpenMandriva patches -Patch1002: glibc-2.34-headers-clang.patch Patch1003: eglibc-mandriva-share-locale.patch -Patch1004: eglibc-mandriva-nsswitch.conf.patch -Patch1005: eglibc-mandriva-xterm-xvt.patch Patch1007: eglibc-mandriva-nscd-no-host-cache.patch Patch1010: eglibc-mandriva-timezone.patch -Patch1018: eglibc-mandriva-testsuite-ldbl-bits.patch -Patch1019: eglibc-mandriva-testsuite-rt-notparallel.patch -Patch1020: glibc-2.19-no-__builtin_va_arg_pack-with-clang.patch # http://sourceware.org/bugzilla/show_bug.cgi?id=14995 # http://sourceware.org/bugzilla/attachment.cgi?id=6795 Patch1029: glibc-2.19-nscd-socket-and-pid-moved-from-varrun-to-run.patch Patch1033: glibc-2.25-force-use-ld-bfd.patch -Patch1035: glibc-2.29-aarch64-buildfix.patch Patch1036: glibc-2.29-strict-aliasing.patch -Patch1037: glibc-2.29-SIG_BLOCK.patch -Patch1038: glibc-2.31.9000-aarch64-compile.patch -Patch1039: https://github.com/FireBurn/glibc/commit/4483f2500825a84382c2a6a9ac60fc77954533d7.patch -Patch1040: https://github.com/FireBurn/glibc/commit/2efa9591e5e8a129e7b73ad0dad3eecbd69482ff.patch -# Workaround for ISA levels going wrong -- causes glibc to abort on -# znver1 inside VirtualBox even if the right CPU instructions are -# supported -# https://forums.gentoo.org/viewtopic-p-8568765.html?sid=563ab671df23b2a550273edc2dea30a2 -# https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5dbd6a821ff753e3b41324c4fb7c58cf65eeea33 -Patch1041: glibc-2.33-no-x86-isa-level.patch -Patch1042: glibc-2.33-gcc-11.1.patch -# Fix _Float32/_Float64 assumptions to make it work with -# clang setting __GNUC__ to something > 6 -Patch1043: glibc-2.33-clang-_Float32-_Float64.patch Patch1044: glibc-2.34-allow-zstd-compressed-locales.patch Patch1050: https://803950.bugs.gentoo.org/attachment.cgi?id=757176#/nss-dont-crash-on-NULL.patch # https://www.phoronix.com/news/Glibc-2.36-EAC-Problems @@ -1487,10 +1416,6 @@ function BuildGlibc() { fi rm -f test.o - if echo $arch |grep -q i.86; then - patch -p1 -b -z .1010~ <%{S:1010} - fi - # Force a separate object dir mkdir -p build-$arch-linux cd build-$arch-linux @@ -1545,10 +1470,6 @@ echo CC="$BuildCC" CXX="$BuildCXX" CFLAGS="$BuildFlags -Wno-error" ARFLAGS="$ARF fi cd - - if echo $arch |grep -q i.86; then - patch -p1 -R <%{S:1010} - fi - check_flags="-k" # Generate test matrix diff --git a/large-page-huge-page.patch b/large-page-huge-page.patch deleted file mode 100644 index 67f8c7e..0000000 --- a/large-page-huge-page.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff -up glibc-2.35/malloc/malloc.c.23~ glibc-2.35/malloc/malloc.c ---- glibc-2.35/malloc/malloc.c.23~ 2022-02-03 11:12:21.887241710 +0100 -+++ glibc-2.35/malloc/malloc.c 2022-02-03 11:13:26.221492043 +0100 -@@ -2449,6 +2449,9 @@ sysmalloc_mmap (INTERNAL_SIZE_T nb, size - madvise_thp (mm, size); - #endif - -+ if (size > 8 * 1024 * 1024) -+ __madvise (mm, size , MADV_HUGEPAGE); -+ - /* - The offset to the start of the mmapped region is stored in the prev_size - field of the chunk. This allows us to adjust returned start address to diff --git a/madvise-bss.patch b/madvise-bss.patch deleted file mode 100644 index b030d09..0000000 --- a/madvise-bss.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- glibc-2.22/elf/dl-map-segments.h.org 2015-11-23 17:13:52.948724559 -0500 -+++ glibc-2.22/elf/dl-map-segments.h 2015-11-23 17:14:42.434105906 -0500 -@@ -139,6 +139,7 @@ - -1, 0); - if (__glibc_unlikely (mapat == MAP_FAILED)) - return DL_MAP_SEGMENTS_ERROR_MAP_ZERO_FILL; -+ __madvise((caddr_t) zeropage, zeroend - zeropage, MADV_MERGEABLE); - } - } - diff --git a/malloc_tune.patch b/malloc_tune.patch deleted file mode 100644 index e9076a5..0000000 --- a/malloc_tune.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- glibc-2.24/malloc/malloc.c~ 2016-11-13 22:53:14.000000000 +0000 -+++ glibc-2.24/malloc/malloc.c 2016-11-13 23:01:29.750884186 +0000 -@@ -858,7 +858,7 @@ - #define M_TRIM_THRESHOLD -1 - - #ifndef DEFAULT_TRIM_THRESHOLD --#define DEFAULT_TRIM_THRESHOLD (128 * 1024) -+#define DEFAULT_TRIM_THRESHOLD (512 * 1024) - #endif - - /* -@@ -891,7 +891,7 @@ - #define M_TOP_PAD -2 - - #ifndef DEFAULT_TOP_PAD --#define DEFAULT_TOP_PAD (0) -+#define DEFAULT_TOP_PAD (64 * 1024) - #endif - - /* diff --git a/nostackshrink.patch b/nostackshrink.patch deleted file mode 100644 index 0963ee9..0000000 --- a/nostackshrink.patch +++ /dev/null @@ -1,14 +0,0 @@ -when this gets called the stack is likely not there; avoid the tlb flushes - - ---- glibc-2.28/nptl/allocatestack.c~ 2018-08-01 05:10:47.000000000 +0000 -+++ glibc-2.28/nptl/allocatestack.c 2018-09-27 16:18:09.043648892 +0000 -@@ -385,6 +385,8 @@ - { - uintptr_t sp = (uintptr_t) CURRENT_STACK_FRAME; - size_t pagesize_m1 = __getpagesize () - 1; -+ -+ return; - #if _STACK_GROWS_DOWN && !defined(NEED_SEPARATE_REGISTER_STACK) - size_t freesize = (sp - (uintptr_t) mem) & ~pagesize_m1; - assert (freesize < size); diff --git a/pause.patch b/pause.patch deleted file mode 100644 index 941d4cf..0000000 --- a/pause.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- glibc-2.29/sysdeps/x86/atomic-machine.h~ 2019-01-31 16:45:36.000000000 +0000 -+++ glibc-2.29/sysdeps/x86/atomic-machine.h 2019-01-31 22:21:32.316611237 +0000 -@@ -566,6 +566,6 @@ - #define atomic_read_barrier() __asm ("" ::: "memory") - #define atomic_write_barrier() __asm ("" ::: "memory") - --#define atomic_spin_nop() __asm ("pause") -+#define atomic_spin_nop() __asm ("lfence") - - #endif /* atomic-machine.h */ diff --git a/upd.sh b/upd.sh new file mode 100755 index 0000000..fd634dc --- /dev/null +++ b/upd.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +set -efu +set -o pipefail + +# get current commit (version) +old_commit="$(grep '^%define commit ' glibc.spec | awk '{print $NF}')" +[ -n "$old_commit" ] +# or: rpmspec --define "_sourcedir $PWD" -q --srpm --qf '%{version}' glibc.spec +version="$(grep '^Version:' glibc.spec | awk '{print $NF}')" +[ -n "$version" ] + +# get latest available commit (version) +new_commit="$(git ls-remote git://sourceware.org/git/glibc.git release/2.36/master | awk '{print $1}')" +[ -n "$new_commit" ] +if [ "$old_commit" = "$new_commit" ]; then + echo "There are no updates" +fi + +tmp="$(mktemp -d)" +trap 'rm -fr "$tmp"' EXIT + +# download the latest version +git clone --depth=1 https://sourceware.org/git/glibc.git -b release/"$version"/master "$tmp"/glibc-"$new_commit" +if [ "$(cd "$tmp"/glibc-"$new_commit" && git rev-parse HEAD)" != "$new_commit" ]; then + echo "Repository has probably changed in the middle, rerun this script" + exit 1 +fi + +# pack it +XZ_OPT="-6 --threads=0 -v" tar cJf glibc-"$new_commit".tar.xz -C "$tmp" glibc-"$new_commit" + +# Bump RPM release +# 3.git%{commit_short}.1 -> 4.git%{commit_short}.1 +# 3.git%{commit_short}.2 -> 4.git%{commit_short}.1 +old_release="$(grep '^Release:' glibc.spec | awk '{print $NF}')" +[ -n "$old_release" ] +IFS=. read -r -a release <<< "$old_release" +# increase first number +num1=$((${release[0]}+1)) +# decrease last number to 1 +num2=1 +new_release="${num1}.${release[1]}.${num2}" +sed -i'' -E glibc.spec \ + -e "s,^%define commit .+,%define commit ${new_commit}," \ + -e "s,^Release:.+,Release:\t${new_release}," +sed -i'' .abf.yml -e "/glibc-${old_release}.tar.xz/d" +# upload glibc-$new_commit.tar.xz to file-store.rosalinux.ru +abf put -n +PAGER= GIT_PAGER= git diff +# copypastable commit message +echo "upd to snapshot $(echo "$new_commit" | head -c5) of v$version" diff --git a/use_madv_free.patch b/use_madv_free.patch deleted file mode 100644 index 4d579ac..0000000 --- a/use_madv_free.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- glibc-2.24/malloc/malloc.c~ 2016-08-27 04:16:33.000000000 +0000 -+++ glibc-2.24/malloc/malloc.c 2016-11-13 22:53:14.772986778 +0000 -@@ -4568,7 +4568,7 @@ - content. */ - memset (paligned_mem, 0x89, size & ~psm1); - #endif -- __madvise (paligned_mem, size & ~psm1, MADV_DONTNEED); -+ __madvise (paligned_mem, size & ~psm1, MADV_FREE); - - result = 1; - } ---- glibc-2.24/malloc/arena.c~ 2016-08-02 02:01:36.000000000 +0000 -+++ glibc-2.24/malloc/arena.c 2016-11-13 22:52:52.889299846 +0000 -@@ -524,7 +524,7 @@ - h->mprotect_size = new_size; - } - else -- __madvise ((char *) h + new_size, diff, MADV_DONTNEED); -+ __madvise ((char *) h + new_size, diff, MADV_FREE); - /*fprintf(stderr, "shrink %p %08lx\n", h, new_size);*/ - - h->size = new_size;