1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0 3# 4# Generate a syscall table header. 5# 6# Each line of the syscall table should have the following format: 7# 8# NR ABI NAME [NATIVE] [COMPAT] 9# 10# NR syscall number 11# ABI ABI name 12# NAME syscall name 13# NATIVE native entry point (optional) 14# COMPAT compat entry point (optional) 15 16set -e 17 18usage() { 19 echo >&2 "usage: $0 [--abis ABIS] INFILE OUTFILE" >&2 20 echo >&2 21 echo >&2 " INFILE input syscall table" 22 echo >&2 " OUTFILE output header file" 23 echo >&2 24 echo >&2 "options:" 25 echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)" 26 exit 1 27} 28 29# default unless specified by options 30abis= 31 32while [ $# -gt 0 ] 33do 34 case $1 in 35 --abis) 36 abis=$(echo "($2)" | tr ',' '|') 37 shift 2;; 38 -*) 39 echo "$1: unknown option" >&2 40 usage;; 41 *) 42 break;; 43 esac 44done 45 46if [ $# -ne 2 ]; then 47 usage 48fi 49 50infile="$1" 51outfile="$2" 52 53nxt=0 54 55syscall_macro() { 56 nr="$1" 57 name="$2" 58 59 echo " [$nr] = \"$name\"," 60} 61 62emit() { 63 nr="$1" 64 entry="$2" 65 66 syscall_macro "$nr" "$entry" 67} 68 69echo "static const char *const syscalltbl[] = {" > $outfile 70 71sorted_table=$(mktemp /tmp/syscalltbl.XXXXXX) 72grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | sort -n > $sorted_table 73 74max_nr=0 75# the params are: nr abi name entry compat 76# use _ for intentionally unused variables according to SC2034 77while read nr _ name _ _; do 78 emit "$nr" "$name" >> $outfile 79 max_nr=$nr 80done < $sorted_table 81 82rm -f $sorted_table 83 84echo "};" >> $outfile 85 86echo "#define SYSCALLTBL_MAX_ID ${max_nr}" >> $outfile 87