linux/scripts/checksyscalls.sh
<<
>>
Prefs
   1#!/bin/sh
   2#
   3# Check if current architecture are missing any function calls compared
   4# to i386.
   5# i386 define a number of legacy system calls that are i386 specific
   6# and listed below so they are ignored.
   7#
   8# Usage:
   9# syscallchk gcc gcc-options
  10#
  11
  12ignore_list() {
  13cat << EOF
  14#include <asm/types.h>
  15#include <asm/unistd.h>
  16
  17/* System calls for 32-bit kernels only */
  18#if BITS_PER_LONG == 64
  19#define __IGNORE_sendfile64
  20#define __IGNORE_ftruncate64
  21#define __IGNORE_truncate64
  22#define __IGNORE_stat64
  23#define __IGNORE_lstat64
  24#define __IGNORE_fstat64
  25#define __IGNORE_fcntl64
  26#define __IGNORE_fadvise64_64
  27#define __IGNORE_fstatat64
  28#define __IGNORE_fstatfs64
  29#define __IGNORE_statfs64
  30#endif
  31
  32/* i386-specific or historical system calls */
  33#define __IGNORE_break
  34#define __IGNORE_stty
  35#define __IGNORE_gtty
  36#define __IGNORE_ftime
  37#define __IGNORE_prof
  38#define __IGNORE_lock
  39#define __IGNORE_mpx
  40#define __IGNORE_ulimit
  41#define __IGNORE_profil
  42#define __IGNORE_ioperm
  43#define __IGNORE_iopl
  44#define __IGNORE_idle
  45#define __IGNORE_modify_ldt
  46#define __IGNORE_ugetrlimit
  47#define __IGNORE_mmap2
  48#define __IGNORE_vm86
  49#define __IGNORE_vm86old
  50#define __IGNORE_set_thread_area
  51#define __IGNORE_get_thread_area
  52#define __IGNORE_madvise1
  53#define __IGNORE_oldstat
  54#define __IGNORE_oldfstat
  55#define __IGNORE_oldlstat
  56#define __IGNORE_oldolduname
  57#define __IGNORE_olduname
  58#define __IGNORE_umount2
  59#define __IGNORE_umount
  60#define __IGNORE_waitpid
  61#define __IGNORE_stime
  62#define __IGNORE_nice
  63#define __IGNORE_signal
  64#define __IGNORE_sigaction
  65#define __IGNORE_sgetmask
  66#define __IGNORE_sigsuspend
  67#define __IGNORE_sigpending
  68#define __IGNORE_ssetmask
  69#define __IGNORE_readdir
  70#define __IGNORE_socketcall
  71#define __IGNORE_ipc
  72#define __IGNORE_sigreturn
  73#define __IGNORE_sigprocmask
  74#define __IGNORE_bdflush
  75#define __IGNORE__llseek
  76#define __IGNORE__newselect
  77#define __IGNORE_create_module
  78#define __IGNORE_delete_module
  79#define __IGNORE_query_module
  80#define __IGNORE_get_kernel_syms
  81/* ... including the "new" 32-bit uid syscalls */
  82#define __IGNORE_lchown32
  83#define __IGNORE_getuid32
  84#define __IGNORE_getgid32
  85#define __IGNORE_geteuid32
  86#define __IGNORE_getegid32
  87#define __IGNORE_setreuid32
  88#define __IGNORE_setregid32
  89#define __IGNORE_getgroups32
  90#define __IGNORE_setgroups32
  91#define __IGNORE_fchown32
  92#define __IGNORE_setresuid32
  93#define __IGNORE_getresuid32
  94#define __IGNORE_setresgid32
  95#define __IGNORE_getresgid32
  96#define __IGNORE_chown32
  97#define __IGNORE_setuid32
  98#define __IGNORE_setgid32
  99#define __IGNORE_setfsuid32
 100#define __IGNORE_setfsgid32
 101
 102/* sync_file_range had a stupid ABI. Allow sync_file_range2 instead */
 103#ifdef __NR_sync_file_range2
 104#define __IGNORE_sync_file_range
 105#endif
 106
 107/* Unmerged syscalls for AFS, STREAMS, etc. */
 108#define __IGNORE_afs_syscall
 109#define __IGNORE_getpmsg
 110#define __IGNORE_putpmsg
 111#define __IGNORE_vserver
 112EOF
 113}
 114
 115syscall_list() {
 116sed -n -e '/^\#define/ { s/[^_]*__NR_\([^[:space:]]*\).*/\
 117\#if !defined \(__NR_\1\) \&\& !defined \(__IGNORE_\1\)\
 118\#warning syscall \1 not implemented\
 119\#endif/p }' $1
 120}
 121
 122(ignore_list && syscall_list ${srctree}/include/asm-x86/unistd_32.h) | \
 123$* -E -x c - > /dev/null
 124