Bump required minimum version of glibc to 2.34

Major distributions already have glibc >= 2.34.
Let's bump the required minimum version.

Note, glibc-2.34 was released on 2021-08-01.
This commit is contained in:
Yu Watanabe
2026-01-28 10:56:53 +09:00
parent 28fb7e869c
commit 149a8e6306
13 changed files with 39 additions and 318 deletions
+1 -1
View File
@@ -201,7 +201,7 @@ REQUIREMENTS:
CONFIG_PSI
CONFIG_MEMCG
glibc >= 2.31
glibc >= 2.34
libxcrypt >= 4.4.0 (optional)
libmount >= 2.30 (from util-linux)
(util-linux *must* be built without --enable-libmount-support-mtab)
-4
View File
@@ -565,10 +565,6 @@ foreach ident : [
['renameat2', '''#include <stdio.h>'''], # since musl-1.2.6
['set_mempolicy', '''#include <sys/syscall.h>'''], # declared at numaif.h provided by libnuma, which we do not use
['get_mempolicy', '''#include <sys/syscall.h>'''], # declared at numaif.h provided by libnuma, which we do not use
['strerrorname_np', '''#include <string.h>'''], # since glibc-2.32
['mallinfo2', '''#include <malloc.h>'''], # since glibc-2.33
['execveat', '''#include <unistd.h>'''], # since glibc-2.34
['close_range', '''#include <unistd.h>'''], # since glibc-2.34
['epoll_pwait2', '''#include <sys/epoll.h>'''], # since glibc-2.35
['fsconfig', '''#include <sys/mount.h>'''], # since glibc-2.36
['fsmount', '''#include <sys/mount.h>'''], # since glibc-2.36
+1 -1
View File
@@ -24,7 +24,7 @@ int errno_from_name(const char *name) {
return sc->id;
}
#if HAVE_STRERRORNAME_NP
#ifdef __GLIBC__
const char* errno_name_no_fallback(int id) {
if (id == 0) /* To stay in line with our implementation below. */
return NULL;
+15 -18
View File
@@ -1,27 +1,26 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
#include_next <malloc.h>
#include <errno.h>
#include <stdio.h>
/* struct mallinfo2 will be defined and struct mallinfo is converted to struct mallinfo2 in
* override/malloc.h. Hence, here we define struct mallinfo. */
struct mallinfo {
int arena; /* non-mmapped space allocated from system */
int ordblks; /* number of free chunks */
int smblks; /* number of fastbin blocks */
int hblks; /* number of mmapped regions */
int hblkhd; /* space in mmapped regions */
int usmblks; /* always 0, preserved for backwards compatibility */
int fsmblks; /* space available in freed fastbin blocks */
int uordblks; /* total allocated space */
int fordblks; /* total free space */
int keepcost; /* top-most, releasable (via malloc_trim) space */
struct mallinfo2 {
size_t arena; /* non-mmapped space allocated from system */
size_t ordblks; /* number of free chunks */
size_t smblks; /* number of fastbin blocks */
size_t hblks; /* number of mmapped regions */
size_t hblkhd; /* space in mmapped regions */
size_t usmblks; /* always 0, preserved for backwards compatibility */
size_t fsmblks; /* space available in freed fastbin blocks */
size_t uordblks; /* total allocated space */
size_t fordblks; /* total free space */
size_t keepcost; /* top-most, releasable (via malloc_trim) space */
};
static inline struct mallinfo mallinfo(void) {
return (struct mallinfo) {};
static inline struct mallinfo2 mallinfo2(void) {
return (struct mallinfo2) {};
}
static inline int malloc_info(int options, FILE *stream) {
@@ -35,5 +34,3 @@ static inline int malloc_info(int options, FILE *stream) {
static inline int malloc_trim(size_t pad) {
return 0;
}
#include_next <malloc.h>
+6
View File
@@ -10,3 +10,9 @@
* found. Let's always use getopt_long(). */
int getopt_fix(int argc, char * const *argv, const char *optstring);
#define getopt(argc, argv, optstring) getopt_fix(argc, argv, optstring)
int missing_close_range(unsigned first_fd, unsigned end_fd, unsigned flags);
#define close_range missing_close_range
int missing_execveat(int dirfd, const char *pathname, char * const argv[], char * const envp[], int flags);
#define execveat missing_execveat
-39
View File
@@ -1,39 +0,0 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
#include_next <malloc.h> /* IWYU pragma: export */
#if !HAVE_MALLINFO2
struct mallinfo2 {
size_t arena; /* non-mmapped space allocated from system */
size_t ordblks; /* number of free chunks */
size_t smblks; /* number of fastbin blocks */
size_t hblks; /* number of mmapped regions */
size_t hblkhd; /* space in mmapped regions */
size_t usmblks; /* always 0, preserved for backwards compatibility */
size_t fsmblks; /* space available in freed fastbin blocks */
size_t uordblks; /* total allocated space */
size_t fordblks; /* total free space */
size_t keepcost; /* top-most, releasable (via malloc_trim) space */
};
static inline struct mallinfo2 mallinfo2(void) {
_Pragma("GCC diagnostic push");
_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"");
struct mallinfo m = mallinfo();
_Pragma("GCC diagnostic pop");
return (struct mallinfo2) {
.arena = m.arena,
.ordblks = m.ordblks,
.smblks = m.smblks,
.hblks = m.hblks,
.hblkhd = m.hblkhd,
.usmblks = 0,
.fsmblks = m.fsmblks,
.uordblks = m.uordblks,
.fordblks = m.fordblks,
.keepcost = m.keepcost,
};
}
#endif
@@ -6,11 +6,8 @@ import functools
# We only generate numbers for a dozen or so syscalls
SYSCALLS = [
'close_range', # defined in glibc header since glibc-2.33
'fchmodat2', # defined in glibc header since glibc-2.39
'mount_setattr', # defined in glibc header since glibc-2.34
'open_tree_attr',
'openat2', # defined in glibc header since glibc-2.32
'quotactl_fd', # defined in glibc header since glibc-2.35
'removexattrat',
'setxattrat',
-13
View File
@@ -1,13 +0,0 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
#include_next <sys/random.h> /* IWYU pragma: export */
#include <assert.h>
/* Defined since glibc-2.32. */
#ifndef GRND_INSECURE
# define GRND_INSECURE 0x0004
#else
static_assert(GRND_INSECURE == 0x0004, "");
#endif
-210
View File
@@ -54,76 +54,6 @@
# define missing_arch_template 1
# endif
#ifndef __IGNORE_close_range
# if defined(__aarch64__)
# define systemd_NR_close_range 436
# elif defined(__alpha__)
# define systemd_NR_close_range 546
# elif defined(__arc__) || defined(__tilegx__)
# define systemd_NR_close_range 436
# elif defined(__arm__)
# define systemd_NR_close_range 436
# elif defined(__i386__)
# define systemd_NR_close_range 436
# elif defined(__ia64__)
# define systemd_NR_close_range 1460
# elif defined(__loongarch_lp64)
# define systemd_NR_close_range 436
# elif defined(__m68k__)
# define systemd_NR_close_range 436
# elif defined(_MIPS_SIM)
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_close_range 4436
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_close_range 6436
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_close_range 5436
# else
# error "Unknown MIPS ABI"
# endif
# elif defined(__hppa__)
# define systemd_NR_close_range 436
# elif defined(__powerpc__)
# define systemd_NR_close_range 436
# elif defined(__riscv)
# if __riscv_xlen == 32
# define systemd_NR_close_range 436
# elif __riscv_xlen == 64
# define systemd_NR_close_range 436
# else
# error "Unknown RISC-V ABI"
# endif
# elif defined(__s390__)
# define systemd_NR_close_range 436
# elif defined(__sh__)
# define systemd_NR_close_range 436
# elif defined(__sparc__)
# define systemd_NR_close_range 436
# elif defined(__x86_64__)
# if defined(__ILP32__)
# define systemd_NR_close_range (436 | /* __X32_SYSCALL_BIT */ 0x40000000)
# else
# define systemd_NR_close_range 436
# endif
# elif !defined(missing_arch_template)
# warning "close_range() syscall number is unknown for your architecture"
# endif
/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
# if defined __NR_close_range && __NR_close_range >= 0
# if defined systemd_NR_close_range
static_assert(__NR_close_range == systemd_NR_close_range, "");
# endif
# else
# if defined __NR_close_range
# undef __NR_close_range
# endif
# if defined systemd_NR_close_range && systemd_NR_close_range >= 0
# define __NR_close_range systemd_NR_close_range
# endif
# endif
#endif
#ifndef __IGNORE_fchmodat2
# if defined(__aarch64__)
# define systemd_NR_fchmodat2 452
@@ -194,76 +124,6 @@ static_assert(__NR_fchmodat2 == systemd_NR_fchmodat2, "");
# endif
#endif
#ifndef __IGNORE_mount_setattr
# if defined(__aarch64__)
# define systemd_NR_mount_setattr 442
# elif defined(__alpha__)
# define systemd_NR_mount_setattr 552
# elif defined(__arc__) || defined(__tilegx__)
# define systemd_NR_mount_setattr 442
# elif defined(__arm__)
# define systemd_NR_mount_setattr 442
# elif defined(__i386__)
# define systemd_NR_mount_setattr 442
# elif defined(__ia64__)
# define systemd_NR_mount_setattr 1466
# elif defined(__loongarch_lp64)
# define systemd_NR_mount_setattr 442
# elif defined(__m68k__)
# define systemd_NR_mount_setattr 442
# elif defined(_MIPS_SIM)
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_mount_setattr 4442
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_mount_setattr 6442
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_mount_setattr 5442
# else
# error "Unknown MIPS ABI"
# endif
# elif defined(__hppa__)
# define systemd_NR_mount_setattr 442
# elif defined(__powerpc__)
# define systemd_NR_mount_setattr 442
# elif defined(__riscv)
# if __riscv_xlen == 32
# define systemd_NR_mount_setattr 442
# elif __riscv_xlen == 64
# define systemd_NR_mount_setattr 442
# else
# error "Unknown RISC-V ABI"
# endif
# elif defined(__s390__)
# define systemd_NR_mount_setattr 442
# elif defined(__sh__)
# define systemd_NR_mount_setattr 442
# elif defined(__sparc__)
# define systemd_NR_mount_setattr 442
# elif defined(__x86_64__)
# if defined(__ILP32__)
# define systemd_NR_mount_setattr (442 | /* __X32_SYSCALL_BIT */ 0x40000000)
# else
# define systemd_NR_mount_setattr 442
# endif
# elif !defined(missing_arch_template)
# warning "mount_setattr() syscall number is unknown for your architecture"
# endif
/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
# if defined __NR_mount_setattr && __NR_mount_setattr >= 0
# if defined systemd_NR_mount_setattr
static_assert(__NR_mount_setattr == systemd_NR_mount_setattr, "");
# endif
# else
# if defined __NR_mount_setattr
# undef __NR_mount_setattr
# endif
# if defined systemd_NR_mount_setattr && systemd_NR_mount_setattr >= 0
# define __NR_mount_setattr systemd_NR_mount_setattr
# endif
# endif
#endif
#ifndef __IGNORE_open_tree_attr
# if defined(__aarch64__)
# define systemd_NR_open_tree_attr 467
@@ -334,76 +194,6 @@ static_assert(__NR_open_tree_attr == systemd_NR_open_tree_attr, "");
# endif
#endif
#ifndef __IGNORE_openat2
# if defined(__aarch64__)
# define systemd_NR_openat2 437
# elif defined(__alpha__)
# define systemd_NR_openat2 547
# elif defined(__arc__) || defined(__tilegx__)
# define systemd_NR_openat2 437
# elif defined(__arm__)
# define systemd_NR_openat2 437
# elif defined(__i386__)
# define systemd_NR_openat2 437
# elif defined(__ia64__)
# define systemd_NR_openat2 1461
# elif defined(__loongarch_lp64)
# define systemd_NR_openat2 437
# elif defined(__m68k__)
# define systemd_NR_openat2 437
# elif defined(_MIPS_SIM)
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_openat2 4437
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_openat2 6437
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_openat2 5437
# else
# error "Unknown MIPS ABI"
# endif
# elif defined(__hppa__)
# define systemd_NR_openat2 437
# elif defined(__powerpc__)
# define systemd_NR_openat2 437
# elif defined(__riscv)
# if __riscv_xlen == 32
# define systemd_NR_openat2 437
# elif __riscv_xlen == 64
# define systemd_NR_openat2 437
# else
# error "Unknown RISC-V ABI"
# endif
# elif defined(__s390__)
# define systemd_NR_openat2 437
# elif defined(__sh__)
# define systemd_NR_openat2 437
# elif defined(__sparc__)
# define systemd_NR_openat2 437
# elif defined(__x86_64__)
# if defined(__ILP32__)
# define systemd_NR_openat2 (437 | /* __X32_SYSCALL_BIT */ 0x40000000)
# else
# define systemd_NR_openat2 437
# endif
# elif !defined(missing_arch_template)
# warning "openat2() syscall number is unknown for your architecture"
# endif
/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
# if defined __NR_openat2 && __NR_openat2 >= 0
# if defined systemd_NR_openat2
static_assert(__NR_openat2 == systemd_NR_openat2, "");
# endif
# else
# if defined __NR_openat2
# undef __NR_openat2
# endif
# if defined systemd_NR_openat2 && systemd_NR_openat2 >= 0
# define __NR_openat2 systemd_NR_openat2
# endif
# endif
#endif
#ifndef __IGNORE_quotactl_fd
# if defined(__aarch64__)
# define systemd_NR_quotactl_fd 443
-14
View File
@@ -3,20 +3,6 @@
#include_next <unistd.h> /* IWYU pragma: export */
/* Defined since glibc-2.34.
* Supported since kernel v5.9 (9b4feb630e8e9801603f3cab3a36369e3c1cf88d). */
#if !HAVE_CLOSE_RANGE
int missing_close_range(unsigned first_fd, unsigned end_fd, unsigned flags);
# define close_range missing_close_range
#endif
/* Defined since glibc-2.34.
* Supported since kernel v3.19 (51f39a1f0cea1cacf8c787f652f26dfee9611874). */
#if !HAVE_EXECVEAT
int missing_execveat(int dirfd, const char *pathname, char * const argv[], char * const envp[], int flags);
# define execveat missing_execveat
#endif
#if !HAVE_PIVOT_ROOT
int missing_pivot_root(const char *new_root, const char *put_old);
# define pivot_root missing_pivot_root
+1
View File
@@ -11,4 +11,5 @@ libc_wrapper_sources += files(
'stdio.c',
'stdlib.c',
'string.c',
'unistd.c',
)
+15
View File
@@ -0,0 +1,15 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <sys/syscall.h>
#include <unistd.h>
int missing_close_range(unsigned first_fd, unsigned end_fd, unsigned flags) {
/* Kernel-side the syscall expects fds as unsigned integers (just like close() actually), while
* userspace exclusively uses signed integers for fds. glibc chose to expose it 1:1 however, hence we
* do so here too, even if we end up passing signed fds to it most of the time. */
return syscall(__NR_close_range, first_fd, end_fd, flags);
}
int missing_execveat(int dirfd, const char *pathname, char * const argv[], char * const envp[], int flags) {
return syscall(__NR_execveat, dirfd, pathname, argv, envp, flags);
}
-15
View File
@@ -3,21 +3,6 @@
#include <sys/syscall.h>
#include <unistd.h>
#if !HAVE_CLOSE_RANGE
int missing_close_range(unsigned first_fd, unsigned end_fd, unsigned flags) {
/* Kernel-side the syscall expects fds as unsigned integers (just like close() actually), while
* userspace exclusively uses signed integers for fds. glibc chose to expose it 1:1 however, hence we
* do so here too, even if we end up passing signed fds to it most of the time. */
return syscall(__NR_close_range, first_fd, end_fd, flags);
}
#endif
#if !HAVE_EXECVEAT
int missing_execveat(int dirfd, const char *pathname, char * const argv[], char * const envp[], int flags) {
return syscall(__NR_execveat, dirfd, pathname, argv, envp, flags);
}
#endif
#if !HAVE_PIVOT_ROOT
int missing_pivot_root(const char *new_root, const char *put_old) {
return syscall(__NR_pivot_root, new_root, put_old);