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