]>
Commit | Line | Data |
---|---|---|
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 |