mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 10:04:12 +08:00
c6a3a81d19
Currently, syscall{hdr,tbl}.sh sorts the entire syscall table, but you can assume it is already sorted by the syscall number. The generated syscall table does not work if the same syscall number appears twice. Check it in the script. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
79 lines
1.5 KiB
Bash
Executable File
79 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
# Generate a syscall table header.
|
|
#
|
|
# Each line of the syscall table should have the following format:
|
|
#
|
|
# NR ABI NAME [NATIVE] [COMPAT]
|
|
#
|
|
# NR syscall number
|
|
# ABI ABI name
|
|
# NAME syscall name
|
|
# NATIVE native entry point (optional)
|
|
# COMPAT compat entry point (optional)
|
|
|
|
set -e
|
|
|
|
usage() {
|
|
echo >&2 "usage: $0 [--abis ABIS] INFILE OUTFILE" >&2
|
|
echo >&2
|
|
echo >&2 " INFILE input syscall table"
|
|
echo >&2 " OUTFILE output header file"
|
|
echo >&2
|
|
echo >&2 "options:"
|
|
echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)"
|
|
exit 1
|
|
}
|
|
|
|
# default unless specified by options
|
|
abis=
|
|
|
|
while [ $# -gt 0 ]
|
|
do
|
|
case $1 in
|
|
--abis)
|
|
abis=$(echo "($2)" | tr ',' '|')
|
|
shift 2;;
|
|
-*)
|
|
echo "$1: unknown option" >&2
|
|
usage;;
|
|
*)
|
|
break;;
|
|
esac
|
|
done
|
|
|
|
if [ $# -ne 2 ]; then
|
|
usage
|
|
fi
|
|
|
|
infile="$1"
|
|
outfile="$2"
|
|
|
|
nxt=0
|
|
|
|
grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | {
|
|
|
|
while read nr abi name native compat ; do
|
|
|
|
if [ $nxt -gt $nr ]; then
|
|
echo "error: $infile: syscall table is not sorted or duplicates the same syscall number" >&2
|
|
exit 1
|
|
fi
|
|
|
|
while [ $nxt -lt $nr ]; do
|
|
echo "__SYSCALL($nxt, sys_ni_syscall)"
|
|
nxt=$((nxt + 1))
|
|
done
|
|
|
|
if [ -n "$compat" ]; then
|
|
echo "__SYSCALL_WITH_COMPAT($nr, $native, $compat)"
|
|
elif [ -n "$native" ]; then
|
|
echo "__SYSCALL($nr, $native)"
|
|
else
|
|
echo "__SYSCALL($nr, sys_ni_syscall)"
|
|
fi
|
|
nxt=$((nr + 1))
|
|
done
|
|
} > "$outfile"
|