syscallhdr.sh (1935B)
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 16set -e 17 18usage() { 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 33abis= 34emit_nr= 35offset= 36prefix= 37 38while [ $# -gt 0 ] 39do 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 59done 60 61if [ $# -ne 2 ]; then 62 usage 63fi 64 65infile="$1" 66outfile="$2" 67 68guard=_UAPI_ASM_$(basename "$outfile" | 69 sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ 70 -e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g') 71 72grep -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"