From: Masahiro Yamada <masahiroy@kernel.org>
To: linux-arch <linux-arch@vger.kernel.org>, X86 ML <x86@kernel.org>
Cc: Linux Kbuild mailing list <linux-kbuild@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
linux-alpha@vger.kernel.org,
linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
linux-ia64@vger.kernel.org,
linux-m68k <linux-m68k@lists.linux-m68k.org>,
linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org,
Linux-sh list <linux-sh@vger.kernel.org>,
linux-um@lists.infradead.org,
"open list:TENSILICA XTENSA PORT (xtensa)"
<linux-xtensa@linux-xtensa.org>,
linuxppc-dev <linuxppc-dev@lists.ozlabs.org>,
sparclinux <sparclinux@vger.kernel.org>
Subject: Re: [PATCH 01/27] scripts: add generic syscalltbl.sh
Date: Thu, 28 Jan 2021 10:01:50 +0900 [thread overview]
Message-ID: <CAK7LNASxQkX9R3g+r2mwKGE11oFLkNVPwsTezgHFzLgHjzcjdw@mail.gmail.com> (raw)
In-Reply-To: <20210128005110.2613902-2-masahiroy@kernel.org>
On Thu, Jan 28, 2021 at 9:51 AM Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> Most of architectures generate syscall headers at the compile time
> in the almost same way.
>
> The syscall table has the same format for all architectures. Each line
> has 3, 4 or 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 a single file, scripts/syscalltbl.sh.
>
> For example, the i386 syscall table looks like this:
>
> 0 i386 restart_syscall sys_restart_syscall
> 1 i386 exit sys_exit
> 2 i386 fork sys_fork
> 3 i386 read sys_read
> 4 i386 write sys_write
> 5 i386 open sys_open compat_sys_open
> ...
>
> scripts/syscalltbl.sh generates the following code:
>
> __SYSCALL(0, sys_restart_syscall)
> __SYSCALL(1, sys_exit)
> __SYSCALL(2, sys_fork)
> __SYSCALL(3, sys_read)
> __SYSCALL(4, sys_write)
> __SYSCALL_WITH_COMPAT(5, sys_open, compat_sys_open)
> ...
>
> Then, the i386 kernel will do:
>
> #define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native)
>
> and the x86_64 kernel will do:
>
> #define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, compat)
>
> I noticed all 32/64 bit architectures can be covered by the same
> pattern. Having an arch-specific script is fine if there is a good
> reason to do so, but a single generic script should work for this case.
>
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> ---
>
> scripts/syscalltbl.sh | 52 +++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 52 insertions(+)
> create mode 100644 scripts/syscalltbl.sh
>
> diff --git a/scripts/syscalltbl.sh b/scripts/syscalltbl.sh
> new file mode 100644
> index 000000000000..15bf4e09f88c
> --- /dev/null
> +++ b/scripts/syscalltbl.sh
> @@ -0,0 +1,52 @@
> +#!/bin/sh
> +# SPDX-License-Identifier: GPL-2.0-only
> +#
> +# Usage:
> +# scripts/syscalltbl.sh INFILE OUTFILE [ABIS] [OFFSET]
> +#
> +# INFILE: input syscall table
> +# OUTFILE: output file
> +# ABIS (optional): specify the ABIs to handle.
> +# If omitted, all lines are handled.
> +# OFFSET (optinal): spefify the offset of the syscall numbers.
> +# If omitted, the offset is zero.
> +#
> +# The syscall table format:
> +# nr abi name native [compat]
This line should be
nr abi name [native] [compat]
because the native entry point is also optional.
(if it is missing, sys_ni_syscall is used)
> +#
> +# nr: syscall number
> +# abi: ABI name
> +# name: syscall name
> +# native: native entry point
native (optional): native entry point
> +# compat (optional): compat entry point
> +
> +set -e
> +
> +in="$1"
> +out="$2"
> +abis=$(echo "($3)" | tr ',' '|')
> +offset="${4:-0}"
> +
> +nxt=$offset
> +
> +grep -E "^[0-9]+[[:space:]]+${abis}" "$in" | sort -n | {
> +
> + while read nr abi name native compat ; do
> +
> + nr=$((nr + $offset))
> +
> + 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
> +} > "$out"
> --
> 2.27.0
>
--
Best Regards
Masahiro Yamada
next prev parent reply other threads:[~2021-01-28 1:09 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-28 0:50 [PATCH 00/27] arch: syscalls: unifiy all syscalltbl.sh into scripts/syscalltbl.sh Masahiro Yamada
2021-01-28 0:50 ` [PATCH 01/27] scripts: add generic syscalltbl.sh Masahiro Yamada
2021-01-28 1:01 ` Masahiro Yamada [this message]
2021-01-28 0:50 ` [PATCH 02/27] x86/syscalls: fix -Wmissing-prototypes warnings from COND_SYSCALL() Masahiro Yamada
2021-01-28 0:55 ` Masahiro Yamada
2021-01-28 7:59 ` Sergei Shtylyov
2021-01-28 8:00 ` Sergei Shtylyov
2021-02-04 14:16 ` Mickaël Salaün
2021-02-12 15:13 ` Mickaël Salaün
2021-02-13 4:50 ` Masahiro Yamada
2021-01-28 0:50 ` [PATCH 03/27] x86/build: add missing FORCE and fix 'targets' to make if_changed work Masahiro Yamada
2021-01-28 0:50 ` [PATCH 04/27] x86/entry/x32: rename __x32_compat_sys_* to __x64_compat_sys_* Masahiro Yamada
2021-01-28 0:50 ` [PATCH 05/27] x86/syscalls: switch to generic syscalltbl.sh Masahiro Yamada
2021-01-28 0:50 ` [PATCH 06/27] ARM: syscalls: " Masahiro Yamada
2021-01-28 0:50 ` [PATCH 07/27] alpha: add missing FORCE and fix 'targets' to make if_changed work Masahiro Yamada
2021-01-28 0:50 ` [PATCH 08/27] alpha: syscalls: switch to generic syscalltbl.sh Masahiro Yamada
2021-01-28 0:50 ` [PATCH 09/27] ia64: add missing FORCE and fix 'targets' to make if_changed work Masahiro Yamada
2021-01-28 0:50 ` [PATCH 10/27] ia64: syscalls: switch to generic syscalltbl.sh Masahiro Yamada
2021-01-28 0:50 ` [PATCH 11/27] m68k: add missing FORCE and fix 'targets' to make if_changed work Masahiro Yamada
2021-01-28 7:58 ` Geert Uytterhoeven
2021-01-28 0:50 ` [PATCH 12/27] m68k: syscalls: switch to generic syscalltbl.sh Masahiro Yamada
2021-01-28 8:17 ` Geert Uytterhoeven
2021-01-28 0:50 ` [PATCH 13/27] microblaze: add missing FORCE and fix 'targets' to make if_changed work Masahiro Yamada
2021-01-28 0:50 ` [PATCH 14/27] microblaze: syscalls: switch to generic syscalltbl.sh Masahiro Yamada
2021-01-28 0:50 ` [PATCH 15/27] mips: add missing FORCE and fix 'targets' to make if_changed work Masahiro Yamada
2021-01-28 0:50 ` [PATCH 16/27] mips: syscalls: switch to generic syscalltbl.sh Masahiro Yamada
2021-01-28 0:50 ` [PATCH 17/27] parisc: add missing FORCE and fix 'targets' to make if_changed work Masahiro Yamada
2021-01-28 0:51 ` [PATCH 18/27] parisc: syscalls: switch to generic syscalltbl.sh Masahiro Yamada
2021-01-28 0:51 ` [PATCH 19/27] sh: add missing FORCE and fix 'targets' to make if_changed work Masahiro Yamada
2021-01-28 0:51 ` [PATCH 20/27] sh: syscalls: switch to generic syscalltbl.sh Masahiro Yamada
2021-01-28 0:51 ` [PATCH 21/27] sparc: remove wrong comment from arch/sparc/include/asm/Kbuild Masahiro Yamada
2021-02-14 17:00 ` Masahiro Yamada
2021-01-28 0:51 ` [PATCH 22/27] sparc: add missing FORCE and fix 'targets' to make if_changed work Masahiro Yamada
2021-01-28 0:51 ` [PATCH 23/27] sparc: syscalls: switch to generic syscalltbl.sh Masahiro Yamada
2021-01-28 0:51 ` [PATCH 24/27] powerpc: add missing FORCE and fix 'targets' to make if_changed work Masahiro Yamada
2021-01-28 0:51 ` [PATCH 25/27] powerpc: syscalls: switch to generic syscalltbl.sh Masahiro Yamada
2021-01-28 0:51 ` [PATCH 26/27] xtensa: add missing FORCE and fix 'targets' to make if_changed work Masahiro Yamada
2021-01-28 0:51 ` [PATCH 27/27] xtensa: syscalls: switch to generic syscalltbl.sh Masahiro Yamada
2021-02-15 12:03 ` [PATCH 00/27] arch: syscalls: unifiy all syscalltbl.sh into scripts/syscalltbl.sh Masahiro Yamada
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=CAK7LNASxQkX9R3g+r2mwKGE11oFLkNVPwsTezgHFzLgHjzcjdw@mail.gmail.com \
--to=masahiroy@kernel.org \
--cc=linux-alpha@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=linux-um@lists.infradead.org \
--cc=linux-xtensa@linux-xtensa.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=sparclinux@vger.kernel.org \
--cc=x86@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).