1 #!/bin/sh 1 #!/bin/sh 2 # SPDX-License-Identifier: GPL-2.0-only 2 # SPDX-License-Identifier: GPL-2.0-only 3 # 3 # 4 # Generate a syscall table header. 4 # Generate a syscall table header. 5 # 5 # 6 # Each line of the syscall table should have t 6 # Each line of the syscall table should have the following format: 7 # 7 # 8 # NR ABI NAME [NATIVE] [COMPAT] 8 # NR ABI NAME [NATIVE] [COMPAT] 9 # 9 # 10 # NR syscall number 10 # NR syscall number 11 # ABI ABI name 11 # ABI ABI name 12 # NAME syscall name 12 # NAME syscall name 13 # NATIVE native entry point (optional) 13 # NATIVE native entry point (optional) 14 # COMPAT compat entry point (optional) 14 # COMPAT compat entry point (optional) 15 15 16 set -e 16 set -e 17 17 18 usage() { 18 usage() { 19 echo >&2 "usage: $0 [--abis ABIS] INFI 19 echo >&2 "usage: $0 [--abis ABIS] INFILE OUTFILE" >&2 20 echo >&2 20 echo >&2 21 echo >&2 " INFILE input syscall ta 21 echo >&2 " INFILE input syscall table" 22 echo >&2 " OUTFILE output header fi 22 echo >&2 " OUTFILE output header file" 23 echo >&2 23 echo >&2 24 echo >&2 "options:" 24 echo >&2 "options:" 25 echo >&2 " --abis ABIS ABI(s) 25 echo >&2 " --abis ABIS ABI(s) to handle (By default, all lines are handled)" 26 exit 1 26 exit 1 27 } 27 } 28 28 29 # default unless specified by options 29 # default unless specified by options 30 abis= 30 abis= 31 31 32 while [ $# -gt 0 ] 32 while [ $# -gt 0 ] 33 do 33 do 34 case $1 in 34 case $1 in 35 --abis) 35 --abis) 36 abis=$(echo "($2)" | tr ',' '| 36 abis=$(echo "($2)" | tr ',' '|') 37 shift 2;; 37 shift 2;; 38 -*) 38 -*) 39 echo "$1: unknown option" >&2 39 echo "$1: unknown option" >&2 40 usage;; 40 usage;; 41 *) 41 *) 42 break;; 42 break;; 43 esac 43 esac 44 done 44 done 45 45 46 if [ $# -ne 2 ]; then 46 if [ $# -ne 2 ]; then 47 usage 47 usage 48 fi 48 fi 49 49 50 infile="$1" 50 infile="$1" 51 outfile="$2" 51 outfile="$2" 52 52 53 nxt=0 53 nxt=0 54 54 55 grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | 55 grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | { 56 56 57 while read nr abi name native compat n !! 57 while read nr abi name native compat ; do 58 58 59 if [ $nxt -gt $nr ]; then 59 if [ $nxt -gt $nr ]; then 60 echo "error: $infile: 60 echo "error: $infile: syscall table is not sorted or duplicates the same syscall number" >&2 61 exit 1 61 exit 1 62 fi 62 fi 63 63 64 while [ $nxt -lt $nr ]; do 64 while [ $nxt -lt $nr ]; do 65 echo "__SYSCALL($nxt, 65 echo "__SYSCALL($nxt, sys_ni_syscall)" 66 nxt=$((nxt + 1)) 66 nxt=$((nxt + 1)) 67 done 67 done 68 68 69 if [ "$compat" = "-" ]; then !! 69 if [ -n "$compat" ]; then 70 unset compat << 71 fi << 72 << 73 if [ -n "$noreturn" ]; then << 74 if [ "$noreturn" != "n << 75 echo "error: $ << 76 exit 1 << 77 fi << 78 if [ -n "$compat" ]; t << 79 echo "__SYSCAL << 80 else << 81 echo "__SYSCAL << 82 fi << 83 elif [ -n "$compat" ]; then << 84 echo "__SYSCALL_WITH_C 70 echo "__SYSCALL_WITH_COMPAT($nr, $native, $compat)" 85 elif [ -n "$native" ]; then 71 elif [ -n "$native" ]; then 86 echo "__SYSCALL($nr, $ 72 echo "__SYSCALL($nr, $native)" 87 else 73 else 88 echo "__SYSCALL($nr, s 74 echo "__SYSCALL($nr, sys_ni_syscall)" 89 fi 75 fi 90 nxt=$((nr + 1)) 76 nxt=$((nr + 1)) 91 done 77 done 92 } > "$outfile" 78 } > "$outfile"
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.