xref: /linux-6.15/scripts/checksyscalls.sh (revision 12871a15)
1c53aeca0SSam Ravnborg#!/bin/sh
2b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0
3c53aeca0SSam Ravnborg#
4c53aeca0SSam Ravnborg# Check if current architecture are missing any function calls compared
5c53aeca0SSam Ravnborg# to i386.
6c53aeca0SSam Ravnborg# i386 define a number of legacy system calls that are i386 specific
7c53aeca0SSam Ravnborg# and listed below so they are ignored.
8c53aeca0SSam Ravnborg#
9c53aeca0SSam Ravnborg# Usage:
106e5f6856SGeert Uytterhoeven# checksyscalls.sh gcc gcc-options
11c53aeca0SSam Ravnborg#
12c53aeca0SSam Ravnborg
13c53aeca0SSam Ravnborgignore_list() {
14c53aeca0SSam Ravnborgcat << EOF
15c53aeca0SSam Ravnborg#include <asm/types.h>
16c53aeca0SSam Ravnborg#include <asm/unistd.h>
17c53aeca0SSam Ravnborg
18e64a1617SArnd Bergmann/* *at */
19e64a1617SArnd Bergmann#define __IGNORE_open		/* openat */
20e64a1617SArnd Bergmann#define __IGNORE_link		/* linkat */
21e64a1617SArnd Bergmann#define __IGNORE_unlink		/* unlinkat */
22e64a1617SArnd Bergmann#define __IGNORE_mknod		/* mknodat */
23e64a1617SArnd Bergmann#define __IGNORE_chmod		/* fchmodat */
24e64a1617SArnd Bergmann#define __IGNORE_chown		/* fchownat */
25e64a1617SArnd Bergmann#define __IGNORE_mkdir		/* mkdirat */
26e64a1617SArnd Bergmann#define __IGNORE_rmdir		/* unlinkat */
27e64a1617SArnd Bergmann#define __IGNORE_lchown		/* fchownat */
28e64a1617SArnd Bergmann#define __IGNORE_access		/* faccessat */
2968b77524SJames Hogan#define __IGNORE_rename		/* renameat2 */
30e64a1617SArnd Bergmann#define __IGNORE_readlink	/* readlinkat */
31e64a1617SArnd Bergmann#define __IGNORE_symlink	/* symlinkat */
32e64a1617SArnd Bergmann#define __IGNORE_utimes		/* futimesat */
33e64a1617SArnd Bergmann#define __IGNORE_stat		/* fstatat */
34e64a1617SArnd Bergmann#define __IGNORE_lstat		/* fstatat */
35e64a1617SArnd Bergmann#define __IGNORE_stat64		/* fstatat64 */
36e64a1617SArnd Bergmann#define __IGNORE_lstat64	/* fstatat64 */
37e64a1617SArnd Bergmann
3880d7da1cSYury Norov#ifndef __ARCH_WANT_SET_GET_RLIMIT
3980d7da1cSYury Norov#define __IGNORE_getrlimit	/* getrlimit */
4080d7da1cSYury Norov#define __IGNORE_setrlimit	/* setrlimit */
4180d7da1cSYury Norov#endif
4280d7da1cSYury Norov
437bb7f2acSMike Rapoport#ifndef __ARCH_WANT_MEMFD_SECRET
447bb7f2acSMike Rapoport#define __IGNORE_memfd_secret
457bb7f2acSMike Rapoport#endif
467bb7f2acSMike Rapoport
4768b77524SJames Hogan/* Missing flags argument */
4868b77524SJames Hogan#define __IGNORE_renameat	/* renameat2 */
4968b77524SJames Hogan
50e64a1617SArnd Bergmann/* CLOEXEC flag */
51e64a1617SArnd Bergmann#define __IGNORE_pipe		/* pipe2 */
52e64a1617SArnd Bergmann#define __IGNORE_dup2		/* dup3 */
53e64a1617SArnd Bergmann#define __IGNORE_epoll_create	/* epoll_create1 */
54e64a1617SArnd Bergmann#define __IGNORE_inotify_init	/* inotify_init1 */
55e64a1617SArnd Bergmann#define __IGNORE_eventfd	/* eventfd2 */
56e64a1617SArnd Bergmann#define __IGNORE_signalfd	/* signalfd4 */
57e64a1617SArnd Bergmann
58e64a1617SArnd Bergmann/* MMU */
59e64a1617SArnd Bergmann#ifndef CONFIG_MMU
60e64a1617SArnd Bergmann#define __IGNORE_madvise
61e64a1617SArnd Bergmann#define __IGNORE_mbind
62e64a1617SArnd Bergmann#define __IGNORE_mincore
63e64a1617SArnd Bergmann#define __IGNORE_mlock
64e64a1617SArnd Bergmann#define __IGNORE_mlockall
65e64a1617SArnd Bergmann#define __IGNORE_munlock
66e64a1617SArnd Bergmann#define __IGNORE_munlockall
67e64a1617SArnd Bergmann#define __IGNORE_mprotect
68e64a1617SArnd Bergmann#define __IGNORE_msync
69e64a1617SArnd Bergmann#define __IGNORE_migrate_pages
70e64a1617SArnd Bergmann#define __IGNORE_move_pages
71e64a1617SArnd Bergmann#define __IGNORE_remap_file_pages
72e64a1617SArnd Bergmann#define __IGNORE_get_mempolicy
73e64a1617SArnd Bergmann#define __IGNORE_set_mempolicy
74e64a1617SArnd Bergmann#define __IGNORE_swapoff
75e64a1617SArnd Bergmann#define __IGNORE_swapon
76e64a1617SArnd Bergmann#endif
77e64a1617SArnd Bergmann
78c53aeca0SSam Ravnborg/* System calls for 32-bit kernels only */
79c53aeca0SSam Ravnborg#if BITS_PER_LONG == 64
80c53aeca0SSam Ravnborg#define __IGNORE_sendfile64
81c53aeca0SSam Ravnborg#define __IGNORE_ftruncate64
82c53aeca0SSam Ravnborg#define __IGNORE_truncate64
83c53aeca0SSam Ravnborg#define __IGNORE_stat64
84c53aeca0SSam Ravnborg#define __IGNORE_lstat64
85c53aeca0SSam Ravnborg#define __IGNORE_fcntl64
86c53aeca0SSam Ravnborg#define __IGNORE_fadvise64_64
87c53aeca0SSam Ravnborg#define __IGNORE_fstatfs64
88c53aeca0SSam Ravnborg#define __IGNORE_statfs64
89e64a1617SArnd Bergmann#define __IGNORE_llseek
90e64a1617SArnd Bergmann#define __IGNORE_mmap2
9148166e6eSArnd Bergmann#define __IGNORE_clock_gettime64
9248166e6eSArnd Bergmann#define __IGNORE_clock_settime64
9348166e6eSArnd Bergmann#define __IGNORE_clock_adjtime64
9448166e6eSArnd Bergmann#define __IGNORE_clock_getres_time64
9548166e6eSArnd Bergmann#define __IGNORE_clock_nanosleep_time64
9648166e6eSArnd Bergmann#define __IGNORE_timer_gettime64
9748166e6eSArnd Bergmann#define __IGNORE_timer_settime64
9848166e6eSArnd Bergmann#define __IGNORE_timerfd_gettime64
9948166e6eSArnd Bergmann#define __IGNORE_timerfd_settime64
10048166e6eSArnd Bergmann#define __IGNORE_utimensat_time64
10148166e6eSArnd Bergmann#define __IGNORE_pselect6_time64
10248166e6eSArnd Bergmann#define __IGNORE_ppoll_time64
10348166e6eSArnd Bergmann#define __IGNORE_io_pgetevents_time64
10448166e6eSArnd Bergmann#define __IGNORE_recvmmsg_time64
10548166e6eSArnd Bergmann#define __IGNORE_mq_timedsend_time64
10648166e6eSArnd Bergmann#define __IGNORE_mq_timedreceive_time64
10748166e6eSArnd Bergmann#define __IGNORE_semtimedop_time64
10848166e6eSArnd Bergmann#define __IGNORE_rt_sigtimedwait_time64
10948166e6eSArnd Bergmann#define __IGNORE_futex_time64
11048166e6eSArnd Bergmann#define __IGNORE_sched_rr_get_interval_time64
111e64a1617SArnd Bergmann#else
112e64a1617SArnd Bergmann#define __IGNORE_sendfile
113e64a1617SArnd Bergmann#define __IGNORE_ftruncate
114e64a1617SArnd Bergmann#define __IGNORE_truncate
115e64a1617SArnd Bergmann#define __IGNORE_stat
116e64a1617SArnd Bergmann#define __IGNORE_lstat
117e64a1617SArnd Bergmann#define __IGNORE_fcntl
118e64a1617SArnd Bergmann#define __IGNORE_fadvise64
119e64a1617SArnd Bergmann#define __IGNORE_newfstatat
120e64a1617SArnd Bergmann#define __IGNORE_fstatfs
121e64a1617SArnd Bergmann#define __IGNORE_statfs
122e64a1617SArnd Bergmann#define __IGNORE_lseek
123e64a1617SArnd Bergmann#define __IGNORE_mmap
12448166e6eSArnd Bergmann#define __IGNORE_clock_gettime
12548166e6eSArnd Bergmann#define __IGNORE_clock_settime
12648166e6eSArnd Bergmann#define __IGNORE_clock_adjtime
12748166e6eSArnd Bergmann#define __IGNORE_clock_getres
12848166e6eSArnd Bergmann#define __IGNORE_clock_nanosleep
12948166e6eSArnd Bergmann#define __IGNORE_timer_gettime
13048166e6eSArnd Bergmann#define __IGNORE_timer_settime
13148166e6eSArnd Bergmann#define __IGNORE_timerfd_gettime
13248166e6eSArnd Bergmann#define __IGNORE_timerfd_settime
13348166e6eSArnd Bergmann#define __IGNORE_utimensat
13448166e6eSArnd Bergmann#define __IGNORE_pselect6
13548166e6eSArnd Bergmann#define __IGNORE_ppoll
13648166e6eSArnd Bergmann#define __IGNORE_io_pgetevents
13748166e6eSArnd Bergmann#define __IGNORE_recvmmsg
13848166e6eSArnd Bergmann#define __IGNORE_mq_timedsend
1391d5b8233SArnd Bergmann#define __IGNORE_mq_timedreceive
14048166e6eSArnd Bergmann#define __IGNORE_semtimedop
14148166e6eSArnd Bergmann#define __IGNORE_rt_sigtimedwait
14248166e6eSArnd Bergmann#define __IGNORE_futex
14348166e6eSArnd Bergmann#define __IGNORE_sched_rr_get_interval
144c8ce48f0SArnd Bergmann#define __IGNORE_gettimeofday
145c8ce48f0SArnd Bergmann#define __IGNORE_settimeofday
146c8ce48f0SArnd Bergmann#define __IGNORE_wait4
147c8ce48f0SArnd Bergmann#define __IGNORE_adjtimex
148c8ce48f0SArnd Bergmann#define __IGNORE_nanosleep
149c8ce48f0SArnd Bergmann#define __IGNORE_io_getevents
150c8ce48f0SArnd Bergmann#define __IGNORE_recvmmsg
151c53aeca0SSam Ravnborg#endif
152c53aeca0SSam Ravnborg
153c53aeca0SSam Ravnborg/* i386-specific or historical system calls */
154c53aeca0SSam Ravnborg#define __IGNORE_break
155c53aeca0SSam Ravnborg#define __IGNORE_stty
156c53aeca0SSam Ravnborg#define __IGNORE_gtty
157c53aeca0SSam Ravnborg#define __IGNORE_ftime
158c53aeca0SSam Ravnborg#define __IGNORE_prof
159c53aeca0SSam Ravnborg#define __IGNORE_lock
160c53aeca0SSam Ravnborg#define __IGNORE_mpx
161c53aeca0SSam Ravnborg#define __IGNORE_ulimit
162c53aeca0SSam Ravnborg#define __IGNORE_profil
163c53aeca0SSam Ravnborg#define __IGNORE_ioperm
164c53aeca0SSam Ravnborg#define __IGNORE_iopl
165c53aeca0SSam Ravnborg#define __IGNORE_idle
166c53aeca0SSam Ravnborg#define __IGNORE_modify_ldt
167c53aeca0SSam Ravnborg#define __IGNORE_ugetrlimit
168c53aeca0SSam Ravnborg#define __IGNORE_vm86
169c53aeca0SSam Ravnborg#define __IGNORE_vm86old
170c53aeca0SSam Ravnborg#define __IGNORE_set_thread_area
171c53aeca0SSam Ravnborg#define __IGNORE_get_thread_area
172c53aeca0SSam Ravnborg#define __IGNORE_madvise1
173c53aeca0SSam Ravnborg#define __IGNORE_oldstat
174c53aeca0SSam Ravnborg#define __IGNORE_oldfstat
175c53aeca0SSam Ravnborg#define __IGNORE_oldlstat
176c53aeca0SSam Ravnborg#define __IGNORE_oldolduname
177c53aeca0SSam Ravnborg#define __IGNORE_olduname
178c53aeca0SSam Ravnborg#define __IGNORE_umount
179c53aeca0SSam Ravnborg#define __IGNORE_waitpid
180c53aeca0SSam Ravnborg#define __IGNORE_stime
181c53aeca0SSam Ravnborg#define __IGNORE_nice
182c53aeca0SSam Ravnborg#define __IGNORE_signal
183c53aeca0SSam Ravnborg#define __IGNORE_sigaction
184c53aeca0SSam Ravnborg#define __IGNORE_sgetmask
185c53aeca0SSam Ravnborg#define __IGNORE_sigsuspend
186c53aeca0SSam Ravnborg#define __IGNORE_sigpending
187c53aeca0SSam Ravnborg#define __IGNORE_ssetmask
188c53aeca0SSam Ravnborg#define __IGNORE_readdir
189c53aeca0SSam Ravnborg#define __IGNORE_socketcall
190c53aeca0SSam Ravnborg#define __IGNORE_ipc
191c53aeca0SSam Ravnborg#define __IGNORE_sigreturn
192c53aeca0SSam Ravnborg#define __IGNORE_sigprocmask
193c53aeca0SSam Ravnborg#define __IGNORE_bdflush
194c53aeca0SSam Ravnborg#define __IGNORE__llseek
195c53aeca0SSam Ravnborg#define __IGNORE__newselect
196c53aeca0SSam Ravnborg#define __IGNORE_create_module
197c53aeca0SSam Ravnborg#define __IGNORE_query_module
198c53aeca0SSam Ravnborg#define __IGNORE_get_kernel_syms
199e64a1617SArnd Bergmann#define __IGNORE_sysfs
200e64a1617SArnd Bergmann#define __IGNORE_uselib
201e64a1617SArnd Bergmann#define __IGNORE__sysctl
202f3e45597SArnd Bergmann#define __IGNORE_arch_prctl
203930e1299SFiroz Khan#define __IGNORE_nfsservctl
204e64a1617SArnd Bergmann
205c53aeca0SSam Ravnborg/* ... including the "new" 32-bit uid syscalls */
206c53aeca0SSam Ravnborg#define __IGNORE_lchown32
207c53aeca0SSam Ravnborg#define __IGNORE_getuid32
208c53aeca0SSam Ravnborg#define __IGNORE_getgid32
209c53aeca0SSam Ravnborg#define __IGNORE_geteuid32
210c53aeca0SSam Ravnborg#define __IGNORE_getegid32
211c53aeca0SSam Ravnborg#define __IGNORE_setreuid32
212c53aeca0SSam Ravnborg#define __IGNORE_setregid32
213c53aeca0SSam Ravnborg#define __IGNORE_getgroups32
214c53aeca0SSam Ravnborg#define __IGNORE_setgroups32
215c53aeca0SSam Ravnborg#define __IGNORE_fchown32
216c53aeca0SSam Ravnborg#define __IGNORE_setresuid32
217c53aeca0SSam Ravnborg#define __IGNORE_getresuid32
218c53aeca0SSam Ravnborg#define __IGNORE_setresgid32
219c53aeca0SSam Ravnborg#define __IGNORE_getresgid32
220c53aeca0SSam Ravnborg#define __IGNORE_chown32
221c53aeca0SSam Ravnborg#define __IGNORE_setuid32
222c53aeca0SSam Ravnborg#define __IGNORE_setgid32
223c53aeca0SSam Ravnborg#define __IGNORE_setfsuid32
224c53aeca0SSam Ravnborg#define __IGNORE_setfsgid32
225c53aeca0SSam Ravnborg
226e64a1617SArnd Bergmann/* these can be expressed using other calls */
227e64a1617SArnd Bergmann#define __IGNORE_alarm		/* setitimer */
228e64a1617SArnd Bergmann#define __IGNORE_creat		/* open */
229e64a1617SArnd Bergmann#define __IGNORE_fork		/* clone */
230e64a1617SArnd Bergmann#define __IGNORE_futimesat	/* utimensat */
231e64a1617SArnd Bergmann#define __IGNORE_getpgrp	/* getpgid */
232e64a1617SArnd Bergmann#define __IGNORE_getdents	/* getdents64 */
233e64a1617SArnd Bergmann#define __IGNORE_pause		/* sigsuspend */
234e64a1617SArnd Bergmann#define __IGNORE_poll		/* ppoll */
235e64a1617SArnd Bergmann#define __IGNORE_select		/* pselect6 */
236e64a1617SArnd Bergmann#define __IGNORE_epoll_wait	/* epoll_pwait */
237e64a1617SArnd Bergmann#define __IGNORE_time		/* gettimeofday */
238e64a1617SArnd Bergmann#define __IGNORE_uname		/* newuname */
239e64a1617SArnd Bergmann#define __IGNORE_ustat		/* statfs */
240e64a1617SArnd Bergmann#define __IGNORE_utime		/* utimes */
241e64a1617SArnd Bergmann#define __IGNORE_vfork		/* clone */
242e64a1617SArnd Bergmann
243edd5cd4aSDavid Woodhouse/* sync_file_range had a stupid ABI. Allow sync_file_range2 instead */
244edd5cd4aSDavid Woodhouse#ifdef __NR_sync_file_range2
245edd5cd4aSDavid Woodhouse#define __IGNORE_sync_file_range
246edd5cd4aSDavid Woodhouse#endif
247edd5cd4aSDavid Woodhouse
248c53aeca0SSam Ravnborg/* Unmerged syscalls for AFS, STREAMS, etc. */
249c53aeca0SSam Ravnborg#define __IGNORE_afs_syscall
250c53aeca0SSam Ravnborg#define __IGNORE_getpmsg
251c53aeca0SSam Ravnborg#define __IGNORE_putpmsg
252c53aeca0SSam Ravnborg#define __IGNORE_vserver
2533ef6ca4fSPalmer Dabbelt
2543ef6ca4fSPalmer Dabbelt/* 64-bit ports never needed these, and new 32-bit ports can use statx */
2553ef6ca4fSPalmer Dabbelt#define __IGNORE_fstat64
2563ef6ca4fSPalmer Dabbelt#define __IGNORE_fstatat64
257*12871a15STiezhu Yang
258*12871a15STiezhu Yang/* Newer ports are not required to provide fstat in favor of statx */
259*12871a15STiezhu Yang#define __IGNORE_fstat
260c53aeca0SSam RavnborgEOF
261c53aeca0SSam Ravnborg}
262c53aeca0SSam Ravnborg
263c53aeca0SSam Ravnborgsyscall_list() {
264d21832e2SArnd Bergmann    grep '^[0-9]' "$1" | sort -n |
26529dc54c6SH. Peter Anvin	while read nr abi name entry ; do
266d21832e2SArnd Bergmann		echo "#if !defined(__NR_${name}) && !defined(__IGNORE_${name})"
267d21832e2SArnd Bergmann		echo "#warning syscall ${name} not implemented"
268d21832e2SArnd Bergmann		echo "#endif"
26929dc54c6SH. Peter Anvin	done
270c53aeca0SSam Ravnborg}
271c53aeca0SSam Ravnborg
2721f57d5d8SIngo Molnar(ignore_list && syscall_list $(dirname $0)/../arch/x86/entry/syscalls/syscall_32.tbl) | \
273f4d40868SVincent Mailhol$* -Wno-error -Wno-unused-macros -E -x c - > /dev/null
274