]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/unix/sysv/linux/kernel-features.h
Remove __ASSUME_STAT64_SYSCALL.
[thirdparty/glibc.git] / sysdeps / unix / sysv / linux / kernel-features.h
CommitLineData
958f238f
UD
1/* Set flags signalling availability of kernel features based on given
2 kernel version number.
b13b9885 3 Copyright (C) 1999-2009, 2010, 2011, 2012 Free Software Foundation, Inc.
958f238f
UD
4 This file is part of the GNU C Library.
5
6 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
958f238f
UD
10
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 14 Lesser General Public License for more details.
958f238f 15
41bdb6e2 16 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
17 License along with the GNU C Library; if not, see
18 <http://www.gnu.org/licenses/>. */
958f238f
UD
19
20/* This file must not contain any C code. At least it must be protected
21 to allow using the file also in assembler files. */
22
958f238f
UD
23#ifndef __LINUX_KERNEL_VERSION
24/* We assume the worst; all kernels should be supported. */
25# define __LINUX_KERNEL_VERSION 0
26#endif
27
28/* We assume for __LINUX_KERNEL_VERSION the same encoding used in
29 linux/version.h. I.e., the major, minor, and subminor all get a
30 byte with the major number being in the highest byte. This means
31 we can do numeric comparisons.
32
33 In the following we will define certain symbols depending on
34 whether the describes kernel feature is available in the kernel
35 version given by __LINUX_KERNEL_VERSION. We are not always exactly
36 recording the correct versions in which the features were
37 introduced. If somebody cares these values can afterwards be
ffb7875d 38 corrected. */
958f238f 39
eac10791 40/* The sendfile syscall was introduced in 2.2.0. */
ffb7875d 41#define __ASSUME_SENDFILE 1
f9d07577 42
21708942
JM
43/* Linux 2.3.39 introduced IPC64. Except for powerpc. Linux 2.4.0 on
44 PPC introduced a correct IPC64. But PowerPC64 does not support a
45 separate 64-bit syscall, already 64-bit. */
46#ifndef __powerpc64__
51a8c49d
RM
47# define __ASSUME_IPC64 1
48#endif
49
ec332e94 50/* The changed st_ino field appeared in 2.4.0-test6. However, SH is lame,
1e2e27fd 51 and still does not have a 64-bit inode field. */
ec332e94 52#ifndef __sh__
56ddf355
UD
53# define __ASSUME_ST_INO_64_BIT 1
54#endif
21f6a100 55
ec332e94
JM
56/* The getdents64 syscall was introduced in 2.4.0-test7 (but later for
57 MIPS n32). */
58#define __ASSUME_GETDENTS64_SYSCALL 1
846c6907 59
f3423d5a 60/* Beginning with 2.6.12 the clock and timer supports CPU clocks. */
6dad2c06 61#define __ASSUME_POSIX_CPU_TIMERS 1
f3423d5a 62
7aab07e4
JM
63/* The statfs64 syscalls are available in 2.5.74 (but not for alpha). */
64#define __ASSUME_STATFS64 1
c801e765 65
f4e0175f 66/* The utimes syscall has been available for some architectures
5085cd1f 67 forever. For x86 it was introduced after 2.5.75, for x86-64,
445f7ecd
JM
68 ppc, and ppc64 it was introduced in 2.6.0-test3, for s390 it was
69 introduced in 2.6.21-rc5. */
b13b9885 70#if defined __sparc__ \
7aab07e4 71 || defined __i386__ \
6dad2c06
JM
72 || defined __x86_64__ \
73 || defined __powerpc__ \
445f7ecd
JM
74 || defined __sh__ \
75 || (defined __s390__ && __LINUX_KERNEL_VERSION >= 0x020616)
82bae9f9
UD
76# define __ASSUME_UTIMES 1
77#endif
0cbc6c4e 78
22502ea2
UD
79/* pselect/ppoll were introduced just after 2.6.16-rc1. Due to the way
80 the kernel versions are advertised we can only rely on 2.6.17 to have
81 the code. On x86_64 and SH this appeared first in 2.6.19-rc1,
3155f066 82 on ia64 in 2.6.22-rc1. */
22502ea2 83#if __LINUX_KERNEL_VERSION >= 0x020611 \
b13b9885 84 && ((!defined __x86_64__ && !defined __sh__) \
22502ea2 85 || (__LINUX_KERNEL_VERSION >= 0x020613 \
b13b9885 86 && (defined __x86_64__ || defined __sh__)))
7c65e900 87# define __ASSUME_PSELECT 1
22502ea2 88# define __ASSUME_PPOLL 1
7c65e900
UD
89#endif
90
91/* The *at syscalls were introduced just after 2.6.16-rc1. Due to the way the
92 kernel versions are advertised we can only rely on 2.6.17 to have
3155f066
UD
93 the code. On PPC they were introduced in 2.6.17-rc1,
94 on SH in 2.6.19-rc1. */
22502ea2 95#if __LINUX_KERNEL_VERSION >= 0x020611 \
3155f066 96 && (!defined __sh__ || __LINUX_KERNEL_VERSION >= 0x020613)
7c65e900
UD
97# define __ASSUME_ATFCTS 1
98#endif
0f6699ea
UD
99
100/* Support for inter-process robust mutexes was added in 2.6.17. */
22502ea2 101#if __LINUX_KERNEL_VERSION >= 0x020611 \
3155f066 102 && (!defined __sh__ || __LINUX_KERNEL_VERSION >= 0x020613)
0f6699ea
UD
103# define __ASSUME_SET_ROBUST_LIST 1
104#endif
d5ba53f9 105
2dbe6afe
UD
106/* Pessimistically assume that 2.6.18 introduced real handling of
107 large numbers of requests to readv and writev and that we don't
108 need a fallback. It likely worked for much longer. */
109#if __LINUX_KERNEL_VERSION >= 0x020612
110# define __ASSUME_COMPLETE_READV_WRITEV 1
111#endif
112
d5ba53f9
UD
113/* Support for PI futexes was added in 2.6.18. */
114#if __LINUX_KERNEL_VERSION >= 0x020612
115# define __ASSUME_FUTEX_LOCK_PI 1
116#endif
c27d2078 117
3155f066 118/* Support for utimensat syscall was added in 2.6.22, on SH
22502ea2
UD
119 only after 2.6.22-rc1. */
120#if __LINUX_KERNEL_VERSION >= 0x020616 \
3155f066 121 && (!defined __sh__ || __LINUX_KERNEL_VERSION >= 0x020617)
c27d2078
UD
122# define __ASSUME_UTIMENSAT 1
123#endif
4f099bb5
UD
124
125/* Support for private futexes was added in 2.6.22. */
126#if __LINUX_KERNEL_VERSION >= 0x020616
127# define __ASSUME_PRIVATE_FUTEX 1
128#endif
c1bf9f14 129
22502ea2
UD
130/* Support for fallocate was added in 2.6.23, on s390
131 only after 2.6.23-rc1. */
132#if __LINUX_KERNEL_VERSION >= 0x020617 \
3155f066 133 && (!defined __s390__ || __LINUX_KERNEL_VERSION >= 0x020618)
c1bf9f14
UD
134# define __ASSUME_FALLOCATE 1
135#endif
ae18718f 136
46bc5d43
UD
137/* Support for various CLOEXEC and NONBLOCK flags was added for x86,
138 x86-64, PPC, IA-64, SPARC< and S390 in 2.6.23. */
139#if __LINUX_KERNEL_VERSION >= 0x020617 \
140 && (defined __i386__ || defined __x86_64__ || defined __powerpc__ \
b13b9885 141 || defined __sparc__ || defined __s390__)
46bc5d43
UD
142# define __ASSUME_O_CLOEXEC 1
143#endif
144
121dce05
JM
145/* From 2.6.23 onwards the value of ARG_MAX depends on the stack
146 size. */
147#define __LINUX_ARG_MAX_STACK_BASED_MIN_KERNEL 0x020617
148#if __LINUX_KERNEL_VERSION >= __LINUX_ARG_MAX_STACK_BASED_MIN_KERNEL
149# define __ASSUME_ARG_MAX_STACK_BASED 1
150#endif
151
ae18718f
UD
152/* Support for ADJ_OFFSET_SS_READ was added in 2.6.24. */
153#if __LINUX_KERNEL_VERSION >= 0x020618
154# define __ASSUME_ADJ_OFFSET_SS_READ 1
155#endif
0e077a7e 156
b5c0b5e4 157/* Support for various CLOEXEC and NONBLOCK flags was added for x86,
bdd24a30 158 x86-64, PPC, IA-64, and SPARC in 2.6.27. */
3ff2c948 159#if __LINUX_KERNEL_VERSION >= 0x02061b \
b5c0b5e4 160 && (defined __i386__ || defined __x86_64__ || defined __powerpc__ \
b13b9885 161 || defined __sparc__ || defined __s390__)
3ff2c948
UD
162# define __ASSUME_SOCK_CLOEXEC 1
163# define __ASSUME_IN_NONBLOCK 1
d6e0c2a6 164# define __ASSUME_PIPE2 1
aa7492d2
UD
165# define __ASSUME_EVENTFD2 1
166# define __ASSUME_SIGNALFD4 1
94b7cc37 167# define __ASSUME_DUP3 1
f93fc0b7
UD
168#endif
169
170/* Support for the accept4 syscall was added in 2.6.28. */
200da00a 171#if __LINUX_KERNEL_VERSION >= 0x02061c \
f93fc0b7 172 && (defined __i386__ || defined __x86_64__ || defined __powerpc__ \
3533b1a6 173 || defined __sparc__ || defined __s390__)
f93fc0b7 174# define __ASSUME_ACCEPT4 1
3ff2c948 175#endif
ebb2788e
UD
176
177/* Support for the FUTEX_CLOCK_REALTIME flag was added in 2.6.29. */
7dd650d7 178#if __LINUX_KERNEL_VERSION >= 0x02061d
ebb2788e
UD
179# define __ASSUME_FUTEX_CLOCK_REALTIME 1
180#endif
e109c612 181
4300afc1
UD
182/* Support for the AT_RANDOM auxiliary vector entry was added in 2.6.29. */
183#if __LINUX_KERNEL_VERSION >= 0x02061d
184# define __ASSUME_AT_RANDOM 1
185#endif
186
e109c612 187/* Support for preadv and pwritev was added in 2.6.30. */
11cad88c 188#if __LINUX_KERNEL_VERSION >= 0x02061e
e109c612
UD
189# define __ASSUME_PREADV 1
190# define __ASSUME_PWRITEV 1
191#endif
81c84bd9
UD
192
193/* Support for F_GETOWN_EX was introduced in 2.6.32. */
194#if __LINUX_KERNEL_VERSION >= 0x020620
195# define __ASSUME_F_GETOWN_EX 1
196#endif
3d04ff3a
AS
197
198/* Support for the recvmmsg syscall was added in 2.6.33. */
199#if __LINUX_KERNEL_VERSION >= 0x020621
200# define __ASSUME_RECVMMSG 1
201#endif
3cdaa6ad
UD
202
203/* statfs fills in f_flags since 2.6.36. */
204#if __LINUX_KERNEL_VERSION >= 0x020624
205# define __ASSUME_STATFS_F_FLAGS 1
206#endif
5bd6dc5c
UD
207
208/* prlimit64 is available in 2.6.36. */
209#if __LINUX_KERNEL_VERSION >= 0x020624
210# define __ASSUME_PRLIMIT64 1
211#endif
f1f929d7
UD
212
213/* sendmmsg is available in 2.6.39. */
214#if __LINUX_KERNEL_VERSION >= 0x020627
215# define __ASSUME_SENDMMSG 1
216#endif
ef606249
UD
217
218/* getcpu is a syscall for x86-64 since 3.1. */
219#if defined __x86_64__ && __LINUX_KERNEL_VERSION >= 0x030100
220# define __ASSUME_GETCPU_SYSCALL 1
221#endif