162306a36Sopenharmony_ci#!/bin/sh 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only 362306a36Sopenharmony_ci# 462306a36Sopenharmony_ci# Generate a syscall number header. 562306a36Sopenharmony_ci# 662306a36Sopenharmony_ci# Each line of the syscall table should have the following format: 762306a36Sopenharmony_ci# 862306a36Sopenharmony_ci# NR ABI NAME [NATIVE] [COMPAT] 962306a36Sopenharmony_ci# 1062306a36Sopenharmony_ci# NR syscall number 1162306a36Sopenharmony_ci# ABI ABI name 1262306a36Sopenharmony_ci# NAME syscall name 1362306a36Sopenharmony_ci# NATIVE native entry point (optional) 1462306a36Sopenharmony_ci# COMPAT compat entry point (optional) 1562306a36Sopenharmony_ciset -e 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ciusage() { 1862306a36Sopenharmony_ci echo >&2 "usage: $0 [--abis ABIS] [--prefix PREFIX] INFILE OUTFILE" >&2 1962306a36Sopenharmony_ci echo >&2 2062306a36Sopenharmony_ci echo >&2 " INFILE input syscall table" 2162306a36Sopenharmony_ci echo >&2 " OUTFILE output header file" 2262306a36Sopenharmony_ci echo >&2 2362306a36Sopenharmony_ci echo >&2 "options:" 2462306a36Sopenharmony_ci echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)" 2562306a36Sopenharmony_ci echo >&2 " --prefix PREFIX The prefix to the macro like __NR_<PREFIX><NAME>" 2662306a36Sopenharmony_ci exit 1 2762306a36Sopenharmony_ci} 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci# default unless specified by options 3062306a36Sopenharmony_ciabis= 3162306a36Sopenharmony_ciprefix= 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ciwhile [ $# -gt 0 ] 3462306a36Sopenharmony_cido 3562306a36Sopenharmony_ci case $1 in 3662306a36Sopenharmony_ci --abis) 3762306a36Sopenharmony_ci abis=$(echo "($2)" | tr ',' '|') 3862306a36Sopenharmony_ci shift 2;; 3962306a36Sopenharmony_ci --prefix) 4062306a36Sopenharmony_ci prefix=$2 4162306a36Sopenharmony_ci shift 2;; 4262306a36Sopenharmony_ci -*) 4362306a36Sopenharmony_ci echo "$1: unknown option" >&2 4462306a36Sopenharmony_ci usage;; 4562306a36Sopenharmony_ci *) 4662306a36Sopenharmony_ci break;; 4762306a36Sopenharmony_ci esac 4862306a36Sopenharmony_cidone 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciif [ $# -ne 2 ]; then 5162306a36Sopenharmony_ci usage 5262306a36Sopenharmony_cifi 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ciinfile="$1" 5562306a36Sopenharmony_cioutfile="$2" 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ciguard=_ASM_$(basename "$outfile" | 5862306a36Sopenharmony_ci sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ 5962306a36Sopenharmony_ci -e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g') 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_cigrep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$infile" | sort -n | { 6262306a36Sopenharmony_ci echo "#ifndef $guard" 6362306a36Sopenharmony_ci echo "#define $guard" 6462306a36Sopenharmony_ci echo 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci max=0 6762306a36Sopenharmony_ci while read nr abi name native compat ; do 6862306a36Sopenharmony_ci max=$nr 6962306a36Sopenharmony_ci done 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci echo "#define __NR_${prefix}syscalls $(($max + 1))" 7262306a36Sopenharmony_ci echo 7362306a36Sopenharmony_ci echo "#endif /* $guard */" 7462306a36Sopenharmony_ci} > "$outfile" 75