162306a36Sopenharmony_ci#!/bin/sh 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only 362306a36Sopenharmony_ci# 462306a36Sopenharmony_ci# Generate a syscall table 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_ci 1662306a36Sopenharmony_ciset -e 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ciusage() { 1962306a36Sopenharmony_ci echo >&2 "usage: $0 [--abis ABIS] INFILE OUTFILE" >&2 2062306a36Sopenharmony_ci echo >&2 2162306a36Sopenharmony_ci echo >&2 " INFILE input syscall table" 2262306a36Sopenharmony_ci echo >&2 " OUTFILE output header file" 2362306a36Sopenharmony_ci echo >&2 2462306a36Sopenharmony_ci echo >&2 "options:" 2562306a36Sopenharmony_ci echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)" 2662306a36Sopenharmony_ci exit 1 2762306a36Sopenharmony_ci} 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci# default unless specified by options 3062306a36Sopenharmony_ciabis= 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ciwhile [ $# -gt 0 ] 3362306a36Sopenharmony_cido 3462306a36Sopenharmony_ci case $1 in 3562306a36Sopenharmony_ci --abis) 3662306a36Sopenharmony_ci abis=$(echo "($2)" | tr ',' '|') 3762306a36Sopenharmony_ci shift 2;; 3862306a36Sopenharmony_ci -*) 3962306a36Sopenharmony_ci echo "$1: unknown option" >&2 4062306a36Sopenharmony_ci usage;; 4162306a36Sopenharmony_ci *) 4262306a36Sopenharmony_ci break;; 4362306a36Sopenharmony_ci esac 4462306a36Sopenharmony_cidone 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ciif [ $# -ne 2 ]; then 4762306a36Sopenharmony_ci usage 4862306a36Sopenharmony_cifi 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciinfile="$1" 5162306a36Sopenharmony_cioutfile="$2" 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cinxt=0 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cigrep -E "^[0-9]+[[:space:]]+$abis" "$infile" | { 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci while read nr abi name native compat ; do 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci if [ $nxt -gt $nr ]; then 6062306a36Sopenharmony_ci echo "error: $infile: syscall table is not sorted or duplicates the same syscall number" >&2 6162306a36Sopenharmony_ci exit 1 6262306a36Sopenharmony_ci fi 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci while [ $nxt -lt $nr ]; do 6562306a36Sopenharmony_ci echo "__SYSCALL($nxt, sys_ni_syscall)" 6662306a36Sopenharmony_ci nxt=$((nxt + 1)) 6762306a36Sopenharmony_ci done 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci if [ -n "$compat" ]; then 7062306a36Sopenharmony_ci echo "__SYSCALL_WITH_COMPAT($nr, $native, $compat)" 7162306a36Sopenharmony_ci elif [ -n "$native" ]; then 7262306a36Sopenharmony_ci echo "__SYSCALL($nr, $native)" 7362306a36Sopenharmony_ci else 7462306a36Sopenharmony_ci echo "__SYSCALL($nr, sys_ni_syscall)" 7562306a36Sopenharmony_ci fi 7662306a36Sopenharmony_ci nxt=$((nr + 1)) 7762306a36Sopenharmony_ci done 7862306a36Sopenharmony_ci} > "$outfile" 79