1*53ee8cc1Swenshuai.xi#!/bin/sh 2*53ee8cc1Swenshuai.xi# 3*53ee8cc1Swenshuai.xi# Check if current architecture are missing any function calls compared 4*53ee8cc1Swenshuai.xi# to i386. 5*53ee8cc1Swenshuai.xi# i386 define a number of legacy system calls that are i386 specific 6*53ee8cc1Swenshuai.xi# and listed below so they are ignored. 7*53ee8cc1Swenshuai.xi# 8*53ee8cc1Swenshuai.xi# Usage: 9*53ee8cc1Swenshuai.xi# checksyscalls.sh gcc gcc-options 10*53ee8cc1Swenshuai.xi# 11*53ee8cc1Swenshuai.xi 12*53ee8cc1Swenshuai.xiignore_list() { 13*53ee8cc1Swenshuai.xicat << EOF 14*53ee8cc1Swenshuai.xi#include <asm/types.h> 15*53ee8cc1Swenshuai.xi#include <asm/unistd.h> 16*53ee8cc1Swenshuai.xi 17*53ee8cc1Swenshuai.xi/* *at */ 18*53ee8cc1Swenshuai.xi#define __IGNORE_open /* openat */ 19*53ee8cc1Swenshuai.xi#define __IGNORE_link /* linkat */ 20*53ee8cc1Swenshuai.xi#define __IGNORE_unlink /* unlinkat */ 21*53ee8cc1Swenshuai.xi#define __IGNORE_mknod /* mknodat */ 22*53ee8cc1Swenshuai.xi#define __IGNORE_chmod /* fchmodat */ 23*53ee8cc1Swenshuai.xi#define __IGNORE_chown /* fchownat */ 24*53ee8cc1Swenshuai.xi#define __IGNORE_mkdir /* mkdirat */ 25*53ee8cc1Swenshuai.xi#define __IGNORE_rmdir /* unlinkat */ 26*53ee8cc1Swenshuai.xi#define __IGNORE_lchown /* fchownat */ 27*53ee8cc1Swenshuai.xi#define __IGNORE_access /* faccessat */ 28*53ee8cc1Swenshuai.xi#define __IGNORE_rename /* renameat */ 29*53ee8cc1Swenshuai.xi#define __IGNORE_readlink /* readlinkat */ 30*53ee8cc1Swenshuai.xi#define __IGNORE_symlink /* symlinkat */ 31*53ee8cc1Swenshuai.xi#define __IGNORE_utimes /* futimesat */ 32*53ee8cc1Swenshuai.xi#if BITS_PER_LONG == 64 33*53ee8cc1Swenshuai.xi#define __IGNORE_stat /* fstatat */ 34*53ee8cc1Swenshuai.xi#define __IGNORE_lstat /* fstatat */ 35*53ee8cc1Swenshuai.xi#else 36*53ee8cc1Swenshuai.xi#define __IGNORE_stat64 /* fstatat64 */ 37*53ee8cc1Swenshuai.xi#define __IGNORE_lstat64 /* fstatat64 */ 38*53ee8cc1Swenshuai.xi#endif 39*53ee8cc1Swenshuai.xi 40*53ee8cc1Swenshuai.xi/* CLOEXEC flag */ 41*53ee8cc1Swenshuai.xi#define __IGNORE_pipe /* pipe2 */ 42*53ee8cc1Swenshuai.xi#define __IGNORE_dup2 /* dup3 */ 43*53ee8cc1Swenshuai.xi#define __IGNORE_epoll_create /* epoll_create1 */ 44*53ee8cc1Swenshuai.xi#define __IGNORE_inotify_init /* inotify_init1 */ 45*53ee8cc1Swenshuai.xi#define __IGNORE_eventfd /* eventfd2 */ 46*53ee8cc1Swenshuai.xi#define __IGNORE_signalfd /* signalfd4 */ 47*53ee8cc1Swenshuai.xi 48*53ee8cc1Swenshuai.xi/* MMU */ 49*53ee8cc1Swenshuai.xi#ifndef CONFIG_MMU 50*53ee8cc1Swenshuai.xi#define __IGNORE_madvise 51*53ee8cc1Swenshuai.xi#define __IGNORE_mbind 52*53ee8cc1Swenshuai.xi#define __IGNORE_mincore 53*53ee8cc1Swenshuai.xi#define __IGNORE_mlock 54*53ee8cc1Swenshuai.xi#define __IGNORE_mlockall 55*53ee8cc1Swenshuai.xi#define __IGNORE_munlock 56*53ee8cc1Swenshuai.xi#define __IGNORE_munlockall 57*53ee8cc1Swenshuai.xi#define __IGNORE_mprotect 58*53ee8cc1Swenshuai.xi#define __IGNORE_msync 59*53ee8cc1Swenshuai.xi#define __IGNORE_migrate_pages 60*53ee8cc1Swenshuai.xi#define __IGNORE_move_pages 61*53ee8cc1Swenshuai.xi#define __IGNORE_remap_file_pages 62*53ee8cc1Swenshuai.xi#define __IGNORE_get_mempolicy 63*53ee8cc1Swenshuai.xi#define __IGNORE_set_mempolicy 64*53ee8cc1Swenshuai.xi#define __IGNORE_swapoff 65*53ee8cc1Swenshuai.xi#define __IGNORE_swapon 66*53ee8cc1Swenshuai.xi#endif 67*53ee8cc1Swenshuai.xi 68*53ee8cc1Swenshuai.xi/* System calls for 32-bit kernels only */ 69*53ee8cc1Swenshuai.xi#if BITS_PER_LONG == 64 70*53ee8cc1Swenshuai.xi#define __IGNORE_sendfile64 71*53ee8cc1Swenshuai.xi#define __IGNORE_ftruncate64 72*53ee8cc1Swenshuai.xi#define __IGNORE_truncate64 73*53ee8cc1Swenshuai.xi#define __IGNORE_stat64 74*53ee8cc1Swenshuai.xi#define __IGNORE_lstat64 75*53ee8cc1Swenshuai.xi#define __IGNORE_fstat64 76*53ee8cc1Swenshuai.xi#define __IGNORE_fcntl64 77*53ee8cc1Swenshuai.xi#define __IGNORE_fadvise64_64 78*53ee8cc1Swenshuai.xi#define __IGNORE_fstatat64 79*53ee8cc1Swenshuai.xi#define __IGNORE_fstatfs64 80*53ee8cc1Swenshuai.xi#define __IGNORE_statfs64 81*53ee8cc1Swenshuai.xi#define __IGNORE_llseek 82*53ee8cc1Swenshuai.xi#define __IGNORE_mmap2 83*53ee8cc1Swenshuai.xi#else 84*53ee8cc1Swenshuai.xi#define __IGNORE_sendfile 85*53ee8cc1Swenshuai.xi#define __IGNORE_ftruncate 86*53ee8cc1Swenshuai.xi#define __IGNORE_truncate 87*53ee8cc1Swenshuai.xi#define __IGNORE_stat 88*53ee8cc1Swenshuai.xi#define __IGNORE_lstat 89*53ee8cc1Swenshuai.xi#define __IGNORE_fstat 90*53ee8cc1Swenshuai.xi#define __IGNORE_fcntl 91*53ee8cc1Swenshuai.xi#define __IGNORE_fadvise64 92*53ee8cc1Swenshuai.xi#define __IGNORE_newfstatat 93*53ee8cc1Swenshuai.xi#define __IGNORE_fstatfs 94*53ee8cc1Swenshuai.xi#define __IGNORE_statfs 95*53ee8cc1Swenshuai.xi#define __IGNORE_lseek 96*53ee8cc1Swenshuai.xi#define __IGNORE_mmap 97*53ee8cc1Swenshuai.xi#endif 98*53ee8cc1Swenshuai.xi 99*53ee8cc1Swenshuai.xi/* i386-specific or historical system calls */ 100*53ee8cc1Swenshuai.xi#define __IGNORE_break 101*53ee8cc1Swenshuai.xi#define __IGNORE_stty 102*53ee8cc1Swenshuai.xi#define __IGNORE_gtty 103*53ee8cc1Swenshuai.xi#define __IGNORE_ftime 104*53ee8cc1Swenshuai.xi#define __IGNORE_prof 105*53ee8cc1Swenshuai.xi#define __IGNORE_lock 106*53ee8cc1Swenshuai.xi#define __IGNORE_mpx 107*53ee8cc1Swenshuai.xi#define __IGNORE_ulimit 108*53ee8cc1Swenshuai.xi#define __IGNORE_profil 109*53ee8cc1Swenshuai.xi#define __IGNORE_ioperm 110*53ee8cc1Swenshuai.xi#define __IGNORE_iopl 111*53ee8cc1Swenshuai.xi#define __IGNORE_idle 112*53ee8cc1Swenshuai.xi#define __IGNORE_modify_ldt 113*53ee8cc1Swenshuai.xi#define __IGNORE_ugetrlimit 114*53ee8cc1Swenshuai.xi#define __IGNORE_vm86 115*53ee8cc1Swenshuai.xi#define __IGNORE_vm86old 116*53ee8cc1Swenshuai.xi#define __IGNORE_set_thread_area 117*53ee8cc1Swenshuai.xi#define __IGNORE_get_thread_area 118*53ee8cc1Swenshuai.xi#define __IGNORE_madvise1 119*53ee8cc1Swenshuai.xi#define __IGNORE_oldstat 120*53ee8cc1Swenshuai.xi#define __IGNORE_oldfstat 121*53ee8cc1Swenshuai.xi#define __IGNORE_oldlstat 122*53ee8cc1Swenshuai.xi#define __IGNORE_oldolduname 123*53ee8cc1Swenshuai.xi#define __IGNORE_olduname 124*53ee8cc1Swenshuai.xi#define __IGNORE_umount 125*53ee8cc1Swenshuai.xi#define __IGNORE_waitpid 126*53ee8cc1Swenshuai.xi#define __IGNORE_stime 127*53ee8cc1Swenshuai.xi#define __IGNORE_nice 128*53ee8cc1Swenshuai.xi#define __IGNORE_signal 129*53ee8cc1Swenshuai.xi#define __IGNORE_sigaction 130*53ee8cc1Swenshuai.xi#define __IGNORE_sgetmask 131*53ee8cc1Swenshuai.xi#define __IGNORE_sigsuspend 132*53ee8cc1Swenshuai.xi#define __IGNORE_sigpending 133*53ee8cc1Swenshuai.xi#define __IGNORE_ssetmask 134*53ee8cc1Swenshuai.xi#define __IGNORE_readdir 135*53ee8cc1Swenshuai.xi#define __IGNORE_socketcall 136*53ee8cc1Swenshuai.xi#define __IGNORE_ipc 137*53ee8cc1Swenshuai.xi#define __IGNORE_sigreturn 138*53ee8cc1Swenshuai.xi#define __IGNORE_sigprocmask 139*53ee8cc1Swenshuai.xi#define __IGNORE_bdflush 140*53ee8cc1Swenshuai.xi#define __IGNORE__llseek 141*53ee8cc1Swenshuai.xi#define __IGNORE__newselect 142*53ee8cc1Swenshuai.xi#define __IGNORE_create_module 143*53ee8cc1Swenshuai.xi#define __IGNORE_query_module 144*53ee8cc1Swenshuai.xi#define __IGNORE_get_kernel_syms 145*53ee8cc1Swenshuai.xi#define __IGNORE_sysfs 146*53ee8cc1Swenshuai.xi#define __IGNORE_uselib 147*53ee8cc1Swenshuai.xi#define __IGNORE__sysctl 148*53ee8cc1Swenshuai.xi 149*53ee8cc1Swenshuai.xi/* ... including the "new" 32-bit uid syscalls */ 150*53ee8cc1Swenshuai.xi#define __IGNORE_lchown32 151*53ee8cc1Swenshuai.xi#define __IGNORE_getuid32 152*53ee8cc1Swenshuai.xi#define __IGNORE_getgid32 153*53ee8cc1Swenshuai.xi#define __IGNORE_geteuid32 154*53ee8cc1Swenshuai.xi#define __IGNORE_getegid32 155*53ee8cc1Swenshuai.xi#define __IGNORE_setreuid32 156*53ee8cc1Swenshuai.xi#define __IGNORE_setregid32 157*53ee8cc1Swenshuai.xi#define __IGNORE_getgroups32 158*53ee8cc1Swenshuai.xi#define __IGNORE_setgroups32 159*53ee8cc1Swenshuai.xi#define __IGNORE_fchown32 160*53ee8cc1Swenshuai.xi#define __IGNORE_setresuid32 161*53ee8cc1Swenshuai.xi#define __IGNORE_getresuid32 162*53ee8cc1Swenshuai.xi#define __IGNORE_setresgid32 163*53ee8cc1Swenshuai.xi#define __IGNORE_getresgid32 164*53ee8cc1Swenshuai.xi#define __IGNORE_chown32 165*53ee8cc1Swenshuai.xi#define __IGNORE_setuid32 166*53ee8cc1Swenshuai.xi#define __IGNORE_setgid32 167*53ee8cc1Swenshuai.xi#define __IGNORE_setfsuid32 168*53ee8cc1Swenshuai.xi#define __IGNORE_setfsgid32 169*53ee8cc1Swenshuai.xi 170*53ee8cc1Swenshuai.xi/* these can be expressed using other calls */ 171*53ee8cc1Swenshuai.xi#define __IGNORE_alarm /* setitimer */ 172*53ee8cc1Swenshuai.xi#define __IGNORE_creat /* open */ 173*53ee8cc1Swenshuai.xi#define __IGNORE_fork /* clone */ 174*53ee8cc1Swenshuai.xi#define __IGNORE_futimesat /* utimensat */ 175*53ee8cc1Swenshuai.xi#define __IGNORE_getpgrp /* getpgid */ 176*53ee8cc1Swenshuai.xi#define __IGNORE_getdents /* getdents64 */ 177*53ee8cc1Swenshuai.xi#define __IGNORE_pause /* sigsuspend */ 178*53ee8cc1Swenshuai.xi#define __IGNORE_poll /* ppoll */ 179*53ee8cc1Swenshuai.xi#define __IGNORE_select /* pselect6 */ 180*53ee8cc1Swenshuai.xi#define __IGNORE_epoll_wait /* epoll_pwait */ 181*53ee8cc1Swenshuai.xi#define __IGNORE_time /* gettimeofday */ 182*53ee8cc1Swenshuai.xi#define __IGNORE_uname /* newuname */ 183*53ee8cc1Swenshuai.xi#define __IGNORE_ustat /* statfs */ 184*53ee8cc1Swenshuai.xi#define __IGNORE_utime /* utimes */ 185*53ee8cc1Swenshuai.xi#define __IGNORE_vfork /* clone */ 186*53ee8cc1Swenshuai.xi 187*53ee8cc1Swenshuai.xi/* sync_file_range had a stupid ABI. Allow sync_file_range2 instead */ 188*53ee8cc1Swenshuai.xi#ifdef __NR_sync_file_range2 189*53ee8cc1Swenshuai.xi#define __IGNORE_sync_file_range 190*53ee8cc1Swenshuai.xi#endif 191*53ee8cc1Swenshuai.xi 192*53ee8cc1Swenshuai.xi/* Unmerged syscalls for AFS, STREAMS, etc. */ 193*53ee8cc1Swenshuai.xi#define __IGNORE_afs_syscall 194*53ee8cc1Swenshuai.xi#define __IGNORE_getpmsg 195*53ee8cc1Swenshuai.xi#define __IGNORE_putpmsg 196*53ee8cc1Swenshuai.xi#define __IGNORE_vserver 197*53ee8cc1Swenshuai.xiEOF 198*53ee8cc1Swenshuai.xi} 199*53ee8cc1Swenshuai.xi 200*53ee8cc1Swenshuai.xisyscall_list() { 201*53ee8cc1Swenshuai.xised -n -e '/^\#define/ s/[^_]*__NR_\([^[:space:]]*\).*/\ 202*53ee8cc1Swenshuai.xi\#if !defined \(__NR_\1\) \&\& !defined \(__IGNORE_\1\)\ 203*53ee8cc1Swenshuai.xi\#warning syscall \1 not implemented\ 204*53ee8cc1Swenshuai.xi\#endif/p' $1 205*53ee8cc1Swenshuai.xi} 206*53ee8cc1Swenshuai.xi 207*53ee8cc1Swenshuai.xi 208