xref: /linux-6.15/scripts/syscalltbl.sh (revision 9142be9e)
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