mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-12 06:10:10 +00:00
0e31b18ca2
Similar to the issues for accept4, __ASSUME_RECVMMSG is also confused about whether it relates to function availability or socketcall operation availability; this is now bug 16610. Nothing actually tests __ASSUME_RECVMMSG for function availability, but implicit in the definition in kernel-features.h is the idea that it makes sense when the syscall is available and socketcall is not being used. As with accept4, there are architectures where the syscall was added later than the socketcall operation, meaning that assuming glibc is built with recent enough kernel headers, it does not attempt to use socketcall for these operations and __ASSUME_RECVMMSG gets defined for kernels >= 2.6.33 even when the syscall was only added later. This patch splits the macro into separate macros like those used for accept4; having similar macro structure in both cases (and for sendmmsg once I've dealt with that) seems likely to be less confusing than having a different structure on the basis of nothing actually needing to assume the recvmmsg function works. Appropriate definitions are added for all architectures. Architecture-specific note: Tile's kernel-features.h says "TILE glibc support starts with 2.6.36", which is accurate in that 2.6.36 was the first kernel version with Tile support, and on that basis I've made that header define __ASSUME_RECVMMSG_SYSCALL unconditionally. However, Tile's configure.ac has arch_minimum_kernel=2.6.32. Since arch_minimum_kernel is meant to reflect only kernel.org kernel versions, I think that should change to 2.6.36. (If using glibc with kernel versions from before a port went in kernel.org, it's your responsibility to change arch_minimum_kernel in a local patch, and at the same time to adjust any __ASSUME_* definitions that may not be correct for your older kernel; for developing the official glibc it should only ever be necessary to consider what official kernel.org releases support.) Tested x86_64, including that disassembly of the installed shared libraries is unchanged by this patch. [BZ #16610] * sysdeps/unix/sysv/linux/kernel-features.h [__LINUX_KERNEL_VERSION >= 0x020621 && __ASSUME_SOCKETCALL] (__ASSUME_RECVMMSG_SOCKETCALL): Define. [(__LINUX_KERNEL_VERSION >= 0x020621 && (__i386__ || __x86_64__ || __sparc__)) || (__LINUX_KERNEL_VERSION >= 0x020625 && (__powerpc__ || __sh__))] (__ASSUME_RECVMMSG_SYSCALL): Likewise. [__i386__ || __sparc__] (__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL): Likewise. [__ASSUME_RECVMMSG_SOCKETCALL || __ASSUME_RECVMMSG_SYSCALL] (__ASSUME_RECVMMSG): Define instead of using previous [__LINUX_KERNEL_VERSION >= 0x020621] condition. * sysdeps/unix/sysv/linux/aarch64/kernel-features.h (__ASSUME_RECVMMSG_SYSCALL): Define. * sysdeps/unix/sysv/linux/alpha/kernel-features.h [__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL): Likewise. * sysdeps/unix/sysv/linux/arm/kernel-features.h [__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL): Likewise. * sysdeps/unix/sysv/linux/ia64/kernel-features.h [__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL): Likewise. * sysdeps/unix/sysv/linux/internal_recvmmsg.S [__ASSUME_SOCKETCALL && !__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL && !__ASSUME_RECVMMSG_SYSCALL] (__NR_recvmmsg): Undefine. [__ASSUME_RECVMMSG]: Change condition to [__ASSUME_RECVMMSG_SOCKETCALL]. * sysdeps/unix/sysv/linux/microblaze/kernel-features.h [__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL): Define. (__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL): Likewise. * sysdeps/unix/sysv/linux/mips/kernel-features.h [__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL): Likewise. * sysdeps/unix/sysv/linux/recvmmsg.c [__ASSUME_SOCKETCALL && !__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL && !__ASSUME_RECVMMSG_SYSCALL] (__NR_recvmmsg): Undefine. [!__ASSUME_RECVMMSG]: Change condition to [!__ASSUME_RECVMMSG_SOCKETCALL]. * sysdeps/unix/sysv/linux/tile/kernel-features.h (__ASSUME_RECVMMSG_SYSCALL): Define. * sysdeps/unix/sysv/linux/hppa/kernel-features.h [__LINUX_KERNEL_VERSION >= 0x020622] (__ASSUME_RECVMMSG_SYSCALL): Define.
63 lines
2.1 KiB
C
63 lines
2.1 KiB
C
/* Set flags signalling availability of kernel features based on given
|
|
kernel version number.
|
|
Copyright (C) 2010-2014 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
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef _KERNEL_FEATURES_H
|
|
#define _KERNEL_FEATURES_H 1
|
|
|
|
/* The utimes syscall has been available for some architectures
|
|
forever. */
|
|
#define __ASSUME_UTIMES 1
|
|
|
|
/* pselect/ppoll were introduced just after 2.6.16-rc1. Due to the way
|
|
the kernel versions are advertised we can only rely on 2.6.17 to have
|
|
the code. */
|
|
#if __LINUX_KERNEL_VERSION >= 0x020616
|
|
# define __ASSUME_PSELECT 1
|
|
# define __ASSUME_PPOLL 1
|
|
#endif
|
|
|
|
/* Support for various CLOEXEC and NONBLOCK flags was added in 2.6.23. */
|
|
#if __LINUX_KERNEL_VERSION >= 0x020617
|
|
# define __ASSUME_O_CLOEXEC 1
|
|
#endif
|
|
|
|
/* Support for various CLOEXEC and NONBLOCK flags was added in 2.6.27. */
|
|
#if __LINUX_KERNEL_VERSION >= 0x02061b
|
|
# define __ASSUME_SOCK_CLOEXEC 1
|
|
# define __ASSUME_IN_NONBLOCK 1
|
|
# define __ASSUME_PIPE2 1
|
|
# define __ASSUME_EVENTFD2 1
|
|
# define __ASSUME_SIGNALFD4 1
|
|
# define __ASSUME_DUP3 1
|
|
#endif
|
|
|
|
/* Support for the recvmmsg syscall was added in 2.6.33. */
|
|
#if __LINUX_KERNEL_VERSION >= 0x020621
|
|
# define __ASSUME_RECVMMSG_SYSCALL 1
|
|
#endif
|
|
|
|
/* Support for the accept4 syscall was added in 3.3. */
|
|
#if __LINUX_KERNEL_VERSION >= 0x030300
|
|
# define __ASSUME_ACCEPT4_SYSCALL 1
|
|
#endif
|
|
|
|
#include_next <kernel-features.h>
|
|
|
|
#endif /* _KERNEL_FEATURES_H */
|