xref: /OK3568_Linux_fs/kernel/scripts/checksyscalls.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/sh
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun#
4*4882a593Smuzhiyun# Check if current architecture are missing any function calls compared
5*4882a593Smuzhiyun# to i386.
6*4882a593Smuzhiyun# i386 define a number of legacy system calls that are i386 specific
7*4882a593Smuzhiyun# and listed below so they are ignored.
8*4882a593Smuzhiyun#
9*4882a593Smuzhiyun# Usage:
10*4882a593Smuzhiyun# checksyscalls.sh gcc gcc-options
11*4882a593Smuzhiyun#
12*4882a593Smuzhiyun
13*4882a593Smuzhiyunignore_list() {
14*4882a593Smuzhiyuncat << EOF
15*4882a593Smuzhiyun#include <asm/types.h>
16*4882a593Smuzhiyun#include <asm/unistd.h>
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun/* *at */
19*4882a593Smuzhiyun#define __IGNORE_open		/* openat */
20*4882a593Smuzhiyun#define __IGNORE_link		/* linkat */
21*4882a593Smuzhiyun#define __IGNORE_unlink		/* unlinkat */
22*4882a593Smuzhiyun#define __IGNORE_mknod		/* mknodat */
23*4882a593Smuzhiyun#define __IGNORE_chmod		/* fchmodat */
24*4882a593Smuzhiyun#define __IGNORE_chown		/* fchownat */
25*4882a593Smuzhiyun#define __IGNORE_mkdir		/* mkdirat */
26*4882a593Smuzhiyun#define __IGNORE_rmdir		/* unlinkat */
27*4882a593Smuzhiyun#define __IGNORE_lchown		/* fchownat */
28*4882a593Smuzhiyun#define __IGNORE_access		/* faccessat */
29*4882a593Smuzhiyun#define __IGNORE_rename		/* renameat2 */
30*4882a593Smuzhiyun#define __IGNORE_readlink	/* readlinkat */
31*4882a593Smuzhiyun#define __IGNORE_symlink	/* symlinkat */
32*4882a593Smuzhiyun#define __IGNORE_utimes		/* futimesat */
33*4882a593Smuzhiyun#define __IGNORE_stat		/* fstatat */
34*4882a593Smuzhiyun#define __IGNORE_lstat		/* fstatat */
35*4882a593Smuzhiyun#define __IGNORE_stat64		/* fstatat64 */
36*4882a593Smuzhiyun#define __IGNORE_lstat64	/* fstatat64 */
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun#ifndef __ARCH_WANT_SET_GET_RLIMIT
39*4882a593Smuzhiyun#define __IGNORE_getrlimit	/* getrlimit */
40*4882a593Smuzhiyun#define __IGNORE_setrlimit	/* setrlimit */
41*4882a593Smuzhiyun#endif
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun/* Missing flags argument */
44*4882a593Smuzhiyun#define __IGNORE_renameat	/* renameat2 */
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun/* CLOEXEC flag */
47*4882a593Smuzhiyun#define __IGNORE_pipe		/* pipe2 */
48*4882a593Smuzhiyun#define __IGNORE_dup2		/* dup3 */
49*4882a593Smuzhiyun#define __IGNORE_epoll_create	/* epoll_create1 */
50*4882a593Smuzhiyun#define __IGNORE_inotify_init	/* inotify_init1 */
51*4882a593Smuzhiyun#define __IGNORE_eventfd	/* eventfd2 */
52*4882a593Smuzhiyun#define __IGNORE_signalfd	/* signalfd4 */
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun/* MMU */
55*4882a593Smuzhiyun#ifndef CONFIG_MMU
56*4882a593Smuzhiyun#define __IGNORE_madvise
57*4882a593Smuzhiyun#define __IGNORE_mbind
58*4882a593Smuzhiyun#define __IGNORE_mincore
59*4882a593Smuzhiyun#define __IGNORE_mlock
60*4882a593Smuzhiyun#define __IGNORE_mlockall
61*4882a593Smuzhiyun#define __IGNORE_munlock
62*4882a593Smuzhiyun#define __IGNORE_munlockall
63*4882a593Smuzhiyun#define __IGNORE_mprotect
64*4882a593Smuzhiyun#define __IGNORE_msync
65*4882a593Smuzhiyun#define __IGNORE_migrate_pages
66*4882a593Smuzhiyun#define __IGNORE_move_pages
67*4882a593Smuzhiyun#define __IGNORE_remap_file_pages
68*4882a593Smuzhiyun#define __IGNORE_get_mempolicy
69*4882a593Smuzhiyun#define __IGNORE_set_mempolicy
70*4882a593Smuzhiyun#define __IGNORE_swapoff
71*4882a593Smuzhiyun#define __IGNORE_swapon
72*4882a593Smuzhiyun#endif
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun/* System calls for 32-bit kernels only */
75*4882a593Smuzhiyun#if BITS_PER_LONG == 64
76*4882a593Smuzhiyun#define __IGNORE_sendfile64
77*4882a593Smuzhiyun#define __IGNORE_ftruncate64
78*4882a593Smuzhiyun#define __IGNORE_truncate64
79*4882a593Smuzhiyun#define __IGNORE_stat64
80*4882a593Smuzhiyun#define __IGNORE_lstat64
81*4882a593Smuzhiyun#define __IGNORE_fstat64
82*4882a593Smuzhiyun#define __IGNORE_fcntl64
83*4882a593Smuzhiyun#define __IGNORE_fadvise64_64
84*4882a593Smuzhiyun#define __IGNORE_fstatat64
85*4882a593Smuzhiyun#define __IGNORE_fstatfs64
86*4882a593Smuzhiyun#define __IGNORE_statfs64
87*4882a593Smuzhiyun#define __IGNORE_llseek
88*4882a593Smuzhiyun#define __IGNORE_mmap2
89*4882a593Smuzhiyun#define __IGNORE_clock_gettime64
90*4882a593Smuzhiyun#define __IGNORE_clock_settime64
91*4882a593Smuzhiyun#define __IGNORE_clock_adjtime64
92*4882a593Smuzhiyun#define __IGNORE_clock_getres_time64
93*4882a593Smuzhiyun#define __IGNORE_clock_nanosleep_time64
94*4882a593Smuzhiyun#define __IGNORE_timer_gettime64
95*4882a593Smuzhiyun#define __IGNORE_timer_settime64
96*4882a593Smuzhiyun#define __IGNORE_timerfd_gettime64
97*4882a593Smuzhiyun#define __IGNORE_timerfd_settime64
98*4882a593Smuzhiyun#define __IGNORE_utimensat_time64
99*4882a593Smuzhiyun#define __IGNORE_pselect6_time64
100*4882a593Smuzhiyun#define __IGNORE_ppoll_time64
101*4882a593Smuzhiyun#define __IGNORE_io_pgetevents_time64
102*4882a593Smuzhiyun#define __IGNORE_recvmmsg_time64
103*4882a593Smuzhiyun#define __IGNORE_mq_timedsend_time64
104*4882a593Smuzhiyun#define __IGNORE_mq_timedreceive_time64
105*4882a593Smuzhiyun#define __IGNORE_semtimedop_time64
106*4882a593Smuzhiyun#define __IGNORE_rt_sigtimedwait_time64
107*4882a593Smuzhiyun#define __IGNORE_futex_time64
108*4882a593Smuzhiyun#define __IGNORE_sched_rr_get_interval_time64
109*4882a593Smuzhiyun#else
110*4882a593Smuzhiyun#define __IGNORE_sendfile
111*4882a593Smuzhiyun#define __IGNORE_ftruncate
112*4882a593Smuzhiyun#define __IGNORE_truncate
113*4882a593Smuzhiyun#define __IGNORE_stat
114*4882a593Smuzhiyun#define __IGNORE_lstat
115*4882a593Smuzhiyun#define __IGNORE_fstat
116*4882a593Smuzhiyun#define __IGNORE_fcntl
117*4882a593Smuzhiyun#define __IGNORE_fadvise64
118*4882a593Smuzhiyun#define __IGNORE_newfstatat
119*4882a593Smuzhiyun#define __IGNORE_fstatfs
120*4882a593Smuzhiyun#define __IGNORE_statfs
121*4882a593Smuzhiyun#define __IGNORE_lseek
122*4882a593Smuzhiyun#define __IGNORE_mmap
123*4882a593Smuzhiyun#define __IGNORE_clock_gettime
124*4882a593Smuzhiyun#define __IGNORE_clock_settime
125*4882a593Smuzhiyun#define __IGNORE_clock_adjtime
126*4882a593Smuzhiyun#define __IGNORE_clock_getres
127*4882a593Smuzhiyun#define __IGNORE_clock_nanosleep
128*4882a593Smuzhiyun#define __IGNORE_timer_gettime
129*4882a593Smuzhiyun#define __IGNORE_timer_settime
130*4882a593Smuzhiyun#define __IGNORE_timerfd_gettime
131*4882a593Smuzhiyun#define __IGNORE_timerfd_settime
132*4882a593Smuzhiyun#define __IGNORE_utimensat
133*4882a593Smuzhiyun#define __IGNORE_pselect6
134*4882a593Smuzhiyun#define __IGNORE_ppoll
135*4882a593Smuzhiyun#define __IGNORE_io_pgetevents
136*4882a593Smuzhiyun#define __IGNORE_recvmmsg
137*4882a593Smuzhiyun#define __IGNORE_mq_timedsend
138*4882a593Smuzhiyun#define __IGNORE_mq_timedreceive
139*4882a593Smuzhiyun#define __IGNORE_semtimedop
140*4882a593Smuzhiyun#define __IGNORE_rt_sigtimedwait
141*4882a593Smuzhiyun#define __IGNORE_futex
142*4882a593Smuzhiyun#define __IGNORE_sched_rr_get_interval
143*4882a593Smuzhiyun#define __IGNORE_gettimeofday
144*4882a593Smuzhiyun#define __IGNORE_settimeofday
145*4882a593Smuzhiyun#define __IGNORE_wait4
146*4882a593Smuzhiyun#define __IGNORE_adjtimex
147*4882a593Smuzhiyun#define __IGNORE_nanosleep
148*4882a593Smuzhiyun#define __IGNORE_io_getevents
149*4882a593Smuzhiyun#define __IGNORE_recvmmsg
150*4882a593Smuzhiyun#endif
151*4882a593Smuzhiyun
152*4882a593Smuzhiyun/* i386-specific or historical system calls */
153*4882a593Smuzhiyun#define __IGNORE_break
154*4882a593Smuzhiyun#define __IGNORE_stty
155*4882a593Smuzhiyun#define __IGNORE_gtty
156*4882a593Smuzhiyun#define __IGNORE_ftime
157*4882a593Smuzhiyun#define __IGNORE_prof
158*4882a593Smuzhiyun#define __IGNORE_lock
159*4882a593Smuzhiyun#define __IGNORE_mpx
160*4882a593Smuzhiyun#define __IGNORE_ulimit
161*4882a593Smuzhiyun#define __IGNORE_profil
162*4882a593Smuzhiyun#define __IGNORE_ioperm
163*4882a593Smuzhiyun#define __IGNORE_iopl
164*4882a593Smuzhiyun#define __IGNORE_idle
165*4882a593Smuzhiyun#define __IGNORE_modify_ldt
166*4882a593Smuzhiyun#define __IGNORE_ugetrlimit
167*4882a593Smuzhiyun#define __IGNORE_vm86
168*4882a593Smuzhiyun#define __IGNORE_vm86old
169*4882a593Smuzhiyun#define __IGNORE_set_thread_area
170*4882a593Smuzhiyun#define __IGNORE_get_thread_area
171*4882a593Smuzhiyun#define __IGNORE_madvise1
172*4882a593Smuzhiyun#define __IGNORE_oldstat
173*4882a593Smuzhiyun#define __IGNORE_oldfstat
174*4882a593Smuzhiyun#define __IGNORE_oldlstat
175*4882a593Smuzhiyun#define __IGNORE_oldolduname
176*4882a593Smuzhiyun#define __IGNORE_olduname
177*4882a593Smuzhiyun#define __IGNORE_umount
178*4882a593Smuzhiyun#define __IGNORE_waitpid
179*4882a593Smuzhiyun#define __IGNORE_stime
180*4882a593Smuzhiyun#define __IGNORE_nice
181*4882a593Smuzhiyun#define __IGNORE_signal
182*4882a593Smuzhiyun#define __IGNORE_sigaction
183*4882a593Smuzhiyun#define __IGNORE_sgetmask
184*4882a593Smuzhiyun#define __IGNORE_sigsuspend
185*4882a593Smuzhiyun#define __IGNORE_sigpending
186*4882a593Smuzhiyun#define __IGNORE_ssetmask
187*4882a593Smuzhiyun#define __IGNORE_readdir
188*4882a593Smuzhiyun#define __IGNORE_socketcall
189*4882a593Smuzhiyun#define __IGNORE_ipc
190*4882a593Smuzhiyun#define __IGNORE_sigreturn
191*4882a593Smuzhiyun#define __IGNORE_sigprocmask
192*4882a593Smuzhiyun#define __IGNORE_bdflush
193*4882a593Smuzhiyun#define __IGNORE__llseek
194*4882a593Smuzhiyun#define __IGNORE__newselect
195*4882a593Smuzhiyun#define __IGNORE_create_module
196*4882a593Smuzhiyun#define __IGNORE_query_module
197*4882a593Smuzhiyun#define __IGNORE_get_kernel_syms
198*4882a593Smuzhiyun#define __IGNORE_sysfs
199*4882a593Smuzhiyun#define __IGNORE_uselib
200*4882a593Smuzhiyun#define __IGNORE__sysctl
201*4882a593Smuzhiyun#define __IGNORE_arch_prctl
202*4882a593Smuzhiyun#define __IGNORE_nfsservctl
203*4882a593Smuzhiyun
204*4882a593Smuzhiyun/* ... including the "new" 32-bit uid syscalls */
205*4882a593Smuzhiyun#define __IGNORE_lchown32
206*4882a593Smuzhiyun#define __IGNORE_getuid32
207*4882a593Smuzhiyun#define __IGNORE_getgid32
208*4882a593Smuzhiyun#define __IGNORE_geteuid32
209*4882a593Smuzhiyun#define __IGNORE_getegid32
210*4882a593Smuzhiyun#define __IGNORE_setreuid32
211*4882a593Smuzhiyun#define __IGNORE_setregid32
212*4882a593Smuzhiyun#define __IGNORE_getgroups32
213*4882a593Smuzhiyun#define __IGNORE_setgroups32
214*4882a593Smuzhiyun#define __IGNORE_fchown32
215*4882a593Smuzhiyun#define __IGNORE_setresuid32
216*4882a593Smuzhiyun#define __IGNORE_getresuid32
217*4882a593Smuzhiyun#define __IGNORE_setresgid32
218*4882a593Smuzhiyun#define __IGNORE_getresgid32
219*4882a593Smuzhiyun#define __IGNORE_chown32
220*4882a593Smuzhiyun#define __IGNORE_setuid32
221*4882a593Smuzhiyun#define __IGNORE_setgid32
222*4882a593Smuzhiyun#define __IGNORE_setfsuid32
223*4882a593Smuzhiyun#define __IGNORE_setfsgid32
224*4882a593Smuzhiyun
225*4882a593Smuzhiyun/* these can be expressed using other calls */
226*4882a593Smuzhiyun#define __IGNORE_alarm		/* setitimer */
227*4882a593Smuzhiyun#define __IGNORE_creat		/* open */
228*4882a593Smuzhiyun#define __IGNORE_fork		/* clone */
229*4882a593Smuzhiyun#define __IGNORE_futimesat	/* utimensat */
230*4882a593Smuzhiyun#define __IGNORE_getpgrp	/* getpgid */
231*4882a593Smuzhiyun#define __IGNORE_getdents	/* getdents64 */
232*4882a593Smuzhiyun#define __IGNORE_pause		/* sigsuspend */
233*4882a593Smuzhiyun#define __IGNORE_poll		/* ppoll */
234*4882a593Smuzhiyun#define __IGNORE_select		/* pselect6 */
235*4882a593Smuzhiyun#define __IGNORE_epoll_wait	/* epoll_pwait */
236*4882a593Smuzhiyun#define __IGNORE_time		/* gettimeofday */
237*4882a593Smuzhiyun#define __IGNORE_uname		/* newuname */
238*4882a593Smuzhiyun#define __IGNORE_ustat		/* statfs */
239*4882a593Smuzhiyun#define __IGNORE_utime		/* utimes */
240*4882a593Smuzhiyun#define __IGNORE_vfork		/* clone */
241*4882a593Smuzhiyun
242*4882a593Smuzhiyun/* sync_file_range had a stupid ABI. Allow sync_file_range2 instead */
243*4882a593Smuzhiyun#ifdef __NR_sync_file_range2
244*4882a593Smuzhiyun#define __IGNORE_sync_file_range
245*4882a593Smuzhiyun#endif
246*4882a593Smuzhiyun
247*4882a593Smuzhiyun/* Unmerged syscalls for AFS, STREAMS, etc. */
248*4882a593Smuzhiyun#define __IGNORE_afs_syscall
249*4882a593Smuzhiyun#define __IGNORE_getpmsg
250*4882a593Smuzhiyun#define __IGNORE_putpmsg
251*4882a593Smuzhiyun#define __IGNORE_vserver
252*4882a593SmuzhiyunEOF
253*4882a593Smuzhiyun}
254*4882a593Smuzhiyun
255*4882a593Smuzhiyunsyscall_list() {
256*4882a593Smuzhiyun    grep '^[0-9]' "$1" | sort -n |
257*4882a593Smuzhiyun	while read nr abi name entry ; do
258*4882a593Smuzhiyun		echo "#if !defined(__NR_${name}) && !defined(__IGNORE_${name})"
259*4882a593Smuzhiyun		echo "#warning syscall ${name} not implemented"
260*4882a593Smuzhiyun		echo "#endif"
261*4882a593Smuzhiyun	done
262*4882a593Smuzhiyun}
263*4882a593Smuzhiyun
264*4882a593Smuzhiyun(ignore_list && syscall_list $(dirname $0)/../arch/x86/entry/syscalls/syscall_32.tbl) | \
265*4882a593Smuzhiyun$* -E -x c - > /dev/null
266