From: Masahiro Yamada <masahiroy@kernel.org>
To: Linux Kbuild mailing list <linux-kbuild@vger.kernel.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/2] scripts: add generic syscalltbl.sh
Date: Mon, 22 Feb 2021 02:18:09 +0900 [thread overview]
Message-ID: <CAK7LNASaAX4VAO9ky+nAQ-BViFJxJkOJa7791bMcqC7Ev8PySQ@mail.gmail.com> (raw)
In-Reply-To: <20210216020412.800836-1-masahiroy@kernel.org>
On Tue, Feb 16, 2021 at 11:04 AM Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> Most of architectures generate syscall headers at the compile time
> in a similar way.
>
> The syscall table has the same format for all architectures. Each line
> has up to 5 fields; syscall number, ABI, syscall name, native entry
> point, and compat entry point. The syscall table is processed by
> syscalltbl.sh script into header files.
>
> Despite the same pattern, scripts are maintained per architecture,
> which results in code duplication and bad maintainability.
>
> As of v5.11-rc1, 12 architectures duplicate similar shell scripts:
>
> $ find arch -name syscalltbl.sh | sort
> arch/alpha/kernel/syscalls/syscalltbl.sh
> arch/arm/tools/syscalltbl.sh
> arch/ia64/kernel/syscalls/syscalltbl.sh
> arch/m68k/kernel/syscalls/syscalltbl.sh
> arch/microblaze/kernel/syscalls/syscalltbl.sh
> arch/mips/kernel/syscalls/syscalltbl.sh
> arch/parisc/kernel/syscalls/syscalltbl.sh
> arch/powerpc/kernel/syscalls/syscalltbl.sh
> arch/sh/kernel/syscalls/syscalltbl.sh
> arch/sparc/kernel/syscalls/syscalltbl.sh
> arch/x86/entry/syscalls/syscalltbl.sh
> arch/xtensa/kernel/syscalls/syscalltbl.sh
>
> My goal is to unify them into scripts/syscalltbl.sh.
>
> __SYSCALL_WITH_COMPAT should be defined as follows:
>
> 32-bit kernel:
> #define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native)
>
> 64-bit kernel:
>
> #define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, compat)
>
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> ---
>
Both applied to linux-kbuild.
> scripts/syscalltbl.sh | 73 +++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 73 insertions(+)
> create mode 100755 scripts/syscalltbl.sh
>
> diff --git a/scripts/syscalltbl.sh b/scripts/syscalltbl.sh
> new file mode 100755
> index 000000000000..aa6ab156301c
> --- /dev/null
> +++ b/scripts/syscalltbl.sh
> @@ -0,0 +1,73 @@
> +#!/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" | sort -n | {
> +
> + while read nr abi name native compat ; do
> +
> + 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"
> --
> 2.27.0
>
--
Best Regards
Masahiro Yamada
prev parent reply other threads:[~2021-02-21 17:20 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-16 2:04 [PATCH 1/2] scripts: add generic syscalltbl.sh Masahiro Yamada
2021-02-16 2:04 ` [PATCH 2/2] scripts: add generic syscallhdr.sh Masahiro Yamada
2021-02-21 17:18 ` Masahiro Yamada [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAK7LNASaAX4VAO9ky+nAQ-BViFJxJkOJa7791bMcqC7Ev8PySQ@mail.gmail.com \
--to=masahiroy@kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.