| #!/bin/sh | 
 | # SPDX-License-Identifier: GPL-2.0-only | 
 | # | 
 | # Generate a syscall number header. | 
 | # | 
 | # Each line of the syscall table should have the following format: | 
 | # | 
 | # NR ABI NAME [NATIVE] [COMPAT] | 
 | # | 
 | # NR       syscall number | 
 | # ABI      ABI name | 
 | # NAME     syscall name | 
 | # NATIVE   native entry point (optional) | 
 | # COMPAT   compat entry point (optional) | 
 | set -e | 
 |  | 
 | usage() { | 
 | 	echo >&2 "usage: $0 [--abis ABIS] [--prefix PREFIX] INFILE OUTFILE" >&2 | 
 | 	echo >&2 | 
 | 	echo >&2 "  INFILE    input syscall table" | 
 | 	echo >&2 "  OUTFILE   output header file" | 
 | 	echo >&2 | 
 | 	echo >&2 "options:" | 
 | 	echo >&2 "  --abis ABIS        ABI(s) to handle (By default, all lines are handled)" | 
 | 	echo >&2 "  --prefix PREFIX    The prefix to the macro like __NR_<PREFIX><NAME>" | 
 | 	exit 1 | 
 | } | 
 |  | 
 | # default unless specified by options | 
 | abis= | 
 | prefix= | 
 |  | 
 | while [ $# -gt 0 ] | 
 | do | 
 | 	case $1 in | 
 | 	--abis) | 
 | 		abis=$(echo "($2)" | tr ',' '|') | 
 | 		shift 2;; | 
 | 	--prefix) | 
 | 		prefix=$2 | 
 | 		shift 2;; | 
 | 	-*) | 
 | 		echo "$1: unknown option" >&2 | 
 | 		usage;; | 
 | 	*) | 
 | 		break;; | 
 | 	esac | 
 | done | 
 |  | 
 | if [ $# -ne 2 ]; then | 
 | 	usage | 
 | fi | 
 |  | 
 | infile="$1" | 
 | outfile="$2" | 
 |  | 
 | guard=_ASM_$(basename "$outfile" | | 
 | 	sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ | 
 | 	-e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g') | 
 |  | 
 | grep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$infile" | sort -n | { | 
 | 	echo "#ifndef $guard" | 
 | 	echo "#define $guard" | 
 | 	echo | 
 |  | 
 | 	max=0 | 
 | 	while read nr abi name native compat ; do | 
 | 		max=$nr | 
 | 	done | 
 |  | 
 | 	echo "#define __NR_${prefix}syscalls $(($max + 1))" | 
 | 	echo | 
 | 	echo "#endif /* $guard */" | 
 | } > "$outfile" |