19df526b0SMasahiro Yamada#!/bin/sh 29df526b0SMasahiro Yamada# SPDX-License-Identifier: GPL-2.0-only 39df526b0SMasahiro Yamada# 49df526b0SMasahiro Yamada# Generate a syscall table header. 59df526b0SMasahiro Yamada# 69df526b0SMasahiro Yamada# Each line of the syscall table should have the following format: 79df526b0SMasahiro Yamada# 89df526b0SMasahiro Yamada# NR ABI NAME [NATIVE] [COMPAT] 99df526b0SMasahiro Yamada# 109df526b0SMasahiro Yamada# NR syscall number 119df526b0SMasahiro Yamada# ABI ABI name 129df526b0SMasahiro Yamada# NAME syscall name 139df526b0SMasahiro Yamada# NATIVE native entry point (optional) 149df526b0SMasahiro Yamada# COMPAT compat entry point (optional) 159df526b0SMasahiro Yamada 169df526b0SMasahiro Yamadaset -e 179df526b0SMasahiro Yamada 189df526b0SMasahiro Yamadausage() { 199df526b0SMasahiro Yamada echo >&2 "usage: $0 [--abis ABIS] INFILE OUTFILE" >&2 209df526b0SMasahiro Yamada echo >&2 219df526b0SMasahiro Yamada echo >&2 " INFILE input syscall table" 229df526b0SMasahiro Yamada echo >&2 " OUTFILE output header file" 239df526b0SMasahiro Yamada echo >&2 249df526b0SMasahiro Yamada echo >&2 "options:" 259df526b0SMasahiro Yamada echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)" 269df526b0SMasahiro Yamada exit 1 279df526b0SMasahiro Yamada} 289df526b0SMasahiro Yamada 299df526b0SMasahiro Yamada# default unless specified by options 309df526b0SMasahiro Yamadaabis= 319df526b0SMasahiro Yamada 329df526b0SMasahiro Yamadawhile [ $# -gt 0 ] 339df526b0SMasahiro Yamadado 349df526b0SMasahiro Yamada case $1 in 359df526b0SMasahiro Yamada --abis) 369df526b0SMasahiro Yamada abis=$(echo "($2)" | tr ',' '|') 379df526b0SMasahiro Yamada shift 2;; 389df526b0SMasahiro Yamada -*) 399df526b0SMasahiro Yamada echo "$1: unknown option" >&2 409df526b0SMasahiro Yamada usage;; 419df526b0SMasahiro Yamada *) 429df526b0SMasahiro Yamada break;; 439df526b0SMasahiro Yamada esac 449df526b0SMasahiro Yamadadone 459df526b0SMasahiro Yamada 469df526b0SMasahiro Yamadaif [ $# -ne 2 ]; then 479df526b0SMasahiro Yamada usage 489df526b0SMasahiro Yamadafi 499df526b0SMasahiro Yamada 509df526b0SMasahiro Yamadainfile="$1" 519df526b0SMasahiro Yamadaoutfile="$2" 529df526b0SMasahiro Yamada 539df526b0SMasahiro Yamadanxt=0 549df526b0SMasahiro Yamada 55c6a3a81dSMasahiro Yamadagrep -E "^[0-9]+[[:space:]]+$abis" "$infile" | { 569df526b0SMasahiro Yamada 57*9142be9eSJosh Poimboeuf while read nr abi name native compat noreturn; do 589df526b0SMasahiro Yamada 59c6a3a81dSMasahiro Yamada if [ $nxt -gt $nr ]; then 60c6a3a81dSMasahiro Yamada echo "error: $infile: syscall table is not sorted or duplicates the same syscall number" >&2 61c6a3a81dSMasahiro Yamada exit 1 62c6a3a81dSMasahiro Yamada fi 63c6a3a81dSMasahiro Yamada 649df526b0SMasahiro Yamada while [ $nxt -lt $nr ]; do 659df526b0SMasahiro Yamada echo "__SYSCALL($nxt, sys_ni_syscall)" 669df526b0SMasahiro Yamada nxt=$((nxt + 1)) 679df526b0SMasahiro Yamada done 689df526b0SMasahiro Yamada 69*9142be9eSJosh Poimboeuf if [ "$compat" = "-" ]; then 70*9142be9eSJosh Poimboeuf unset compat 71*9142be9eSJosh Poimboeuf fi 72*9142be9eSJosh Poimboeuf 73*9142be9eSJosh Poimboeuf if [ -n "$noreturn" ]; then 74*9142be9eSJosh Poimboeuf if [ "$noreturn" != "noreturn" ]; then 75*9142be9eSJosh Poimboeuf echo "error: $infile: invalid string \"$noreturn\" in 'noreturn' column" 76*9142be9eSJosh Poimboeuf exit 1 77*9142be9eSJosh Poimboeuf fi 789df526b0SMasahiro Yamada if [ -n "$compat" ]; then 79*9142be9eSJosh Poimboeuf echo "__SYSCALL_COMPAT_NORETURN($nr, $native, $compat)" 80*9142be9eSJosh Poimboeuf else 81*9142be9eSJosh Poimboeuf echo "__SYSCALL_NORETURN($nr, $native)" 82*9142be9eSJosh Poimboeuf fi 83*9142be9eSJosh Poimboeuf elif [ -n "$compat" ]; then 849df526b0SMasahiro Yamada echo "__SYSCALL_WITH_COMPAT($nr, $native, $compat)" 859df526b0SMasahiro Yamada elif [ -n "$native" ]; then 869df526b0SMasahiro Yamada echo "__SYSCALL($nr, $native)" 879df526b0SMasahiro Yamada else 889df526b0SMasahiro Yamada echo "__SYSCALL($nr, sys_ni_syscall)" 899df526b0SMasahiro Yamada fi 909df526b0SMasahiro Yamada nxt=$((nr + 1)) 919df526b0SMasahiro Yamada done 929df526b0SMasahiro Yamada} > "$outfile" 93