* [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs
@ 2026-07-28 2:47 André Almeida
2026-07-28 2:47 ` [PATCH RFC v2 1/4] syscalls: Create unified partial " André Almeida
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: André Almeida @ 2026-07-28 2:47 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
H. Peter Anvin, Nathan Chancellor, Arnd Bergmann
Cc: linux-kernel, linux-kbuild, kernel-dev, André Almeida
While implementing a new syscall, we need to wire up it's number to the arch
table. Since syscall number 403, all architectures are on sync regarding the
number (except alpha), which make things a lot easier but more repetitive as
well. Have a look at commit b36d4b6aa88 ("arch: hookup listns() system call"),
with 15 lines of mostly:
+470 common listns sys_listns
There's already a "common" table shared with a bunch of archs at
`scripts/syscall.tbl`, but due to historical reasons some archs will never be
able to move to this table and share all the numbers.
The generic table starts from 403 (clock_gettime64), the first common syscall.
The scripts are adapted to x86 specifics, like not generating the compat entry
point for x86_64 and placing x86_x32 things in the proper order. x32 is likely
to be dropped from Linux soon but for the moment I left the support there. If
this sounds good, next revision I can add the docs bits too.
I've tested this with x86 and arm64, by comparing the syscalls_*.h and
unistd_*.h files generated before and after this patchset and they are
identical.
Thanks!
André
Changes in v2:
- Managed to move to the real first common syscall: 403 (clock_gettime64)
- Added -no-compat option to be used with x86_64
- v1: https://patch.msgid.link/20260724-tonyk-syscall_table-v1-0-9c53188423da@igalia.com
---
André Almeida (4):
syscalls: Create unified partial table for all archs
syscalls: Add support for x86_x32 for the common syscall table
x86: Use common syscall table
scripts/syscall.tbl: Use the common table
arch/arm64/tools/syscall_32.tbl | 68 ----------------------------
arch/x86/entry/syscalls/Makefile | 16 ++++---
arch/x86/entry/syscalls/syscall_32.tbl | 68 ----------------------------
arch/x86/entry/syscalls/syscall_64.tbl | 48 --------------------
scripts/Makefile.asm-headers | 4 +-
scripts/syscall.tbl | 68 ----------------------------
scripts/syscall_common.tbl | 72 +++++++++++++++++++++++++++++
scripts/syscallhdr.sh | 83 ++++++++++++++++++++++++++++------
scripts/syscalltbl.sh | 35 +++++++++++---
9 files changed, 181 insertions(+), 281 deletions(-)
---
base-commit: af5e34a41cd607c00ef752e00331736570992354
change-id: 20260724-tonyk-syscall_table-928bbb1b26bb
Best regards,
--
André Almeida <andrealmeid@igalia.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH RFC v2 1/4] syscalls: Create unified partial table for all archs
2026-07-28 2:47 [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs André Almeida
@ 2026-07-28 2:47 ` André Almeida
2026-07-28 6:47 ` Arnd Bergmann
2026-07-28 2:47 ` [PATCH RFC v2 2/4] syscalls: Add support for x86_x32 for the common syscall table André Almeida
` (3 subsequent siblings)
4 siblings, 1 reply; 7+ messages in thread
From: André Almeida @ 2026-07-28 2:47 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
H. Peter Anvin, Nathan Chancellor, Arnd Bergmann
Cc: linux-kernel, linux-kbuild, kernel-dev, André Almeida
To take advantage of the subset of syscall numbers that are guaranteed to
be shared, create a new table and adapt generation scripts to use it. In
that way, every new syscall can be added to a single file.
Signed-off-by: André Almeida <andrealmeid@igalia.com>
---
scripts/syscall_common.tbl | 72 ++++++++++++++++++++++++++++++++++++++++++++++
scripts/syscallhdr.sh | 57 +++++++++++++++++++++++++++---------
scripts/syscalltbl.sh | 35 +++++++++++++++++-----
3 files changed, 143 insertions(+), 21 deletions(-)
diff --git a/scripts/syscall_common.tbl b/scripts/syscall_common.tbl
new file mode 100644
index 000000000000..3ac8918a4035
--- /dev/null
+++ b/scripts/syscall_common.tbl
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
+#
+# syscall numbers shared by architectures
+
+403 32 clock_gettime64 sys_clock_gettime
+404 32 clock_settime64 sys_clock_settime
+405 32 clock_adjtime64 sys_clock_adjtime
+406 32 clock_getres_time64 sys_clock_getres
+407 32 clock_nanosleep_time64 sys_clock_nanosleep
+408 32 timer_gettime64 sys_timer_gettime
+409 32 timer_settime64 sys_timer_settime
+410 32 timerfd_gettime64 sys_timerfd_gettime
+411 32 timerfd_settime64 sys_timerfd_settime
+412 32 utimensat_time64 sys_utimensat
+413 32 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64
+414 32 ppoll_time64 sys_ppoll compat_sys_ppoll_time64
+416 32 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64
+417 32 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64
+418 32 mq_timedsend_time64 sys_mq_timedsend
+419 32 mq_timedreceive_time64 sys_mq_timedreceive
+420 32 semtimedop_time64 sys_semtimedop
+421 32 rt_sigtimedwait_time64 sys_rt_sigtimedwait compat_sys_rt_sigtimedwait_time64
+422 32 futex_time64 sys_futex
+423 32 sched_rr_get_interval_time64 sys_sched_rr_get_interval
+424 common pidfd_send_signal sys_pidfd_send_signal
+425 common io_uring_setup sys_io_uring_setup
+426 common io_uring_enter sys_io_uring_enter
+427 common io_uring_register sys_io_uring_register
+428 common open_tree sys_open_tree
+429 common move_mount sys_move_mount
+430 common fsopen sys_fsopen
+431 common fsconfig sys_fsconfig
+432 common fsmount sys_fsmount
+433 common fspick sys_fspick
+434 common pidfd_open sys_pidfd_open
+435 common clone3 sys_clone3
+436 common close_range sys_close_range
+437 common openat2 sys_openat2
+438 common pidfd_getfd sys_pidfd_getfd
+439 common faccessat2 sys_faccessat2
+440 common process_madvise sys_process_madvise
+441 common epoll_pwait2 sys_epoll_pwait2 compat_sys_epoll_pwait2
+442 common mount_setattr sys_mount_setattr
+443 common quotactl_fd sys_quotactl_fd
+444 common landlock_create_ruleset sys_landlock_create_ruleset
+445 common landlock_add_rule sys_landlock_add_rule
+446 common landlock_restrict_self sys_landlock_restrict_self
+447 memfd_secret memfd_secret sys_memfd_secret
+448 common process_mrelease sys_process_mrelease
+449 common futex_waitv sys_futex_waitv
+450 common set_mempolicy_home_node sys_set_mempolicy_home_node
+451 common cachestat sys_cachestat
+452 common fchmodat2 sys_fchmodat2
+453 common map_shadow_stack sys_map_shadow_stack
+454 common futex_wake sys_futex_wake
+455 common futex_wait sys_futex_wait
+456 common futex_requeue sys_futex_requeue
+457 common statmount sys_statmount
+458 common listmount sys_listmount
+459 common lsm_get_self_attr sys_lsm_get_self_attr
+460 common lsm_set_self_attr sys_lsm_set_self_attr
+461 common lsm_list_modules sys_lsm_list_modules
+462 common mseal sys_mseal
+463 common setxattrat sys_setxattrat
+464 common getxattrat sys_getxattrat
+465 common listxattrat sys_listxattrat
+466 common removexattrat sys_removexattrat
+467 common open_tree_attr sys_open_tree_attr
+468 common file_getattr sys_file_getattr
+469 common file_setattr sys_file_setattr
+470 common listns sys_listns
+471 common rseq_slice_yield sys_rseq_slice_yield
diff --git a/scripts/syscallhdr.sh b/scripts/syscallhdr.sh
index 22e34cd46b9b..0fc3e8dfc7e5 100755
--- a/scripts/syscallhdr.sh
+++ b/scripts/syscallhdr.sh
@@ -16,7 +16,7 @@
set -e
usage() {
- echo >&2 "usage: $0 [--abis ABIS] [--emit-nr] [--offset OFFSET] [--prefix PREFIX] INFILE OUTFILE" >&2
+ echo >&2 "usage: $0 [--abis ABIS] [--emit-nr] [--offset OFFSET] [--prefix PREFIX] [--common-tbl] INFILE OUTFILE" >&2
echo >&2
echo >&2 " INFILE input syscall table"
echo >&2 " OUTFILE output header file"
@@ -26,6 +26,7 @@ usage() {
echo >&2 " --emit-nr Emit the macro of the number of syscalls (__NR_syscalls)"
echo >&2 " --offset OFFSET The offset of syscall numbers"
echo >&2 " --prefix PREFIX The prefix to the macro like __NR_<PREFIX><NAME>"
+ echo >&2 " --common-tbl Use the common number table"
exit 1
}
@@ -34,6 +35,9 @@ abis=
emit_nr=
offset=
prefix=
+common_tbl=
+max=0
+COMMON_TBL_PATH="../scripts/syscall_common.tbl"
while [ $# -gt 0 ]
do
@@ -50,6 +54,9 @@ do
--prefix)
prefix=$2
shift 2;;
+ --common-tbl)
+ common_tbl=1
+ shift 1;;
-*)
echo "$1: unknown option" >&2
usage;;
@@ -69,13 +76,32 @@ guard=_UAPI_ASM_$(basename "$outfile" |
sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
-e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g')
-grep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$infile" | {
+emit_start_guard() {
echo "#ifndef $guard"
echo "#define $guard"
echo
+}
+
+# emit_nr(prefix, nr)
+emit_nr() {
+ local nr=$1
+ local prefix=$2
+ echo
+ echo "#ifdef __KERNEL__"
+ echo "#define __NR_${prefix}syscalls $nr"
+ echo "#endif"
+}
+
+emit_end_guard() {
+ echo
+ echo "#endif /* $guard */"
+}
- max=0
- while read nr abi name native compat ; do
+# gen_hdr(infile)
+gen_hdr() {
+ input=$1
+
+ while read nr abi name native compat; do
max=$nr
@@ -84,15 +110,18 @@ grep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$infile" | {
fi
echo "#define __NR_$prefix$name $nr"
- done
- if [ -n "$emit_nr" ]; then
- echo
- echo "#ifdef __KERNEL__"
- echo "#define __NR_${prefix}syscalls $(($max + 1))"
- echo "#endif"
- fi
+ done < <(grep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$input")
+}
- echo
- echo "#endif /* $guard */"
-} > "$outfile"
+emit_start_guard > $outfile
+
+gen_hdr $infile >> $outfile
+
+if [ -n "$common_tbl" ]; then
+ gen_hdr $COMMON_TBL_PATH >> "$outfile"
+fi
+
+emit_nr $(($max + 1)) $prefix >> $outfile
+
+emit_end_guard >> $outfile
diff --git a/scripts/syscalltbl.sh b/scripts/syscalltbl.sh
index 6a903b87a7c2..f4b48c8e8682 100755
--- a/scripts/syscalltbl.sh
+++ b/scripts/syscalltbl.sh
@@ -16,18 +16,23 @@
set -e
usage() {
- echo >&2 "usage: $0 [--abis ABIS] INFILE OUTFILE" >&2
+ echo >&2 "usage: $0 [--abis ABIS] [--common-tbl] [--no-compat] 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)"
+ echo >&2 " --common-tbl Use the common syscall number table"
+ echo >&2 " --no-compat Don't generated the compat version"
exit 1
}
# default unless specified by options
abis=
+common_tbl=
+no_compat=
+COMMON_TBL_PATH="../scripts/syscall_common.tbl"
while [ $# -gt 0 ]
do
@@ -35,6 +40,12 @@ do
--abis)
abis=$(echo "($2)" | tr ',' '|')
shift 2;;
+ --common-tbl)
+ common_tbl=1
+ shift 1;;
+ --no-compat)
+ no_compat=1
+ shift 1;;
-*)
echo "$1: unknown option" >&2
usage;;
@@ -52,12 +63,14 @@ outfile="$2"
nxt=0
-grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | {
+# gen_tbl(infile)
+gen_tbl() {
+ input=$1
while read nr abi name native compat noreturn; do
if [ $nxt -gt $nr ]; then
- echo "error: $infile: syscall table is not sorted or duplicates the same syscall number" >&2
+ echo "error: $input: syscall table is not sorted or duplicates the same syscall number" >&2
exit 1
fi
@@ -66,13 +79,13 @@ grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | {
nxt=$((nxt + 1))
done
- if [ "$compat" = "-" ]; then
+ if [ "$compat" = "-" ] || [ -n "$no_compat" ]; then
unset compat
fi
if [ -n "$noreturn" ]; then
if [ "$noreturn" != "noreturn" ]; then
- echo "error: $infile: invalid string \"$noreturn\" in 'noreturn' column"
+ echo "error: $input: invalid string \"$noreturn\" in 'noreturn' column"
exit 1
fi
if [ -n "$compat" ]; then
@@ -88,5 +101,13 @@ grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | {
echo "__SYSCALL($nr, sys_ni_syscall)"
fi
nxt=$((nr + 1))
- done
-} > "$outfile"
+
+ done < <(grep -E "^[0-9]+[[:space:]]+$abis" "$input")
+
+}
+
+gen_tbl $infile > "$outfile"
+
+if [ -n "$common_tbl" ]; then
+ gen_tbl $COMMON_TBL_PATH >> "$outfile"
+fi
--
2.55.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH RFC v2 2/4] syscalls: Add support for x86_x32 for the common syscall table
2026-07-28 2:47 [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs André Almeida
2026-07-28 2:47 ` [PATCH RFC v2 1/4] syscalls: Create unified partial " André Almeida
@ 2026-07-28 2:47 ` André Almeida
2026-07-28 2:47 ` [PATCH RFC v2 3/4] x86: Use " André Almeida
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: André Almeida @ 2026-07-28 2:47 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
H. Peter Anvin, Nathan Chancellor, Arnd Bergmann
Cc: linux-kernel, linux-kbuild, kernel-dev, André Almeida
x86_x32 has a peculiar ordering: first, goes the x86 syscalls. Then, the
shared syscall numbers from the common table, and finally the x86_x32
syscall numbers. Adapt syscallhdr.sh script to take this into account.
Let's hope that x32 is deprecated before the syscall table reaches syscall
512, to avoid making the shared table more confusing.
Signed-off-by: André Almeida <andrealmeid@igalia.com>
---
scripts/syscallhdr.sh | 34 +++++++++++++++++++++++++++++++---
1 file changed, 31 insertions(+), 3 deletions(-)
diff --git a/scripts/syscallhdr.sh b/scripts/syscallhdr.sh
index 0fc3e8dfc7e5..06372006509e 100755
--- a/scripts/syscallhdr.sh
+++ b/scripts/syscallhdr.sh
@@ -72,6 +72,12 @@ fi
infile="$1"
outfile="$2"
+is_x32=
+
+if [[ "$abis" == *"x32"* ]]; then
+ is_x32=1
+fi
+
guard=_UAPI_ASM_$(basename "$outfile" |
sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
-e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g')
@@ -116,10 +122,32 @@ gen_hdr() {
emit_start_guard > $outfile
-gen_hdr $infile >> $outfile
+# x32 has a special ordering. We need to get first the common numbers from x86
+# table, then the common numbers from scripts/syscall_common.tbl and finally the
+# x32 numbers
+if [ -n "$is_x32" ]; then
+
+ abis="${abis//x32|/}"
+ abis="${abis//|x32/}"
+ abis="${abis//x32/}"
+
+ if [[ $abis != "()" ]]; then
+ gen_hdr $infile >> $outfile
+
+ if [ -n "$common_tbl" ]; then
+ gen_hdr $COMMON_TBL_PATH >> "$outfile"
+ fi
+ fi
+
+ abis="(x32)"
+
+ gen_hdr $infile >> "$outfile"
+else
+ gen_hdr $infile >> $outfile
-if [ -n "$common_tbl" ]; then
- gen_hdr $COMMON_TBL_PATH >> "$outfile"
+ if [ -n "$common_tbl" ]; then
+ gen_hdr $COMMON_TBL_PATH >> "$outfile"
+ fi
fi
emit_nr $(($max + 1)) $prefix >> $outfile
--
2.55.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH RFC v2 3/4] x86: Use common syscall table
2026-07-28 2:47 [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs André Almeida
2026-07-28 2:47 ` [PATCH RFC v2 1/4] syscalls: Create unified partial " André Almeida
2026-07-28 2:47 ` [PATCH RFC v2 2/4] syscalls: Add support for x86_x32 for the common syscall table André Almeida
@ 2026-07-28 2:47 ` André Almeida
2026-07-28 2:47 ` [PATCH RFC v2 4/4] scripts/syscall.tbl: Use the common table André Almeida
2026-07-28 8:30 ` [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs Arnd Bergmann
4 siblings, 0 replies; 7+ messages in thread
From: André Almeida @ 2026-07-28 2:47 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
H. Peter Anvin, Nathan Chancellor, Arnd Bergmann
Cc: linux-kernel, linux-kbuild, kernel-dev, André Almeida
Use common syscall table and drop the shared numbers from the x86 tables.
Signed-off-by: André Almeida <andrealmeid@igalia.com>
---
arch/x86/entry/syscalls/Makefile | 16 ++++----
arch/x86/entry/syscalls/syscall_32.tbl | 68 ----------------------------------
arch/x86/entry/syscalls/syscall_64.tbl | 48 ------------------------
3 files changed, 9 insertions(+), 123 deletions(-)
diff --git a/arch/x86/entry/syscalls/Makefile b/arch/x86/entry/syscalls/Makefile
index eca5d6eff132..8dbf625c8e5f 100644
--- a/arch/x86/entry/syscalls/Makefile
+++ b/arch/x86/entry/syscalls/Makefile
@@ -15,30 +15,31 @@ prefix :=
quiet_cmd_syshdr = SYSHDR $@
cmd_syshdr = $(CONFIG_SHELL) $(syshdr) --abis $(abis) --emit-nr \
+ --common-tbl \
$(if $(offset),--offset $(offset)) \
$(if $(prefix),--prefix $(prefix)) \
$< $@
quiet_cmd_systbl = SYSTBL $@
- cmd_systbl = $(CONFIG_SHELL) $(systbl) --abis $(abis) $< $@
+ cmd_systbl = $(CONFIG_SHELL) $(systbl) --abis $(abis) --common-tbl $(no-compat) $< $@
quiet_cmd_hypercalls = HYPERCALLS $@
cmd_hypercalls = $(CONFIG_SHELL) '$<' $@ $(filter-out $<, $(real-prereqs))
-$(uapi)/unistd_32.h: abis := i386
+$(uapi)/unistd_32.h: abis := common,i386,memfd_secret,32
$(uapi)/unistd_32.h: $(syscall32) $(syshdr) FORCE
$(call if_changed,syshdr)
-$(out)/unistd_32_ia32.h: abis := i386
+$(out)/unistd_32_ia32.h: abis := common,i386,memfd_secret,32
$(out)/unistd_32_ia32.h: prefix := ia32_
$(out)/unistd_32_ia32.h: $(syscall32) $(syshdr) FORCE
$(call if_changed,syshdr)
-$(uapi)/unistd_x32.h: abis := common,x32
+$(uapi)/unistd_x32.h: abis := common,x32,memfd_secret
$(uapi)/unistd_x32.h: offset := __X32_SYSCALL_BIT
$(uapi)/unistd_x32.h: $(syscall64) $(syshdr) FORCE
$(call if_changed,syshdr)
-$(uapi)/unistd_64.h: abis := common,64
+$(uapi)/unistd_64.h: abis := common,64,memfd_secret
$(uapi)/unistd_64.h: $(syscall64) $(syshdr) FORCE
$(call if_changed,syshdr)
@@ -47,10 +48,11 @@ $(out)/unistd_64_x32.h: prefix := x32_
$(out)/unistd_64_x32.h: $(syscall64) $(syshdr) FORCE
$(call if_changed,syshdr)
-$(out)/syscalls_32.h: abis := i386
+$(out)/syscalls_32.h: abis := common,i386,memfd_secret,32
$(out)/syscalls_32.h: $(syscall32) $(systbl) FORCE
$(call if_changed,systbl)
-$(out)/syscalls_64.h: abis := common,64
+$(out)/syscalls_64.h: abis := common,64,memfd_secret
+$(out)/syscalls_64.h: no-compat:= --no-compat
$(out)/syscalls_64.h: $(syscall64) $(systbl) FORCE
$(call if_changed,systbl)
$(out)/syscalls_x32.h: abis := common,x32
diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl
index f832ebd2d79b..dfb1c75d72d6 100644
--- a/arch/x86/entry/syscalls/syscall_32.tbl
+++ b/arch/x86/entry/syscalls/syscall_32.tbl
@@ -409,71 +409,3 @@
400 i386 msgsnd sys_msgsnd compat_sys_msgsnd
401 i386 msgrcv sys_msgrcv compat_sys_msgrcv
402 i386 msgctl sys_msgctl compat_sys_msgctl
-403 i386 clock_gettime64 sys_clock_gettime
-404 i386 clock_settime64 sys_clock_settime
-405 i386 clock_adjtime64 sys_clock_adjtime
-406 i386 clock_getres_time64 sys_clock_getres
-407 i386 clock_nanosleep_time64 sys_clock_nanosleep
-408 i386 timer_gettime64 sys_timer_gettime
-409 i386 timer_settime64 sys_timer_settime
-410 i386 timerfd_gettime64 sys_timerfd_gettime
-411 i386 timerfd_settime64 sys_timerfd_settime
-412 i386 utimensat_time64 sys_utimensat
-413 i386 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64
-414 i386 ppoll_time64 sys_ppoll compat_sys_ppoll_time64
-416 i386 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64
-417 i386 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64
-418 i386 mq_timedsend_time64 sys_mq_timedsend
-419 i386 mq_timedreceive_time64 sys_mq_timedreceive
-420 i386 semtimedop_time64 sys_semtimedop
-421 i386 rt_sigtimedwait_time64 sys_rt_sigtimedwait compat_sys_rt_sigtimedwait_time64
-422 i386 futex_time64 sys_futex
-423 i386 sched_rr_get_interval_time64 sys_sched_rr_get_interval
-424 i386 pidfd_send_signal sys_pidfd_send_signal
-425 i386 io_uring_setup sys_io_uring_setup
-426 i386 io_uring_enter sys_io_uring_enter
-427 i386 io_uring_register sys_io_uring_register
-428 i386 open_tree sys_open_tree
-429 i386 move_mount sys_move_mount
-430 i386 fsopen sys_fsopen
-431 i386 fsconfig sys_fsconfig
-432 i386 fsmount sys_fsmount
-433 i386 fspick sys_fspick
-434 i386 pidfd_open sys_pidfd_open
-435 i386 clone3 sys_clone3
-436 i386 close_range sys_close_range
-437 i386 openat2 sys_openat2
-438 i386 pidfd_getfd sys_pidfd_getfd
-439 i386 faccessat2 sys_faccessat2
-440 i386 process_madvise sys_process_madvise
-441 i386 epoll_pwait2 sys_epoll_pwait2 compat_sys_epoll_pwait2
-442 i386 mount_setattr sys_mount_setattr
-443 i386 quotactl_fd sys_quotactl_fd
-444 i386 landlock_create_ruleset sys_landlock_create_ruleset
-445 i386 landlock_add_rule sys_landlock_add_rule
-446 i386 landlock_restrict_self sys_landlock_restrict_self
-447 i386 memfd_secret sys_memfd_secret
-448 i386 process_mrelease sys_process_mrelease
-449 i386 futex_waitv sys_futex_waitv
-450 i386 set_mempolicy_home_node sys_set_mempolicy_home_node
-451 i386 cachestat sys_cachestat
-452 i386 fchmodat2 sys_fchmodat2
-453 i386 map_shadow_stack sys_map_shadow_stack
-454 i386 futex_wake sys_futex_wake
-455 i386 futex_wait sys_futex_wait
-456 i386 futex_requeue sys_futex_requeue
-457 i386 statmount sys_statmount
-458 i386 listmount sys_listmount
-459 i386 lsm_get_self_attr sys_lsm_get_self_attr
-460 i386 lsm_set_self_attr sys_lsm_set_self_attr
-461 i386 lsm_list_modules sys_lsm_list_modules
-462 i386 mseal sys_mseal
-463 i386 setxattrat sys_setxattrat
-464 i386 getxattrat sys_getxattrat
-465 i386 listxattrat sys_listxattrat
-466 i386 removexattrat sys_removexattrat
-467 i386 open_tree_attr sys_open_tree_attr
-468 i386 file_getattr sys_file_getattr
-469 i386 file_setattr sys_file_setattr
-470 i386 listns sys_listns
-471 i386 rseq_slice_yield sys_rseq_slice_yield
diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl
index 524155d655da..cd94c00c2cc5 100644
--- a/arch/x86/entry/syscalls/syscall_64.tbl
+++ b/arch/x86/entry/syscalls/syscall_64.tbl
@@ -348,54 +348,6 @@
336 common uprobe sys_uprobe
# don't use numbers 387 through 423, add new calls after the last
# 'common' entry
-424 common pidfd_send_signal sys_pidfd_send_signal
-425 common io_uring_setup sys_io_uring_setup
-426 common io_uring_enter sys_io_uring_enter
-427 common io_uring_register sys_io_uring_register
-428 common open_tree sys_open_tree
-429 common move_mount sys_move_mount
-430 common fsopen sys_fsopen
-431 common fsconfig sys_fsconfig
-432 common fsmount sys_fsmount
-433 common fspick sys_fspick
-434 common pidfd_open sys_pidfd_open
-435 common clone3 sys_clone3
-436 common close_range sys_close_range
-437 common openat2 sys_openat2
-438 common pidfd_getfd sys_pidfd_getfd
-439 common faccessat2 sys_faccessat2
-440 common process_madvise sys_process_madvise
-441 common epoll_pwait2 sys_epoll_pwait2
-442 common mount_setattr sys_mount_setattr
-443 common quotactl_fd sys_quotactl_fd
-444 common landlock_create_ruleset sys_landlock_create_ruleset
-445 common landlock_add_rule sys_landlock_add_rule
-446 common landlock_restrict_self sys_landlock_restrict_self
-447 common memfd_secret sys_memfd_secret
-448 common process_mrelease sys_process_mrelease
-449 common futex_waitv sys_futex_waitv
-450 common set_mempolicy_home_node sys_set_mempolicy_home_node
-451 common cachestat sys_cachestat
-452 common fchmodat2 sys_fchmodat2
-453 common map_shadow_stack sys_map_shadow_stack
-454 common futex_wake sys_futex_wake
-455 common futex_wait sys_futex_wait
-456 common futex_requeue sys_futex_requeue
-457 common statmount sys_statmount
-458 common listmount sys_listmount
-459 common lsm_get_self_attr sys_lsm_get_self_attr
-460 common lsm_set_self_attr sys_lsm_set_self_attr
-461 common lsm_list_modules sys_lsm_list_modules
-462 common mseal sys_mseal
-463 common setxattrat sys_setxattrat
-464 common getxattrat sys_getxattrat
-465 common listxattrat sys_listxattrat
-466 common removexattrat sys_removexattrat
-467 common open_tree_attr sys_open_tree_attr
-468 common file_getattr sys_file_getattr
-469 common file_setattr sys_file_setattr
-470 common listns sys_listns
-471 common rseq_slice_yield sys_rseq_slice_yield
#
# Due to a historical design error, certain syscalls are numbered differently
--
2.55.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH RFC v2 4/4] scripts/syscall.tbl: Use the common table
2026-07-28 2:47 [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs André Almeida
` (2 preceding siblings ...)
2026-07-28 2:47 ` [PATCH RFC v2 3/4] x86: Use " André Almeida
@ 2026-07-28 2:47 ` André Almeida
2026-07-28 8:30 ` [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs Arnd Bergmann
4 siblings, 0 replies; 7+ messages in thread
From: André Almeida @ 2026-07-28 2:47 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
H. Peter Anvin, Nathan Chancellor, Arnd Bergmann
Cc: linux-kernel, linux-kbuild, kernel-dev, André Almeida
Use the common syscall number table and drop the shared numbers from the
table.
Signed-off-by: André Almeida <andrealmeid@igalia.com>
---
arch/arm64/tools/syscall_32.tbl | 68 -----------------------------------------
| 4 +--
scripts/syscall.tbl | 68 -----------------------------------------
3 files changed, 2 insertions(+), 138 deletions(-)
diff --git a/arch/arm64/tools/syscall_32.tbl b/arch/arm64/tools/syscall_32.tbl
index 62d93d88e0fe..957cb7d59443 100644
--- a/arch/arm64/tools/syscall_32.tbl
+++ b/arch/arm64/tools/syscall_32.tbl
@@ -415,71 +415,3 @@
400 common migrate_pages sys_migrate_pages
401 common kexec_file_load sys_kexec_file_load
# 402 is unused
-403 common clock_gettime64 sys_clock_gettime
-404 common clock_settime64 sys_clock_settime
-405 common clock_adjtime64 sys_clock_adjtime
-406 common clock_getres_time64 sys_clock_getres
-407 common clock_nanosleep_time64 sys_clock_nanosleep
-408 common timer_gettime64 sys_timer_gettime
-409 common timer_settime64 sys_timer_settime
-410 common timerfd_gettime64 sys_timerfd_gettime
-411 common timerfd_settime64 sys_timerfd_settime
-412 common utimensat_time64 sys_utimensat
-413 common pselect6_time64 sys_pselect6 compat_sys_pselect6_time64
-414 common ppoll_time64 sys_ppoll compat_sys_ppoll_time64
-416 common io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64
-417 common recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64
-418 common mq_timedsend_time64 sys_mq_timedsend
-419 common mq_timedreceive_time64 sys_mq_timedreceive
-420 common semtimedop_time64 sys_semtimedop
-421 common rt_sigtimedwait_time64 sys_rt_sigtimedwait compat_sys_rt_sigtimedwait_time64
-422 common futex_time64 sys_futex
-423 common sched_rr_get_interval_time64 sys_sched_rr_get_interval
-424 common pidfd_send_signal sys_pidfd_send_signal
-425 common io_uring_setup sys_io_uring_setup
-426 common io_uring_enter sys_io_uring_enter
-427 common io_uring_register sys_io_uring_register
-428 common open_tree sys_open_tree
-429 common move_mount sys_move_mount
-430 common fsopen sys_fsopen
-431 common fsconfig sys_fsconfig
-432 common fsmount sys_fsmount
-433 common fspick sys_fspick
-434 common pidfd_open sys_pidfd_open
-435 common clone3 sys_clone3
-436 common close_range sys_close_range
-437 common openat2 sys_openat2
-438 common pidfd_getfd sys_pidfd_getfd
-439 common faccessat2 sys_faccessat2
-440 common process_madvise sys_process_madvise
-441 common epoll_pwait2 sys_epoll_pwait2 compat_sys_epoll_pwait2
-442 common mount_setattr sys_mount_setattr
-443 common quotactl_fd sys_quotactl_fd
-444 common landlock_create_ruleset sys_landlock_create_ruleset
-445 common landlock_add_rule sys_landlock_add_rule
-446 common landlock_restrict_self sys_landlock_restrict_self
-# 447 reserved for memfd_secret
-448 common process_mrelease sys_process_mrelease
-449 common futex_waitv sys_futex_waitv
-450 common set_mempolicy_home_node sys_set_mempolicy_home_node
-451 common cachestat sys_cachestat
-452 common fchmodat2 sys_fchmodat2
-453 common map_shadow_stack sys_map_shadow_stack
-454 common futex_wake sys_futex_wake
-455 common futex_wait sys_futex_wait
-456 common futex_requeue sys_futex_requeue
-457 common statmount sys_statmount
-458 common listmount sys_listmount
-459 common lsm_get_self_attr sys_lsm_get_self_attr
-460 common lsm_set_self_attr sys_lsm_set_self_attr
-461 common lsm_list_modules sys_lsm_list_modules
-462 common mseal sys_mseal
-463 common setxattrat sys_setxattrat
-464 common getxattrat sys_getxattrat
-465 common listxattrat sys_listxattrat
-466 common removexattrat sys_removexattrat
-467 common open_tree_attr sys_open_tree_attr
-468 common file_getattr sys_file_getattr
-469 common file_setattr sys_file_setattr
-470 common listns sys_listns
-471 common rseq_slice_yield sys_rseq_slice_yield
--git a/scripts/Makefile.asm-headers b/scripts/Makefile.asm-headers
index 8a4856e74180..995171dab2ca 100644
--- a/scripts/Makefile.asm-headers
+++ b/scripts/Makefile.asm-headers
@@ -58,14 +58,14 @@ quiet_cmd_remove = REMOVE $(unwanted)
cmd_remove = rm -f $(unwanted)
quiet_cmd_syshdr = SYSHDR $@
- cmd_syshdr = $(CONFIG_SHELL) $(syshdr) \
+ cmd_syshdr = $(CONFIG_SHELL) $(syshdr) --common-tbl \
$(if $(syshdr-args-$*),$(syshdr-args-$*),$(syshdr-args)) \
$(if $(syscall_compat),--prefix "compat$*_") \
--abis $(subst $(space),$(comma),$(strip $(syscall_abis_$*))) \
$< $@
quiet_cmd_systbl = SYSTBL $@
- cmd_systbl = $(CONFIG_SHELL) $(systbl) \
+ cmd_systbl = $(CONFIG_SHELL) $(systbl) --common-tbl \
$(if $(systbl-args-$*),$(systbl-args-$*),$(systbl-args)) \
--abis $(subst $(space),$(comma),$(strip $(syscall_abis_$*))) \
$< $@
diff --git a/scripts/syscall.tbl b/scripts/syscall.tbl
index 7a42b32b6577..ee828d03094e 100644
--- a/scripts/syscall.tbl
+++ b/scripts/syscall.tbl
@@ -344,71 +344,3 @@
293 common rseq sys_rseq
294 common kexec_file_load sys_kexec_file_load
# 295 through 402 are unassigned to sync up with generic numbers don't use
-403 32 clock_gettime64 sys_clock_gettime
-404 32 clock_settime64 sys_clock_settime
-405 32 clock_adjtime64 sys_clock_adjtime
-406 32 clock_getres_time64 sys_clock_getres
-407 32 clock_nanosleep_time64 sys_clock_nanosleep
-408 32 timer_gettime64 sys_timer_gettime
-409 32 timer_settime64 sys_timer_settime
-410 32 timerfd_gettime64 sys_timerfd_gettime
-411 32 timerfd_settime64 sys_timerfd_settime
-412 32 utimensat_time64 sys_utimensat
-413 32 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64
-414 32 ppoll_time64 sys_ppoll compat_sys_ppoll_time64
-416 32 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64
-417 32 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64
-418 32 mq_timedsend_time64 sys_mq_timedsend
-419 32 mq_timedreceive_time64 sys_mq_timedreceive
-420 32 semtimedop_time64 sys_semtimedop
-421 32 rt_sigtimedwait_time64 sys_rt_sigtimedwait compat_sys_rt_sigtimedwait_time64
-422 32 futex_time64 sys_futex
-423 32 sched_rr_get_interval_time64 sys_sched_rr_get_interval
-424 common pidfd_send_signal sys_pidfd_send_signal
-425 common io_uring_setup sys_io_uring_setup
-426 common io_uring_enter sys_io_uring_enter
-427 common io_uring_register sys_io_uring_register
-428 common open_tree sys_open_tree
-429 common move_mount sys_move_mount
-430 common fsopen sys_fsopen
-431 common fsconfig sys_fsconfig
-432 common fsmount sys_fsmount
-433 common fspick sys_fspick
-434 common pidfd_open sys_pidfd_open
-435 common clone3 sys_clone3
-436 common close_range sys_close_range
-437 common openat2 sys_openat2
-438 common pidfd_getfd sys_pidfd_getfd
-439 common faccessat2 sys_faccessat2
-440 common process_madvise sys_process_madvise
-441 common epoll_pwait2 sys_epoll_pwait2 compat_sys_epoll_pwait2
-442 common mount_setattr sys_mount_setattr
-443 common quotactl_fd sys_quotactl_fd
-444 common landlock_create_ruleset sys_landlock_create_ruleset
-445 common landlock_add_rule sys_landlock_add_rule
-446 common landlock_restrict_self sys_landlock_restrict_self
-447 memfd_secret memfd_secret sys_memfd_secret
-448 common process_mrelease sys_process_mrelease
-449 common futex_waitv sys_futex_waitv
-450 common set_mempolicy_home_node sys_set_mempolicy_home_node
-451 common cachestat sys_cachestat
-452 common fchmodat2 sys_fchmodat2
-453 common map_shadow_stack sys_map_shadow_stack
-454 common futex_wake sys_futex_wake
-455 common futex_wait sys_futex_wait
-456 common futex_requeue sys_futex_requeue
-457 common statmount sys_statmount
-458 common listmount sys_listmount
-459 common lsm_get_self_attr sys_lsm_get_self_attr
-460 common lsm_set_self_attr sys_lsm_set_self_attr
-461 common lsm_list_modules sys_lsm_list_modules
-462 common mseal sys_mseal
-463 common setxattrat sys_setxattrat
-464 common getxattrat sys_getxattrat
-465 common listxattrat sys_listxattrat
-466 common removexattrat sys_removexattrat
-467 common open_tree_attr sys_open_tree_attr
-468 common file_getattr sys_file_getattr
-469 common file_setattr sys_file_setattr
-470 common listns sys_listns
-471 common rseq_slice_yield sys_rseq_slice_yield
--
2.55.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RFC v2 1/4] syscalls: Create unified partial table for all archs
2026-07-28 2:47 ` [PATCH RFC v2 1/4] syscalls: Create unified partial " André Almeida
@ 2026-07-28 6:47 ` Arnd Bergmann
0 siblings, 0 replies; 7+ messages in thread
From: Arnd Bergmann @ 2026-07-28 6:47 UTC (permalink / raw)
To: André Almeida, Thomas Gleixner, Ingo Molnar,
Borislav Petkov, Dave Hansen, H. Peter Anvin, Nathan Chancellor
Cc: linux-kernel, linux-kbuild, kernel-dev
On Tue, Jul 28, 2026, at 04:47, André Almeida wrote:
> echo >&2 "options:"
> echo >&2 " --abis ABIS ABI(s) to handle (By default, all
> lines are handled)"
> + echo >&2 " --common-tbl Use the common syscall number table"
> + echo >&2 " --no-compat Don't generated the compat version"
> exit 1
You don't explain what the --no-compat flag is good for.
I would hope we can avoid adding even more flags here since
there may be other (external) scripts that process the same data
and that need to stay in sync.
> +COMMON_TBL_PATH="../scripts/syscall_common.tbl"
Hardcoding the path here means the script can no longer work
outside of the kernel tree. Maybe you can you combine this with
the --common-tbl argument to pass the file name?
Arnd
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs
2026-07-28 2:47 [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs André Almeida
` (3 preceding siblings ...)
2026-07-28 2:47 ` [PATCH RFC v2 4/4] scripts/syscall.tbl: Use the common table André Almeida
@ 2026-07-28 8:30 ` Arnd Bergmann
4 siblings, 0 replies; 7+ messages in thread
From: Arnd Bergmann @ 2026-07-28 8:30 UTC (permalink / raw)
To: André Almeida, Thomas Gleixner, Ingo Molnar,
Borislav Petkov, Dave Hansen, H. Peter Anvin, Nathan Chancellor
Cc: linux-kernel, linux-kbuild, kernel-dev
On Tue, Jul 28, 2026, at 04:47, André Almeida wrote:
> The generic table starts from 403 (clock_gettime64), the first common syscall.
> The scripts are adapted to x86 specifics, like not generating the compat entry
> point for x86_64 and placing x86_x32 things in the proper order. x32 is likely
> to be dropped from Linux soon but for the moment I left the support there. If
> this sounds good, next revision I can add the docs bits too.
It may be easier to skip x32/x86-64 for the moment and focus on
the architectures that we know need small changes (mips, powerpc,
alpha).
The patch at
https://lore.kernel.org/all/20260707212252.bYk3-AlU@linutronix.de/
still hasn't been picked up yet. If your series is done before
we actually remove x32, we may still need to add a temporary
workaround for it, but it would be easier to avoid that altogether
by waiting a bit.
> I've tested this with x86 and arm64, by comparing the syscalls_*.h and
> unistd_*.h files generated before and after this patchset and they are
> identical.
I've had another look at what I tried previously, here is the list of
things we have to figure out to do this properly across all
architectures:
- separate offsets for base and common table on alpha. Maybe we can
just process the two tables separately here and combine the
output files afterwards?
- special __sys_clone3 entry points on alpha, m68k, mips, parisc and
sparc.
- combine mips n32/n64 tables into a single file with regular
use of compat entries for n32, in order to handle compat entry
for the common calls (epoll_pwait2, pselect_time64, ppoll_time64,
io_pgetevents_time64, recvmmsg_time64, rt_sigtimedwait_time64)
- come up with a solution for nospu syscalls on powerpc (clone3,
set_mempolicy_home_node, rseq_slice_yield). Possibly dropping support
for spu syscalls entirely, making all common syscalls implicitly
nospu, incorporating this in the common table, or handling this
in the syscall implementation where necessary.
note that newlib still supports spu syscalls, but only lists
numbers up to __NR_sync_file_range2 (#308). gcc-10 and higher
no longer support SPU at all.
Arnd
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-07-28 8:31 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-28 2:47 [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs André Almeida
2026-07-28 2:47 ` [PATCH RFC v2 1/4] syscalls: Create unified partial " André Almeida
2026-07-28 6:47 ` Arnd Bergmann
2026-07-28 2:47 ` [PATCH RFC v2 2/4] syscalls: Add support for x86_x32 for the common syscall table André Almeida
2026-07-28 2:47 ` [PATCH RFC v2 3/4] x86: Use " André Almeida
2026-07-28 2:47 ` [PATCH RFC v2 4/4] scripts/syscall.tbl: Use the common table André Almeida
2026-07-28 8:30 ` [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs Arnd Bergmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®