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.
74 lines
1.5 KiB
74 lines
1.5 KiB
#!/bin/sh |
|
# SPDX-License-Identifier: GPL-2.0-only |
|
# |
|
# Generate a syscall number 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] [--prefix PREFIX] 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)" |
|
echo >&2 " --prefix PREFIX The prefix to the macro like __NR_<PREFIX><NAME>" |
|
exit 1 |
|
} |
|
|
|
# default unless specified by options |
|
abis= |
|
prefix= |
|
|
|
while [ $# -gt 0 ] |
|
do |
|
case $1 in |
|
--abis) |
|
abis=$(echo "($2)" | tr ',' '|') |
|
shift 2;; |
|
--prefix) |
|
prefix=$2 |
|
shift 2;; |
|
-*) |
|
echo "$1: unknown option" >&2 |
|
usage;; |
|
*) |
|
break;; |
|
esac |
|
done |
|
|
|
if [ $# -ne 2 ]; then |
|
usage |
|
fi |
|
|
|
infile="$1" |
|
outfile="$2" |
|
|
|
guard=_ASM_$(basename "$outfile" | |
|
sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ |
|
-e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g') |
|
|
|
grep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$infile" | sort -n | { |
|
echo "#ifndef $guard" |
|
echo "#define $guard" |
|
echo |
|
|
|
max=0 |
|
while read nr abi name native compat ; do |
|
max=$nr |
|
done |
|
|
|
echo "#define __NR_${prefix}syscalls $(($max + 1))" |
|
echo |
|
echo "#endif /* $guard */" |
|
} > "$outfile"
|
|
|