1*27932b6aSMasahiro Yamada#!/bin/sh 2*27932b6aSMasahiro Yamada# SPDX-License-Identifier: GPL-2.0-only 3*27932b6aSMasahiro Yamada# 4*27932b6aSMasahiro Yamada# Generate a syscall number header. 5*27932b6aSMasahiro Yamada# 6*27932b6aSMasahiro Yamada# Each line of the syscall table should have the following format: 7*27932b6aSMasahiro Yamada# 8*27932b6aSMasahiro Yamada# NR ABI NAME [NATIVE] [COMPAT] 9*27932b6aSMasahiro Yamada# 10*27932b6aSMasahiro Yamada# NR syscall number 11*27932b6aSMasahiro Yamada# ABI ABI name 12*27932b6aSMasahiro Yamada# NAME syscall name 13*27932b6aSMasahiro Yamada# NATIVE native entry point (optional) 14*27932b6aSMasahiro Yamada# COMPAT compat entry point (optional) 15*27932b6aSMasahiro Yamadaset -e 16*27932b6aSMasahiro Yamada 17*27932b6aSMasahiro Yamadausage() { 18*27932b6aSMasahiro Yamada echo >&2 "usage: $0 [--abis ABIS] [--prefix PREFIX] INFILE OUTFILE" >&2 19*27932b6aSMasahiro Yamada echo >&2 20*27932b6aSMasahiro Yamada echo >&2 " INFILE input syscall table" 21*27932b6aSMasahiro Yamada echo >&2 " OUTFILE output header file" 22*27932b6aSMasahiro Yamada echo >&2 23*27932b6aSMasahiro Yamada echo >&2 "options:" 24*27932b6aSMasahiro Yamada echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)" 25*27932b6aSMasahiro Yamada echo >&2 " --prefix PREFIX The prefix to the macro like __NR_<PREFIX><NAME>" 26*27932b6aSMasahiro Yamada exit 1 27*27932b6aSMasahiro Yamada} 28*27932b6aSMasahiro Yamada 29*27932b6aSMasahiro Yamada# default unless specified by options 30*27932b6aSMasahiro Yamadaabis= 31*27932b6aSMasahiro Yamadaprefix= 32*27932b6aSMasahiro Yamada 33*27932b6aSMasahiro Yamadawhile [ $# -gt 0 ] 34*27932b6aSMasahiro Yamadado 35*27932b6aSMasahiro Yamada case $1 in 36*27932b6aSMasahiro Yamada --abis) 37*27932b6aSMasahiro Yamada abis=$(echo "($2)" | tr ',' '|') 38*27932b6aSMasahiro Yamada shift 2;; 39*27932b6aSMasahiro Yamada --prefix) 40*27932b6aSMasahiro Yamada prefix=$2 41*27932b6aSMasahiro Yamada shift 2;; 42*27932b6aSMasahiro Yamada -*) 43*27932b6aSMasahiro Yamada echo "$1: unknown option" >&2 44*27932b6aSMasahiro Yamada usage;; 45*27932b6aSMasahiro Yamada *) 46*27932b6aSMasahiro Yamada break;; 47*27932b6aSMasahiro Yamada esac 48*27932b6aSMasahiro Yamadadone 49*27932b6aSMasahiro Yamada 50*27932b6aSMasahiro Yamadaif [ $# -ne 2 ]; then 51*27932b6aSMasahiro Yamada usage 52*27932b6aSMasahiro Yamadafi 53*27932b6aSMasahiro Yamada 54*27932b6aSMasahiro Yamadainfile="$1" 55*27932b6aSMasahiro Yamadaoutfile="$2" 56*27932b6aSMasahiro Yamada 57*27932b6aSMasahiro Yamadaguard=_ASM_$(basename "$outfile" | 58*27932b6aSMasahiro Yamada sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ 59*27932b6aSMasahiro Yamada -e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g') 60*27932b6aSMasahiro Yamada 61*27932b6aSMasahiro Yamadagrep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$infile" | sort -n | { 62*27932b6aSMasahiro Yamada echo "#ifndef $guard" 63*27932b6aSMasahiro Yamada echo "#define $guard" 64*27932b6aSMasahiro Yamada echo 65*27932b6aSMasahiro Yamada 66*27932b6aSMasahiro Yamada max=0 67*27932b6aSMasahiro Yamada while read nr abi name native compat ; do 68*27932b6aSMasahiro Yamada max=$nr 69*27932b6aSMasahiro Yamada done 70*27932b6aSMasahiro Yamada 71*27932b6aSMasahiro Yamada echo "#define __NR_${prefix}syscalls $(($max + 1))" 72*27932b6aSMasahiro Yamada echo 73*27932b6aSMasahiro Yamada echo "#endif /* $guard */" 74*27932b6aSMasahiro Yamada} > "$outfile" 75