linux/scripts/syscalltbl.sh
<<
>>
Prefs
   1#!/bin/sh
   2# SPDX-License-Identifier: GPL-2.0-only
   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
  55grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | {
  56
  57        while read nr abi name native compat ; do
  58
  59                if [ $nxt -gt $nr ]; then
  60                        echo "error: $infile: syscall table is not sorted or duplicates the same syscall number" >&2
  61                        exit 1
  62                fi
  63
  64                while [ $nxt -lt $nr ]; do
  65                        echo "__SYSCALL($nxt, sys_ni_syscall)"
  66                        nxt=$((nxt + 1))
  67                done
  68
  69                if [ -n "$compat" ]; then
  70                        echo "__SYSCALL_WITH_COMPAT($nr, $native, $compat)"
  71                elif [ -n "$native" ]; then
  72                        echo "__SYSCALL($nr, $native)"
  73                else
  74                        echo "__SYSCALL($nr, sys_ni_syscall)"
  75                fi
  76                nxt=$((nr + 1))
  77        done
  78} > "$outfile"
  79