summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-05-14 00:45:19 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-05-14 00:45:19 +0000
commit5e7698c6f152c93a73ee4140ad23f7171aa79ce0 (patch)
tree8702ebc04518d9cec8696f87eaf4a71cdacbf8e8 /sysdeps/unix/sysv
parent5c521ecddae40d0f9b263a0260d3da29f5a63d75 (diff)
downloadglibc-5e7698c6f152c93a73ee4140ad23f7171aa79ce0.tar.gz
Reduce kernel-features.h duplication.
This patch reduces duplication between different architectures' kernel-features.h files by making the architecture-independent file define various macros unconditionally (instead of only for a particular list of architectures), with the architecture-specific files then undefining the macros if necessary. Specifically, __ASSUME_O_CLOEXEC (O_CLOEXEC flag to open) and __ASSUME_SOCK_CLOEXEC (SOCK_NONBLOCK and SOCK_CLOEXEC flags to socket) are supported on all architectures as of 2.6.32 or the minimum kernel version for the architecture if later. For __ASSUME_IN_NONBLOCK, __ASSUME_PIPE2, __ASSUME_EVENTFD2, __ASSUME_SIGNALFD4 and __ASSUME_DUP3, the relevant syscalls were added for alpha in 2.6.33 but otherwise the features are available as of 2.6.32. For __ASSUME_UTIMES, support is everywhere in 2.6.32 except for asm-generic architectures and hppa. Although those were the main cases of duplication among kernel-features.h files, some other cases of unnecessary definitions were also cleaned up: the hppa file defined various macros that were either no longer used at all, or defined by the main file by default anyway, the ia64 file had duplicative definitions of __ASSUME_PSELECT and __ASSUME_PPOLL, while mips had such a definition of __ASSUME_IPC64. Really, rather than being defined in the main file then undefined for asm-generic architectures, __ASSUME_UTIMES should become an hppa-specific macro. Given that __ASSUME_ATFCTS and __ASSUME_UTIMENSAT are now always true, the only live __ASSUME_UTIMES conditional is in sysdeps/unix/sysv/linux/utimes.c, which is not used for asm-generic architectures. I think the desired state would be an hppa-specific file (that includes sysdeps/unix/sysv/linux/utimes.c if __ASSUME_UTIMES, and otherwise has fallback code), with the fallback code being removed from the main utimes.c. But I think that's most reasonably a separate cleanup once __ASSUME_ATFCTS and __ASSUME_UTIMESAT have both had conditional code cleaned up. Given this patch, I think it's straightforward to move non-ex-ports architectures to having their own kernel-features.h files, like ex-ports architectures, rather than conditionals in the main file (i.e., such a move won't require the architecture-specific file to contain anything that isn't genuinely architecture-specific), and would encourage architecture maintainers to do so. Tested x86_64 that the installed shared libraries are unchanged by this patch. Note that on some architectures this *will* cause __ASSUME_* macros to be defined in cases where they weren't previously but should have been (but this is just optimization, not a fix to a user-visible bug, so doesn't need a bug report in Bugzilla). * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_UTIMES): Define unconditionally. (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_IN_NONBLOCK): Likewise. (__ASSUME_PIPE2): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. (__ASSUME_DUP3): Likewise. * sysdeps/unix/sysv/linux/aarch64/kernel-features.h (__ASSUME_DUP3): Do not define. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_IN_NONBLOCK): Likewise. (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_PIPE2): Likewise. (__ASSUME_SIGNALFD4): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_UTIMES): Undefine. * sysdeps/unix/sysv/linux/alpha/kernel-features.h (__ASSUME_UTIMES): Do not define. (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_IN_NONBLOCK): Undefine if [__LINUX_KERNEL_VERSION < 0x020621] instead of defining if [__LINUX_KERNEL_VERSION >= 0x020621]. (__ASSUME_PIPE2): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. [__LINUX_KERNEL_VERSION < 0x020621] (__ASSUME_DUP3): Undefine. * sysdeps/unix/sysv/linux/arm/kernel-features.h (__ASSUME_UTIMES): Do not define. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. * sysdeps/unix/sysv/linux/hppa/kernel-features.h (__ASSUME_32BITUIDS): Likewise. (__ASSUME_TRUNCATE64_SYSCALL): Likewise. (__ASSUME_IPC64): Likewise. (__ASSUME_ST_INO_64_BIT): Likewise. (__ASSUME_GETDENTS64_SYSCALL): Likewise. [__LINUX_KERNEL_VERSION < 0x030e00] (__ASSUME_UTIMES): Undefine. * sysdeps/unix/sysv/linux/ia64/kernel-features.h (__ASSUME_UTIMES): Do not define. (__ASSUME_PSELECT): Likewise. (__ASSUME_PPOLL): Likewise. (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_IN_NONBLOCK): Likewise. (__ASSUME_PIPE2): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. (__ASSUME_DUP3): Likewise. * sysdeps/unix/sysv/linux/m68k/kernel-features.h (__ASSUME_UTIMES): Likewise. (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_IN_NONBLOCK): Likewise. (__ASSUME_PIPE2): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. (__ASSUME_DUP3): Likewise. * sysdeps/unix/sysv/linux/microblaze/kernel-features.h (__ASSUME_UTIMES): Likewise. (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_IN_NONBLOCK): Likewise. (__ASSUME_PIPE2): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. (__ASSUME_DUP3): Likewise. * sysdeps/unix/sysv/linux/mips/kernel-features.h (__ASSUME_IPC64): Likewise. (__ASSUME_UTIMES): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. * sysdeps/unix/sysv/linux/tile/kernel-features.h (__ASSUME_O_CLOEXEC): Likewise. (__ASSUME_SOCK_CLOEXEC): Likewise. (__ASSUME_IN_NONBLOCK): Likewise. (__ASSUME_PIPE2): Likewise. (__ASSUME_EVENTFD2): Likewise. (__ASSUME_SIGNALFD4): Likewise. (__ASSUME_DUP3): Likewise. (__ASSUME_UTIMES): Undefine.
Diffstat (limited to 'sysdeps/unix/sysv')
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/kernel-features.h10
-rw-r--r--sysdeps/unix/sysv/linux/alpha/kernel-features.h27
-rw-r--r--sysdeps/unix/sysv/linux/arm/kernel-features.h7
-rw-r--r--sysdeps/unix/sysv/linux/hppa/kernel-features.h14
-rw-r--r--sysdeps/unix/sysv/linux/ia64/kernel-features.h19
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h37
-rw-r--r--sysdeps/unix/sysv/linux/m68k/kernel-features.h14
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/kernel-features.h10
-rw-r--r--sysdeps/unix/sysv/linux/mips/kernel-features.h10
-rw-r--r--sysdeps/unix/sysv/linux/tile/kernel-features.h10
10 files changed, 29 insertions, 129 deletions
diff --git a/sysdeps/unix/sysv/linux/aarch64/kernel-features.h b/sysdeps/unix/sysv/linux/aarch64/kernel-features.h
index 53039f9316..bd94fe1c79 100644
--- a/sysdeps/unix/sysv/linux/aarch64/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/aarch64/kernel-features.h
@@ -25,14 +25,10 @@
features. */
#define __ASSUME_ACCEPT4_SYSCALL 1
-#define __ASSUME_DUP3 1
-#define __ASSUME_EVENTFD2 1
-#define __ASSUME_IN_NONBLOCK 1
-#define __ASSUME_O_CLOEXEC 1
-#define __ASSUME_PIPE2 1
#define __ASSUME_RECVMMSG_SYSCALL 1
#define __ASSUME_SENDMMSG_SYSCALL 1
-#define __ASSUME_SIGNALFD4 1
-#define __ASSUME_SOCK_CLOEXEC 1
#include_next <kernel-features.h>
+
+/* asm-generic architectures do not have the utimes syscall. */
+#undef __ASSUME_UTIMES
diff --git a/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
index 2e3fc7da39..bea70577f4 100644
--- a/sysdeps/unix/sysv/linux/alpha/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
@@ -20,26 +20,6 @@
#ifndef _KERNEL_FEATURES_H
#define _KERNEL_FEATURES_H 1
-#define __ASSUME_UTIMES 1
-
-/* Support for the O_CLOEXEC flag was added for alpha in 2.6.23. */
-#define __ASSUME_O_CLOEXEC 1
-
-/* Support for various CLOEXEC and NONBLOCK flags was added for alpha after
- 2.6.33-rc1. */
-#if __LINUX_KERNEL_VERSION >= 0x020621
-# define __ASSUME_SOCK_CLOEXEC 1
-# define __ASSUME_IN_NONBLOCK 1
-#endif
-
-/* Support for the pipe2, eventfd2, signalfd4 syscalls was added for alpha
- after 2.6.33-rc1. */
-#if __LINUX_KERNEL_VERSION >= 0x020621
-# define __ASSUME_PIPE2 1
-# define __ASSUME_EVENTFD2 1
-# define __ASSUME_SIGNALFD4 1
-#endif
-
/* Support for recvmmsg was added for alpha in 2.6.33. */
#if __LINUX_KERNEL_VERSION >= 0x020621
# define __ASSUME_RECVMMSG_SYSCALL 1
@@ -67,10 +47,15 @@
/* Support for fsyncdata was added for alpha after 2.6.21. */
#define __ASSUME_FDATASYNC 1
-/* Support for preadv and pwritev was added for alpha in 2.6.33. */
+/* Support for various syscalls was added for alpha in 2.6.33. */
#if __LINUX_KERNEL_VERSION < 0x020621
# undef __ASSUME_PREADV
# undef __ASSUME_PWRITEV
+# undef __ASSUME_IN_NONBLOCK
+# undef __ASSUME_PIPE2
+# undef __ASSUME_EVENTFD2
+# undef __ASSUME_SIGNALFD4
+# undef __ASSUME_DUP3
#endif
#endif /* _KERNEL_FEATURES_H */
diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h
index ce0f03ed89..354f2ca2d2 100644
--- a/sysdeps/unix/sysv/linux/arm/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h
@@ -17,16 +17,9 @@
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
-/* The utimes syscall was added before 2.6.1. */
-#define __ASSUME_UTIMES 1
-
/* The signal frame layout changed in 2.6.18. */
#define __ASSUME_SIGFRAME_V2 1
-/* Support for the eventfd2 and signalfd4 syscalls was added in 2.6.27. */
-#define __ASSUME_EVENTFD2 1
-#define __ASSUME_SIGNALFD4 1
-
/* Support for the recvmmsg syscall was added in 2.6.33. */
#if __LINUX_KERNEL_VERSION >= 0x020621
# define __ASSUME_RECVMMSG_SYSCALL 1
diff --git a/sysdeps/unix/sysv/linux/hppa/kernel-features.h b/sysdeps/unix/sysv/linux/hppa/kernel-features.h
index e869c14bdd..25c3e36600 100644
--- a/sysdeps/unix/sysv/linux/hppa/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/hppa/kernel-features.h
@@ -18,15 +18,6 @@
<http://www.gnu.org/licenses/>. */
-/* There are an infinite number of PA-RISC kernel versions numbered
- 2.4.0. But they've not really been released as such. We require
- and expect the final version here. */
-#define __ASSUME_32BITUIDS 1
-#define __ASSUME_TRUNCATE64_SYSCALL 1
-#define __ASSUME_IPC64 1
-#define __ASSUME_ST_INO_64_BIT 1
-#define __ASSUME_GETDENTS64_SYSCALL 1
-
/* PA-RISC 2.6.9 kernels had the first LWS CAS support */
#define __ASSUME_LWS_CAS 1
@@ -42,3 +33,8 @@
#endif
#include_next <kernel-features.h>
+
+/* hppa did not get the utimes syscall until 3.14. */
+#if __LINUX_KERNEL_VERSION < 0x030e00
+# undef __ASSUME_UTIMES
+#endif
diff --git a/sysdeps/unix/sysv/linux/ia64/kernel-features.h b/sysdeps/unix/sysv/linux/ia64/kernel-features.h
index 471fb88a71..c32789bcc6 100644
--- a/sysdeps/unix/sysv/linux/ia64/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/ia64/kernel-features.h
@@ -20,25 +20,6 @@
#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. */
-#define __ASSUME_PSELECT 1
-#define __ASSUME_PPOLL 1
-
-/* Support for various CLOEXEC and NONBLOCK flags was added in 2.6.23. */
-#define __ASSUME_O_CLOEXEC 1
-
-/* Support for various CLOEXEC and NONBLOCK flags was added in 2.6.27. */
-#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
-
/* Support for the recvmmsg syscall was added in 2.6.33. */
#if __LINUX_KERNEL_VERSION >= 0x020621
# define __ASSUME_RECVMMSG_SYSCALL 1
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 46e16f6e82..026f89fbc5 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -76,14 +76,7 @@
forever. For x86 it was introduced after 2.5.75, for x86-64,
ppc, and ppc64 it was introduced in 2.6.0-test3, for s390 it was
introduced in 2.6.21-rc5. */
-#if defined __sparc__ \
- || defined __i386__ \
- || defined __x86_64__ \
- || defined __powerpc__ \
- || defined __sh__ \
- || defined __s390__
-# define __ASSUME_UTIMES 1
-#endif
+#define __ASSUME_UTIMES 1
/* pselect/ppoll were introduced just after 2.6.16-rc1. On x86_64 and
SH this appeared first in 2.6.19-rc1, on ia64 in 2.6.22-rc1. */
@@ -123,27 +116,21 @@
only after 2.6.23-rc1. */
#define __ASSUME_FALLOCATE 1
-/* Support for various CLOEXEC and NONBLOCK flags was added for x86,
- x86-64, PPC, IA-64, SPARC< and S390 in 2.6.23. */
-#if (defined __i386__ || defined __x86_64__ || defined __powerpc__ \
- || defined __sparc__ || defined __s390__)
-# define __ASSUME_O_CLOEXEC 1
-#endif
+/* Support for various CLOEXEC and NONBLOCK flags was added in
+ 2.6.23. */
+#define __ASSUME_O_CLOEXEC 1
/* Support for ADJ_OFFSET_SS_READ was added in 2.6.24. */
#define __ASSUME_ADJ_OFFSET_SS_READ 1
-/* Support for various CLOEXEC and NONBLOCK flags was added for x86,
- x86-64, PPC, IA-64, and SPARC in 2.6.27. */
-#if (defined __i386__ || defined __x86_64__ || defined __powerpc__ \
- || defined __sparc__ || defined __s390__)
-# 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 various CLOEXEC and NONBLOCK flags was added in
+ 2.6.27. */
+#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
/* Support for accept4 functionality was added in 2.6.28, but for some
architectures using a separate syscall rather than socketcall that
diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
index e47fd3b22e..03bcadb285 100644
--- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
@@ -20,20 +20,6 @@
/* m68k uses socketcall. */
#define __ASSUME_SOCKETCALL 1
-/* Many syscalls were added in 2.6.10 for m68k. */
-#define __ASSUME_UTIMES 1
-
-/* Support for various CLOEXEC and NONBLOCK flags was added 2.6.23. */
-#define __ASSUME_O_CLOEXEC 1
-
-/* Support for various CLOEXEC and NONBLOCK flags was added in 2.6.27. */
-#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
-
#include_next <kernel-features.h>
/* These syscalls were added only in 3.0 for m68k. */
diff --git a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
index c7c8c030bd..066c12dd4a 100644
--- a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
@@ -19,16 +19,6 @@
/* MicroBlaze uses socketcall. */
#define __ASSUME_SOCKETCALL 1
-/* MicroBlaze glibc support starts with 2.6.30, guaranteeing many kernel features. */
-#define __ASSUME_UTIMES 1
-#define __ASSUME_O_CLOEXEC 1
-#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
-
/* Support for the accept4 and recvmmsg syscalls was added in 2.6.33. */
#if __LINUX_KERNEL_VERSION >= 0x020621
# define __ASSUME_ACCEPT4_SYSCALL 1
diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h
index a1ebf792f9..b53118d7c6 100644
--- a/sysdeps/unix/sysv/linux/mips/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h
@@ -19,16 +19,6 @@
#include <sgidefs.h>
-/* MIPS platforms had IPC64 all along. */
-#define __ASSUME_IPC64 1
-
-/* MIPS had the utimes syscall by 2.6.0. */
-#define __ASSUME_UTIMES 1
-
-/* Support for the eventfd2 and signalfd4 syscalls was added in 2.6.27. */
-#define __ASSUME_EVENTFD2 1
-#define __ASSUME_SIGNALFD4 1
-
/* Support for the accept4 syscall was added in 2.6.31. */
#define __ASSUME_ACCEPT4_SYSCALL 1
diff --git a/sysdeps/unix/sysv/linux/tile/kernel-features.h b/sysdeps/unix/sysv/linux/tile/kernel-features.h
index b028152d43..78aacac8cc 100644
--- a/sysdeps/unix/sysv/linux/tile/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/tile/kernel-features.h
@@ -18,14 +18,7 @@
/* TILE glibc support starts with 2.6.36, guaranteeing many kernel features. */
-#define __ASSUME_O_CLOEXEC 1
-#define __ASSUME_SOCK_CLOEXEC 1
-#define __ASSUME_IN_NONBLOCK 1
-#define __ASSUME_PIPE2 1
-#define __ASSUME_EVENTFD2 1
-#define __ASSUME_SIGNALFD4 1
#define __ASSUME_ACCEPT4_SYSCALL 1
-#define __ASSUME_DUP3 1
#define __ASSUME_RECVMMSG_SYSCALL 1
/* Support for the sendmmsg syscall was added in 3.0. */
@@ -35,6 +28,9 @@
#include_next <kernel-features.h>
+/* asm-generic architectures do not have the utimes syscall. */
+#undef __ASSUME_UTIMES
+
/* Define this if your 32-bit syscall API requires 64-bit register
pairs to start with an even-number register. */
#define __ASSUME_ALIGNED_REGISTER_PAIRS 1