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