1 #!/bin/sh 2 # SPDX-License-Identifier: GPL-2.0-only 3 # 4 # Generate a syscall number header. 5 # 6 # Each line of the syscall table should have the following format: 7 # 8 # NR ABI NAME [NATIVE] [COMPAT] 9 # 10 # NR syscall number 11 # ABI ABI name 12 # NAME syscall name 13 # NATIVE native entry point (optional) 14 # COMPAT compat entry point (optional) 15 16 set -e 17 18 usage() { 19 echo >&2 "usage: $0 [--abis ABIS] [--emit-nr] [--offset OFFSET] [--prefix PREFIX] INFILE OUTFILE" >&2 20 echo >&2 21 echo >&2 " INFILE input syscall table" 22 echo >&2 " OUTFILE output header file" 23 echo >&2 24 echo >&2 "options:" 25 echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)" 26 echo >&2 " --emit-nr Emit the macro of the number of syscalls (__NR_syscalls)" 27 echo >&2 " --offset OFFSET The offset of syscall numbers" 28 echo >&2 " --prefix PREFIX The prefix to the macro like __NR_<PREFIX><NAME>" 29 exit 1 30 } 31 32 # default unless specified by options 33 abis= 34 emit_nr= 35 offset= 36 prefix= 37 38 while [ $# -gt 0 ] 39 do 40 case $1 in 41 --abis) 42 abis=$(echo "($2)" | tr ',' '|') 43 shift 2;; 44 --emit-nr) 45 emit_nr=1 46 shift 1;; 47 --offset) 48 offset=$2 49 shift 2;; 50 --prefix) 51 prefix=$2 52 shift 2;; 53 -*) 54 echo "$1: unknown option" >&2 55 usage;; 56 *) 57 break;; 58 esac 59 done 60 61 if [ $# -ne 2 ]; then 62 usage 63 fi 64 65 infile="$1" 66 outfile="$2" 67 68 guard=_UAPI_ASM_$(basename "$outfile" | 69 sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ 70 -e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g') 71 72 grep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$infile" | { 73 echo "#ifndef $guard" 74 echo "#define $guard" 75 echo 76 77 max=0 78 while read nr abi name native compat ; do 79 80 max=$nr 81 82 if [ -n "$offset" ]; then 83 nr="($offset + $nr)" 84 fi 85 86 echo "#define __NR_$prefix$name $nr" 87 done 88 89 if [ -n "$emit_nr" ]; then 90 echo 91 echo "#ifdef __KERNEL__" 92 echo "#define __NR_${prefix}syscalls $(($max + 1))" 93 echo "#endif" 94 fi 95 96 echo 97 echo "#endif /* $guard */" 98 } > "$outfile"
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.