forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.5 KiB
78 lines
1.5 KiB
#!/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"
|
|
|