]>
Commit | Line | Data |
---|---|---|
958f238f UD |
1 | /* Set flags signalling availability of kernel features based on given |
2 | kernel version number. | |
463ed2f0 | 3 | Copyright (C) 1999-2009, 2010 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 AJ |
16 | You should have received a copy of the GNU Lesser General Public |
17 | License along with the GNU C Library; if not, write to the Free | |
18 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | |
19 | 02111-1307 USA. */ | |
958f238f UD |
20 | |
21 | /* This file must not contain any C code. At least it must be protected | |
22 | to allow using the file also in assembler files. */ | |
23 | ||
958f238f UD |
24 | #ifndef __LINUX_KERNEL_VERSION |
25 | /* We assume the worst; all kernels should be supported. */ | |
26 | # define __LINUX_KERNEL_VERSION 0 | |
27 | #endif | |
28 | ||
29 | /* We assume for __LINUX_KERNEL_VERSION the same encoding used in | |
30 | linux/version.h. I.e., the major, minor, and subminor all get a | |
31 | byte with the major number being in the highest byte. This means | |
32 | we can do numeric comparisons. | |
33 | ||
34 | In the following we will define certain symbols depending on | |
35 | whether the describes kernel feature is available in the kernel | |
36 | version given by __LINUX_KERNEL_VERSION. We are not always exactly | |
37 | recording the correct versions in which the features were | |
38 | introduced. If somebody cares these values can afterwards be | |
39 | corrected. Most of the numbers here are set corresponding to | |
40 | 2.2.0. */ | |
41 | ||
42 | /* `getcwd' system call. */ | |
43 | #if __LINUX_KERNEL_VERSION >= 131584 | |
44 | # define __ASSUME_GETCWD_SYSCALL 1 | |
45 | #endif | |
46 | ||
47 | /* Real-time signal became usable in 2.1.70. */ | |
48 | #if __LINUX_KERNEL_VERSION >= 131398 | |
49 | # define __ASSUME_REALTIME_SIGNALS 1 | |
50 | #endif | |
51 | ||
52 | /* When were the `pread'/`pwrite' syscalls introduced? */ | |
53 | #if __LINUX_KERNEL_VERSION >= 131584 | |
54 | # define __ASSUME_PREAD_SYSCALL 1 | |
55 | # define __ASSUME_PWRITE_SYSCALL 1 | |
56 | #endif | |
57 | ||
58 | /* When was `poll' introduced? */ | |
59 | #if __LINUX_KERNEL_VERSION >= 131584 | |
60 | # define __ASSUME_POLL_SYSCALL 1 | |
61 | #endif | |
62 | ||
63 | /* The `lchown' syscall was introduced in 2.1.80. */ | |
64 | #if __LINUX_KERNEL_VERSION >= 131408 | |
65 | # define __ASSUME_LCHOWN_SYSCALL 1 | |
66 | #endif | |
67 | ||
463ed2f0 | 68 | /* When did the `setresuid' syscall became available? */ |
0482576e | 69 | #if __LINUX_KERNEL_VERSION >= 131584 && !defined __sparc__ |
958f238f UD |
70 | # define __ASSUME_SETRESUID_SYSCALL 1 |
71 | #endif | |
9a8fcca0 UD |
72 | |
73 | /* The SIOCGIFNAME ioctl is available starting with 2.1.50. */ | |
74 | #if __LINUX_KERNEL_VERSION >= 131408 | |
75 | # define __ASSUME_SIOCGIFNAME 1 | |
76 | #endif | |
ecda4bda | 77 | |
ea9c93cc UD |
78 | /* MSG_NOSIGNAL was at least available with Linux 2.2.0. */ |
79 | #if __LINUX_KERNEL_VERSION >= 131584 | |
790aa1f2 UD |
80 | # define __ASSUME_MSG_NOSIGNAL 1 |
81 | #endif | |
82 | ||
eac10791 UD |
83 | /* The sendfile syscall was introduced in 2.2.0. */ |
84 | #if __LINUX_KERNEL_VERSION >= 131584 | |
85 | # define __ASSUME_SENDFILE 1 | |
86 | #endif | |
87 | ||
f9d07577 UD |
88 | /* Only very old kernels had no real symlinks for terminal descriptors |
89 | in /proc/self/fd. */ | |
90 | #if __LINUX_KERNEL_VERSION >= 131584 | |
91 | # define __ASSUME_PROC_SELF_FD_SYMLINK 1 | |
92 | #endif | |
93 | ||
ecda4bda UD |
94 | /* On x86 another `getrlimit' syscall was added in 2.3.25. */ |
95 | #if __LINUX_KERNEL_VERSION >= 131865 && defined __i386__ | |
96 | # define __ASSUME_NEW_GETRLIMIT_SYSCALL 1 | |
97 | #endif | |
d587d83b UD |
98 | |
99 | /* On x86 the truncate64/ftruncate64 syscalls were introduced in 2.3.31. */ | |
100 | #if __LINUX_KERNEL_VERSION >= 131871 && defined __i386__ | |
101 | # define __ASSUME_TRUNCATE64_SYSCALL 1 | |
102 | #endif | |
103 | ||
63a34b0f | 104 | /* On x86 the mmap2 syscall was introduced in 2.3.31. */ |
d587d83b UD |
105 | #if __LINUX_KERNEL_VERSION >= 131871 && defined __i386__ |
106 | # define __ASSUME_MMAP2_SYSCALL 1 | |
107 | #endif | |
63a34b0f UD |
108 | |
109 | /* On x86 the stat64/lstat64/fstat64 syscalls were introduced in 2.3.34. */ | |
110 | #if __LINUX_KERNEL_VERSION >= 131874 && defined __i386__ | |
111 | # define __ASSUME_STAT64_SYSCALL 1 | |
112 | #endif | |
29332175 | 113 | |
cd277b2d | 114 | /* On sparc the truncate64/ftruncate64/mmap2/stat64/lstat64/fstat64 |
29332175 | 115 | syscalls were introduced in 2.3.35. */ |
49783c67 | 116 | #if __LINUX_KERNEL_VERSION >= 131875 \ |
cd277b2d | 117 | && (defined __sparc__ && !defined __arch64__) |
29332175 UD |
118 | # define __ASSUME_TRUNCATE64_SYSCALL 1 |
119 | # define __ASSUME_MMAP2_SYSCALL 1 | |
120 | # define __ASSUME_STAT64_SYSCALL 1 | |
121 | #endif | |
313fed01 | 122 | |
51a8c49d | 123 | /* I know for sure that getrlimit are in 2.3.35 on powerpc. */ |
053cc7bb | 124 | #if __LINUX_KERNEL_VERSION >= 131875 && defined __powerpc__ |
51a8c49d RM |
125 | # define __ASSUME_NEW_GETRLIMIT_SYSCALL 1 |
126 | #endif | |
127 | ||
330fad29 | 128 | /* I know for sure that these are in 2.3.35 on powerpc. But PowerPC64 does not |
463ed2f0 | 129 | support separate 64-bit syscalls, already 64-bit. */ |
51a8c49d RM |
130 | #if __LINUX_KERNEL_VERSION >= 131875 && defined __powerpc__ \ |
131 | && !defined __powerpc64__ | |
053cc7bb GK |
132 | # define __ASSUME_TRUNCATE64_SYSCALL 1 |
133 | # define __ASSUME_STAT64_SYSCALL 1 | |
053cc7bb GK |
134 | #endif |
135 | ||
51a8c49d | 136 | /* Linux 2.3.39 introduced 32bit UID/GIDs. Some platforms had 32 |
a0386a0d | 137 | bit type all along. */ |
0d5cb2c7 | 138 | #if __LINUX_KERNEL_VERSION >= 131879 || defined __powerpc__ |
313fed01 UD |
139 | # define __ASSUME_32BITUIDS 1 |
140 | #endif | |
a074fa3c | 141 | |
51a8c49d RM |
142 | /* Linux 2.3.39 sparc added setresuid. */ |
143 | #if __LINUX_KERNEL_VERSION >= 131879 && defined __sparc__ | |
330fad29 | 144 | # define __ASSUME_SETRESUID_SYSCALL 1 |
51a8c49d RM |
145 | #endif |
146 | ||
54c92465 UD |
147 | #if __LINUX_KERNEL_VERSION >= 131879 |
148 | # define __ASSUME_SETRESGID_SYSCALL 1 | |
149 | #endif | |
150 | ||
51a8c49d RM |
151 | /* Linux 2.3.39 introduced IPC64. Except for powerpc. */ |
152 | #if __LINUX_KERNEL_VERSION >= 131879 && !defined __powerpc__ | |
153 | # define __ASSUME_IPC64 1 | |
154 | #endif | |
155 | ||
1e2e27fd UD |
156 | /* We can use the LDTs for threading with Linux 2.3.99 and newer. */ |
157 | #if __LINUX_KERNEL_VERSION >= 131939 | |
158 | # define __ASSUME_LDT_WORKS 1 | |
159 | #endif | |
160 | ||
463ed2f0 UD |
161 | /* Linux 2.4.0 on PPC introduced a correct IPC64. But PowerPC64 does not |
162 | support a separate 64-bit syscall, already 64-bit. */ | |
51a8c49d RM |
163 | #if __LINUX_KERNEL_VERSION >= 132096 && defined __powerpc__ \ |
164 | && !defined __powerpc64__ | |
a0386a0d UD |
165 | # define __ASSUME_IPC64 1 |
166 | #endif | |
167 | ||
1e2e27fd UD |
168 | /* SH kernels got stat64, mmap2, and truncate64 during 2.4.0-test. */ |
169 | #if __LINUX_KERNEL_VERSION >= 132096 && defined __sh__ | |
170 | # define __ASSUME_TRUNCATE64_SYSCALL 1 | |
171 | # define __ASSUME_MMAP2_SYSCALL 1 | |
172 | # define __ASSUME_STAT64_SYSCALL 1 | |
a074fa3c | 173 | #endif |
56ddf355 UD |
174 | |
175 | /* The changed st_ino field appeared in 2.4.0-test6. But we cannot | |
176 | distinguish this version from other 2.4.0 releases. Therefore play | |
1e2e27fd UD |
177 | save and assume it available is for 2.4.1 and up. However, SH is lame, |
178 | and still does not have a 64-bit inode field. */ | |
3155f066 | 179 | #if __LINUX_KERNEL_VERSION >= 132097 && !defined __sh__ |
56ddf355 UD |
180 | # define __ASSUME_ST_INO_64_BIT 1 |
181 | #endif | |
21f6a100 UD |
182 | |
183 | /* To support locking of large files a new fcntl() syscall was introduced | |
184 | in 2.4.0-test7. We test for 2.4.1 for the earliest version we know | |
185 | the syscall is available. */ | |
f39b19c7 | 186 | #if __LINUX_KERNEL_VERSION >= 132097 && (defined __i386__ || defined __sparc__) |
21f6a100 UD |
187 | # define __ASSUME_FCNTL64 1 |
188 | #endif | |
14860991 | 189 | |
1418bf99 UD |
190 | /* The AT_CLKTCK auxiliary vector entry was introduction in the 2.4.0 |
191 | series. */ | |
192 | #if __LINUX_KERNEL_VERSION >= 132097 | |
193 | # define __ASSUME_AT_CLKTCK 1 | |
194 | #endif | |
195 | ||
d37286c1 | 196 | /* Arm got fcntl64 in 2.4.4, PowerPC and SH have it also in 2.4.4 (I |
51a8c49d RM |
197 | don't know when it got introduced). But PowerPC64 does not support |
198 | separate FCNTL64 call, FCNTL is already 64-bit */ | |
5ee5d791 | 199 | #if __LINUX_KERNEL_VERSION >= 132100 \ |
cd277b2d | 200 | && (defined __powerpc__ || defined __sh__) \ |
51a8c49d | 201 | && !defined __powerpc64__ |
d37286c1 AJ |
202 | # define __ASSUME_FCNTL64 1 |
203 | #endif | |
204 | ||
14860991 UD |
205 | /* The getdents64 syscall was introduced in 2.4.0-test7. We test for |
206 | 2.4.1 for the earliest version we know the syscall is available. */ | |
207 | #if __LINUX_KERNEL_VERSION >= 132097 | |
208 | # define __ASSUME_GETDENTS64_SYSCALL 1 | |
209 | #endif | |
675e4015 | 210 | |
463ed2f0 | 211 | /* When did O_DIRECTORY become available? Early in 2.3 but when? |
675e4015 UD |
212 | Be safe, use 2.3.99. */ |
213 | #if __LINUX_KERNEL_VERSION >= 131939 | |
7060e53e | 214 | # define __ASSUME_O_DIRECTORY 1 |
675e4015 | 215 | #endif |
4e56fdbc UD |
216 | |
217 | /* Starting with one of the 2.4.0 pre-releases the Linux kernel passes | |
218 | up the page size information. */ | |
219 | #if __LINUX_KERNEL_VERSION >= 132097 | |
7060e53e | 220 | # define __ASSUME_AT_PAGESIZE 1 |
4e56fdbc | 221 | #endif |
390911be | 222 | |
846c6907 UD |
223 | /* Starting with at least 2.4.0 the kernel passes the uid/gid unconditionally |
224 | up to the child. */ | |
225 | #if __LINUX_KERNEL_VERSION >= 132097 | |
226 | # define __ASSUME_AT_XID 1 | |
227 | #endif | |
228 | ||
b398ae3c UD |
229 | /* Starting with 2.4.5 kernels PPC passes the AUXV in the standard way |
230 | and the vfork syscall made it into the official kernel. */ | |
7060e53e AJ |
231 | #if __LINUX_KERNEL_VERSION >= (132096+5) && defined __powerpc__ |
232 | # define __ASSUME_STD_AUXV 1 | |
b398ae3c | 233 | # define __ASSUME_VFORK_SYSCALL 1 |
51a8c49d RM |
234 | #endif |
235 | ||
236 | /* Starting with 2.4.5 kernels the mmap2 syscall made it into the official | |
237 | kernel. But PowerPC64 does not support a separate MMAP2 call. */ | |
238 | #if __LINUX_KERNEL_VERSION >= (132096+5) && defined __powerpc__ \ | |
239 | && !defined __powerpc64__ | |
7060e53e | 240 | # define __ASSUME_MMAP2_SYSCALL 1 |
390911be | 241 | #endif |
c5e38fac | 242 | |
05856976 | 243 | /* Starting with 2.4.21 PowerPC implements the new prctl syscall. |
38e68573 | 244 | This allows applications to get/set the Floating Point Exception Mode. */ |
05856976 | 245 | #if __LINUX_KERNEL_VERSION >= (132096+21) && defined __powerpc__ |
38e68573 UD |
246 | # define __ASSUME_NEW_PRCTL_SYSCALL 1 |
247 | #endif | |
248 | ||
b1b060c3 UD |
249 | /* Starting with 2.4.21 the PowerPC32 clone syscall works as expected. */ |
250 | #if __LINUX_KERNEL_VERSION >= (132096+21) && defined __powerpc__ \ | |
251 | && !defined __powerpc64__ | |
252 | # define __ASSUME_FIXED_CLONE_SYSCALL 1 | |
253 | #endif | |
254 | ||
38e68573 UD |
255 | /* Starting with 2.4.21 PowerPC64 implements the new rt_sigreturn syscall. |
256 | The new rt_sigreturn takes an ucontext pointer allowing rt_sigreturn | |
257 | to be used in the set/swapcontext implementation. */ | |
258 | #if __LINUX_KERNEL_VERSION >= (132096+21) && defined __powerpc64__ | |
259 | # define __ASSUME_NEW_RT_SIGRETURN_SYSCALL 1 | |
260 | #endif | |
261 | ||
0950889b | 262 | /* On x86, the set_thread_area syscall was introduced in 2.5.29, but its |
05a51227 | 263 | semantics was changed in 2.5.30, and again after 2.5.31. */ |
2a76f7ef | 264 | #if __LINUX_KERNEL_VERSION >= 132384 && defined __i386__ |
0950889b UD |
265 | # define __ASSUME_SET_THREAD_AREA_SYSCALL 1 |
266 | #endif | |
267 | ||
8eed661a | 268 | /* The vfork syscall on x86 and arm was definitely available in 2.4. */ |
cd277b2d | 269 | #if __LINUX_KERNEL_VERSION >= 132097 && defined __i386__ |
885bc024 UD |
270 | # define __ASSUME_VFORK_SYSCALL 1 |
271 | #endif | |
272 | ||
7d092b69 UD |
273 | /* The late 2.5 kernels saw a lot of new CLONE_* flags. Summarize |
274 | their availability with one define. The changes were made first | |
275 | for i386 and the have to be done separately for the other archs. | |
76ecf81e RM |
276 | For i386 we pick 2.5.50 as the first version with support. |
277 | For ia64, s390*, PPC, x86-64, and SH we pick 2.5.64 as the first | |
278 | version with support. */ | |
279 | #if ((__LINUX_KERNEL_VERSION >= 132402 && defined __i386__) \ | |
280 | || (__LINUX_KERNEL_VERSION >= 132416 \ | |
281 | && (defined __ia64__ || defined __s390__ \ | |
282 | || defined __powerpc__ || defined __x86_64__ || defined __sh__))) | |
7d092b69 UD |
283 | # define __ASSUME_CLONE_THREAD_FLAGS 1 |
284 | #endif | |
c2918f01 | 285 | |
ad0e8eb0 UD |
286 | /* Beginning with 2.5.63 support for realtime and monotonic clocks and |
287 | timers based on them is available. */ | |
288 | #if __LINUX_KERNEL_VERSION >= 132415 | |
289 | # define __ASSUME_POSIX_TIMERS 1 | |
290 | #endif | |
f006d3a0 | 291 | |
f3423d5a RM |
292 | /* Beginning with 2.6.12 the clock and timer supports CPU clocks. */ |
293 | #if __LINUX_KERNEL_VERSION >= 0x2060c | |
294 | # define __ASSUME_POSIX_CPU_TIMERS 1 | |
295 | #endif | |
296 | ||
e0c09a43 UD |
297 | /* With kernel 2.4.17 we always have netlink support. */ |
298 | #if __LINUX_KERNEL_VERSION >= (132096+17) | |
299 | # define __ASSUME_NETLINK_SUPPORT 1 | |
300 | #endif | |
301 | ||
69431c9a UD |
302 | /* The requeue futex functionality was introduced in 2.5.70. */ |
303 | #if __LINUX_KERNEL_VERSION >= 132422 | |
304 | # define __ASSUME_FUTEX_REQUEUE 1 | |
305 | #endif | |
51d1ca00 UD |
306 | |
307 | /* The statfs64 syscalls are available in 2.5.74. */ | |
308 | #if __LINUX_KERNEL_VERSION >= 132426 | |
309 | # define __ASSUME_STATFS64 1 | |
310 | #endif | |
c801e765 RM |
311 | |
312 | /* Starting with at least 2.5.74 the kernel passes the setuid-like exec | |
313 | flag unconditionally up to the child. */ | |
314 | #if __LINUX_KERNEL_VERSION >= 132426 | |
315 | # define __ASSUME_AT_SECURE 1 | |
316 | #endif | |
db54f488 UD |
317 | |
318 | /* Starting with the 2.5.75 kernel the kernel fills in the correct value | |
319 | in the si_pid field passed as part of the siginfo_t struct to signal | |
320 | handlers. */ | |
321 | #if __LINUX_KERNEL_VERSION >= 132427 | |
322 | # define __ASSUME_CORRECT_SI_PID 1 | |
323 | #endif | |
324 | ||
3155f066 UD |
325 | /* The tgkill syscall was instroduced for i386 in 2.5.75. On x86-64, |
326 | ppc, and ppc64 it was introduced in 2.6.0-test3. */ | |
b1b060c3 | 327 | #if (__LINUX_KERNEL_VERSION >= 132427 && defined __i386__) \ |
07bd2a3f | 328 | || (__LINUX_KERNEL_VERSION >= 132609 && defined __x86_64__) \ |
453d8199 | 329 | || (__LINUX_KERNEL_VERSION >= 132609 && defined __powerpc__) \ |
07bd2a3f | 330 | || (__LINUX_KERNEL_VERSION >= 132609 && defined __sh__) |
db54f488 UD |
331 | # define __ASSUME_TGKILL 1 |
332 | #endif | |
82bae9f9 | 333 | |
f4e0175f | 334 | /* The utimes syscall has been available for some architectures |
5085cd1f | 335 | forever. For x86 it was introduced after 2.5.75, for x86-64, |
453d8199 | 336 | ppc, and ppc64 it was introduced in 2.6.0-test3. */ |
3155f066 | 337 | #if defined __ia64__ || defined __sparc__ \ |
e08dbbd1 | 338 | || (__LINUX_KERNEL_VERSION > 132427 && defined __i386__) \ |
07bd2a3f | 339 | || (__LINUX_KERNEL_VERSION > 132609 && defined __x86_64__) \ |
453d8199 | 340 | || (__LINUX_KERNEL_VERSION >= 132609 && defined __powerpc__) \ |
07bd2a3f | 341 | || (__LINUX_KERNEL_VERSION >= 132609 && defined __sh__) |
82bae9f9 UD |
342 | # define __ASSUME_UTIMES 1 |
343 | #endif | |
0cbc6c4e | 344 | |
05f4d5cd UD |
345 | // XXX Disabled for now since the semantics we want is not achieved. |
346 | #if 0 | |
0cbc6c4e UD |
347 | /* The CLONE_STOPPED flag was introduced in the 2.6.0-test1 series. */ |
348 | #if __LINUX_KERNEL_VERSION >= 132609 | |
349 | # define __ASSUME_CLONE_STOPPED 1 | |
350 | #endif | |
05f4d5cd | 351 | #endif |
bfef9264 UD |
352 | |
353 | /* The fixed version of the posix_fadvise64 syscall appeared in | |
453d8199 RM |
354 | 2.6.0-test3. At least for x86. Powerpc support appeared in |
355 | 2.6.2, but for 32-bit userspace only. */ | |
356 | #if (__LINUX_KERNEL_VERSION >= 132609 && defined __i386__) \ | |
357 | || (__LINUX_KERNEL_VERSION >= 132610 && defined __powerpc__ \ | |
358 | && !defined __powerpc64__) | |
bfef9264 UD |
359 | # define __ASSUME_FADVISE64_64_SYSCALL 1 |
360 | #endif | |
5cb48b84 UD |
361 | |
362 | /* The PROT_GROWSDOWN/PROT_GROWSUP flags were introduced in the 2.6.0-test | |
363 | series. */ | |
364 | #if __LINUX_KERNEL_VERSION >= 132609 | |
365 | # define __ASSUME_PROT_GROWSUPDOWN 1 | |
366 | #endif | |
5ef6ae4b | 367 | |
f3484f27 UD |
368 | /* Starting with 2.6.0 PowerPC adds signal/swapcontext support for Vector |
369 | SIMD (AKA Altivec, VMX) instructions and register state. This changes | |
5ef6ae4b | 370 | the overall size of the sigcontext and adds the swapcontext syscall. */ |
f3484f27 | 371 | #if __LINUX_KERNEL_VERSION >= 132608 && defined __powerpc__ |
afedc4af | 372 | # define __ASSUME_SWAPCONTEXT_SYSCALL 1 |
5ef6ae4b | 373 | #endif |
f3484f27 UD |
374 | |
375 | /* The CLONE_DETACHED flag is not necessary in 2.6.2 kernels, it is | |
376 | implied. */ | |
377 | #if __LINUX_KERNEL_VERSION >= 132610 | |
afedc4af UD |
378 | # define __ASSUME_NO_CLONE_DETACHED 1 |
379 | #endif | |
380 | ||
381 | /* Starting with version 2.6.4-rc1 the getdents syscall returns d_type | |
e7ebabed UD |
382 | information as well and in between 2.6.5 and 2.6.8 most compat wrappers |
383 | were fixed too. Except s390{,x} which was fixed in 2.6.11. */ | |
384 | #if (__LINUX_KERNEL_VERSION >= 0x020608 && !defined __s390__) \ | |
385 | || (__LINUX_KERNEL_VERSION >= 0x02060b && defined __s390__) | |
afedc4af | 386 | # define __ASSUME_GETDENTS32_D_TYPE 1 |
f3484f27 | 387 | #endif |
a489c529 RM |
388 | |
389 | /* Starting with version 2.5.3, the initial location returned by `brk' | |
390 | after exec is always rounded up to the next page. */ | |
391 | #if __LINUX_KERNEL_VERSION >= 132355 | |
392 | # define __ASSUME_BRK_PAGE_ROUNDED 1 | |
393 | #endif | |
6698501f | 394 | |
453d8199 | 395 | /* Starting with version 2.6.9, the waitid system call is available. |
e7ebabed UD |
396 | Except for powerpc{,64} and s390{,x}, where it is available in 2.6.12. */ |
397 | #if (__LINUX_KERNEL_VERSION >= 0x020609 \ | |
398 | && !defined __powerpc__ && !defined __s390__) \ | |
399 | || (__LINUX_KERNEL_VERSION >= 0x02060c \ | |
400 | && (defined __powerpc__ || defined __s390__)) | |
6698501f RM |
401 | # define __ASSUME_WAITID_SYSCALL 1 |
402 | #endif | |
6029b952 | 403 | |
49783c67 UD |
404 | /* On sparc64 stat64/lstat64/fstat64 syscalls were introduced in 2.6.12. */ |
405 | #if __LINUX_KERNEL_VERSION >= 0x02060c && defined __sparc__ \ | |
406 | && defined __arch64__ | |
407 | # define __ASSUME_STAT64_SYSCALL 1 | |
408 | #endif | |
2d79a585 UD |
409 | |
410 | /* Early kernel used "shm" as the filesystem name for the filesystem used | |
411 | for shm_open etc. Later it is "tmpfs". 2.4.20 is a safe bet for the | |
412 | cutover. */ | |
413 | #if __LINUX_KERNEL_VERSION >= 0x02041a | |
414 | # define __ASSUME_TMPFS_NAME 1 | |
415 | #endif | |
7c65e900 | 416 | |
22502ea2 UD |
417 | /* pselect/ppoll were introduced just after 2.6.16-rc1. Due to the way |
418 | the kernel versions are advertised we can only rely on 2.6.17 to have | |
419 | the code. On x86_64 and SH this appeared first in 2.6.19-rc1, | |
3155f066 | 420 | on ia64 in 2.6.22-rc1. */ |
22502ea2 | 421 | #if __LINUX_KERNEL_VERSION >= 0x020611 \ |
3155f066 | 422 | && ((!defined __x86_64__ && !defined __sh__ && !defined __ia64__) \ |
22502ea2 UD |
423 | || (__LINUX_KERNEL_VERSION >= 0x020613 \ |
424 | && (defined __x86_64__ || defined __sh__)) \ | |
3155f066 | 425 | || (__LINUX_KERNEL_VERSION >= 0x020616 && defined __ia64__)) |
7c65e900 | 426 | # define __ASSUME_PSELECT 1 |
22502ea2 | 427 | # define __ASSUME_PPOLL 1 |
7c65e900 UD |
428 | #endif |
429 | ||
430 | /* The *at syscalls were introduced just after 2.6.16-rc1. Due to the way the | |
431 | kernel versions are advertised we can only rely on 2.6.17 to have | |
3155f066 UD |
432 | the code. On PPC they were introduced in 2.6.17-rc1, |
433 | on SH in 2.6.19-rc1. */ | |
22502ea2 | 434 | #if __LINUX_KERNEL_VERSION >= 0x020611 \ |
3155f066 | 435 | && (!defined __sh__ || __LINUX_KERNEL_VERSION >= 0x020613) |
7c65e900 UD |
436 | # define __ASSUME_ATFCTS 1 |
437 | #endif | |
0f6699ea UD |
438 | |
439 | /* Support for inter-process robust mutexes was added in 2.6.17. */ | |
22502ea2 | 440 | #if __LINUX_KERNEL_VERSION >= 0x020611 \ |
3155f066 | 441 | && (!defined __sh__ || __LINUX_KERNEL_VERSION >= 0x020613) |
0f6699ea UD |
442 | # define __ASSUME_SET_ROBUST_LIST 1 |
443 | #endif | |
d5ba53f9 | 444 | |
2dbe6afe UD |
445 | /* Pessimistically assume that 2.6.18 introduced real handling of |
446 | large numbers of requests to readv and writev and that we don't | |
447 | need a fallback. It likely worked for much longer. */ | |
448 | #if __LINUX_KERNEL_VERSION >= 0x020612 | |
449 | # define __ASSUME_COMPLETE_READV_WRITEV 1 | |
450 | #endif | |
451 | ||
d5ba53f9 UD |
452 | /* Support for PI futexes was added in 2.6.18. */ |
453 | #if __LINUX_KERNEL_VERSION >= 0x020612 | |
454 | # define __ASSUME_FUTEX_LOCK_PI 1 | |
455 | #endif | |
c27d2078 | 456 | |
3155f066 | 457 | /* Support for utimensat syscall was added in 2.6.22, on SH |
22502ea2 UD |
458 | only after 2.6.22-rc1. */ |
459 | #if __LINUX_KERNEL_VERSION >= 0x020616 \ | |
3155f066 | 460 | && (!defined __sh__ || __LINUX_KERNEL_VERSION >= 0x020617) |
c27d2078 UD |
461 | # define __ASSUME_UTIMENSAT 1 |
462 | #endif | |
4f099bb5 UD |
463 | |
464 | /* Support for private futexes was added in 2.6.22. */ | |
465 | #if __LINUX_KERNEL_VERSION >= 0x020616 | |
466 | # define __ASSUME_PRIVATE_FUTEX 1 | |
467 | #endif | |
c1bf9f14 | 468 | |
22502ea2 UD |
469 | /* Support for fallocate was added in 2.6.23, on s390 |
470 | only after 2.6.23-rc1. */ | |
471 | #if __LINUX_KERNEL_VERSION >= 0x020617 \ | |
3155f066 | 472 | && (!defined __s390__ || __LINUX_KERNEL_VERSION >= 0x020618) |
c1bf9f14 UD |
473 | # define __ASSUME_FALLOCATE 1 |
474 | #endif | |
ae18718f | 475 | |
46bc5d43 UD |
476 | /* Support for various CLOEXEC and NONBLOCK flags was added for x86, |
477 | x86-64, PPC, IA-64, SPARC< and S390 in 2.6.23. */ | |
478 | #if __LINUX_KERNEL_VERSION >= 0x020617 \ | |
479 | && (defined __i386__ || defined __x86_64__ || defined __powerpc__ \ | |
480 | || defined __ia64__ || defined __sparc__ || defined __s390__) | |
481 | # define __ASSUME_O_CLOEXEC 1 | |
482 | #endif | |
483 | ||
ae18718f UD |
484 | /* Support for ADJ_OFFSET_SS_READ was added in 2.6.24. */ |
485 | #if __LINUX_KERNEL_VERSION >= 0x020618 | |
486 | # define __ASSUME_ADJ_OFFSET_SS_READ 1 | |
487 | #endif | |
0e077a7e | 488 | |
b5c0b5e4 | 489 | /* Support for various CLOEXEC and NONBLOCK flags was added for x86, |
bdd24a30 | 490 | x86-64, PPC, IA-64, and SPARC in 2.6.27. */ |
3ff2c948 | 491 | #if __LINUX_KERNEL_VERSION >= 0x02061b \ |
b5c0b5e4 | 492 | && (defined __i386__ || defined __x86_64__ || defined __powerpc__ \ |
7dd650d7 | 493 | || defined __ia64__ || defined __sparc__ || defined __s390__) |
3ff2c948 UD |
494 | # define __ASSUME_SOCK_CLOEXEC 1 |
495 | # define __ASSUME_IN_NONBLOCK 1 | |
d6e0c2a6 | 496 | # define __ASSUME_PIPE2 1 |
aa7492d2 UD |
497 | # define __ASSUME_EVENTFD2 1 |
498 | # define __ASSUME_SIGNALFD4 1 | |
f93fc0b7 UD |
499 | #endif |
500 | ||
501 | /* Support for the accept4 syscall was added in 2.6.28. */ | |
200da00a | 502 | #if __LINUX_KERNEL_VERSION >= 0x02061c \ |
f93fc0b7 | 503 | && (defined __i386__ || defined __x86_64__ || defined __powerpc__ \ |
3533b1a6 | 504 | || defined __sparc__ || defined __s390__) |
f93fc0b7 | 505 | # define __ASSUME_ACCEPT4 1 |
3ff2c948 | 506 | #endif |
ebb2788e UD |
507 | |
508 | /* Support for the FUTEX_CLOCK_REALTIME flag was added in 2.6.29. */ | |
7dd650d7 | 509 | #if __LINUX_KERNEL_VERSION >= 0x02061d |
ebb2788e UD |
510 | # define __ASSUME_FUTEX_CLOCK_REALTIME 1 |
511 | #endif | |
e109c612 | 512 | |
4300afc1 UD |
513 | /* Support for the AT_RANDOM auxiliary vector entry was added in 2.6.29. */ |
514 | #if __LINUX_KERNEL_VERSION >= 0x02061d | |
515 | # define __ASSUME_AT_RANDOM 1 | |
516 | #endif | |
517 | ||
e109c612 | 518 | /* Support for preadv and pwritev was added in 2.6.30. */ |
11cad88c | 519 | #if __LINUX_KERNEL_VERSION >= 0x02061e |
e109c612 UD |
520 | # define __ASSUME_PREADV 1 |
521 | # define __ASSUME_PWRITEV 1 | |
522 | #endif | |
81c84bd9 UD |
523 | |
524 | /* Support for F_GETOWN_EX was introduced in 2.6.32. */ | |
525 | #if __LINUX_KERNEL_VERSION >= 0x020620 | |
526 | # define __ASSUME_F_GETOWN_EX 1 | |
527 | #endif | |
3d04ff3a AS |
528 | |
529 | /* Support for the recvmmsg syscall was added in 2.6.33. */ | |
530 | #if __LINUX_KERNEL_VERSION >= 0x020621 | |
531 | # define __ASSUME_RECVMMSG 1 | |
532 | #endif |