Introduce fixed sys_sync_file_range2() syscall, implement on PowerPC and ARM
[linux-2.6.git] / scripts / checksyscalls.sh
1 #!/bin/sh
2 #
3 # Check if current architecture are missing any function calls compared
4 # to i386.
5 # i386 define a number of legacy system calls that are i386 specific
6 # and listed below so they are ignored.
7 #
8 # Usage:
9 # syscallchk gcc gcc-options
10 #
11
12 ignore_list() {
13 cat << EOF
14 #include <asm/types.h>
15 #include <asm/unistd.h>
16
17 /* System calls for 32-bit kernels only */
18 #if BITS_PER_LONG == 64
19 #define __IGNORE_sendfile64
20 #define __IGNORE_ftruncate64
21 #define __IGNORE_truncate64
22 #define __IGNORE_stat64
23 #define __IGNORE_lstat64
24 #define __IGNORE_fstat64
25 #define __IGNORE_fcntl64
26 #define __IGNORE_fadvise64_64
27 #define __IGNORE_fstatat64
28 #define __IGNORE_fstatfs64
29 #define __IGNORE_statfs64
30 #endif
31
32 /* i386-specific or historical system calls */
33 #define __IGNORE_break
34 #define __IGNORE_stty
35 #define __IGNORE_gtty
36 #define __IGNORE_ftime
37 #define __IGNORE_prof
38 #define __IGNORE_lock
39 #define __IGNORE_mpx
40 #define __IGNORE_ulimit
41 #define __IGNORE_profil
42 #define __IGNORE_ioperm
43 #define __IGNORE_iopl
44 #define __IGNORE_idle
45 #define __IGNORE_modify_ldt
46 #define __IGNORE_ugetrlimit
47 #define __IGNORE_mmap2
48 #define __IGNORE_vm86
49 #define __IGNORE_vm86old
50 #define __IGNORE_set_thread_area
51 #define __IGNORE_get_thread_area
52 #define __IGNORE_madvise1
53 #define __IGNORE_oldstat
54 #define __IGNORE_oldfstat
55 #define __IGNORE_oldlstat
56 #define __IGNORE_oldolduname
57 #define __IGNORE_olduname
58 #define __IGNORE_umount2
59 #define __IGNORE_umount
60 #define __IGNORE_waitpid
61 #define __IGNORE_stime
62 #define __IGNORE_nice
63 #define __IGNORE_signal
64 #define __IGNORE_sigaction
65 #define __IGNORE_sgetmask
66 #define __IGNORE_sigsuspend
67 #define __IGNORE_sigpending
68 #define __IGNORE_ssetmask
69 #define __IGNORE_readdir
70 #define __IGNORE_socketcall
71 #define __IGNORE_ipc
72 #define __IGNORE_sigreturn
73 #define __IGNORE_sigprocmask
74 #define __IGNORE_bdflush
75 #define __IGNORE__llseek
76 #define __IGNORE__newselect
77 #define __IGNORE_create_module
78 #define __IGNORE_delete_module
79 #define __IGNORE_query_module
80 #define __IGNORE_get_kernel_syms
81 /* ... including the "new" 32-bit uid syscalls */
82 #define __IGNORE_lchown32
83 #define __IGNORE_getuid32
84 #define __IGNORE_getgid32
85 #define __IGNORE_geteuid32
86 #define __IGNORE_getegid32
87 #define __IGNORE_setreuid32
88 #define __IGNORE_setregid32
89 #define __IGNORE_getgroups32
90 #define __IGNORE_setgroups32
91 #define __IGNORE_fchown32
92 #define __IGNORE_setresuid32
93 #define __IGNORE_getresuid32
94 #define __IGNORE_setresgid32
95 #define __IGNORE_getresgid32
96 #define __IGNORE_chown32
97 #define __IGNORE_setuid32
98 #define __IGNORE_setgid32
99 #define __IGNORE_setfsuid32
100 #define __IGNORE_setfsgid32
101
102 /* sync_file_range had a stupid ABI. Allow sync_file_range2 instead */
103 #ifdef __NR_sync_file_range2
104 #define __IGNORE_sync_file_range
105 #endif
106
107 /* Unmerged syscalls for AFS, STREAMS, etc. */
108 #define __IGNORE_afs_syscall
109 #define __IGNORE_getpmsg
110 #define __IGNORE_putpmsg
111 #define __IGNORE_vserver
112 EOF
113 }
114
115 syscall_list() {
116 sed -n -e '/^\#define/ { s/[^_]*__NR_\([^[:space:]]*\).*/\
117 \#if !defined \(__NR_\1\) \&\& !defined \(__IGNORE_\1\)\
118 \#warning syscall \1 not implemented\
119 \#endif/p }' $1
120 }
121
122 (ignore_list && syscall_list ${srctree}/include/asm-i386/unistd.h) | \
123 $* -E -x c - > /dev/null