Re: [PATCH v7 04/13] arm: Use the common syscall table

From: Arnd Bergmann

Date: Fri Sep 18 2026 - 02:23:00 EST


On Fri, Sep 18, 2026, at 01:46, André Almeida wrote:
> Remove some of the duplicated code by using the common syscall number
> table.
>
> Signed-off-by: André Almeida <andrealmeid@xxxxxxxxxx>
> ---
> Changes from v6:
> - Added back syscalls from 403 to 423 to local table. arm32 can't use the
> common table for those syscalls, because arm doesn't implements compat_
> entry points for syscalls like pselect6, ppoll, etc., and OABI uses compat_
> entry points when it's available, so this would cause a build error.

That's too bad, especially if this is only needed for OABI, which
nobody should be using any more. I had hoped we could kill off OABI
soonish, but that is currently blocked on the discussion about keeping
RiscPC alive.

One possible idea would be to rework the table to differentiate
the cases using separate ABI tags for the three cases (EABI native,
OABI native, OABI on EABI), instead of using the compat column:

--- a/arch/arm/tools/syscall.tbl
+++ b/arch/arm/tools/syscall.tbl
@@ -115,7 +115,8 @@
99 common statfs sys_statfs
100 common fstatfs sys_fstatfs
# 101 was sys_ioperm
-102 oabi socketcall sys_socketcall sys_oabi_socketcall
+102 oabi socketcall sys_socketcall
+102 oabic socketcall sys_oabi_socketcall
103 common syslog sys_syslog
104 common setitimer sys_setitimer
105 common getitimer sys_getitimer
@@ -131,7 +132,8 @@
114 common wait4 sys_wait4
115 common swapoff sys_swapoff
116 common sysinfo sys_sysinfo
-117 oabi ipc sys_ipc sys_oabi_ipc
+117 oabi ipc sys_ipc
+117 oabic ipc sys_oabi_ipc
118 common fsync sys_fsync
119 common sigreturn sys_sigreturn_wrapper
120 common clone sys_clone
@@ -194,8 +196,12 @@
177 common rt_sigtimedwait sys_rt_sigtimedwait_time32
178 common rt_sigqueueinfo sys_rt_sigqueueinfo
179 common rt_sigsuspend sys_rt_sigsuspend
-180 common pread64 sys_pread64 sys_oabi_pread64
-181 common pwrite64 sys_pwrite64 sys_oabi_pwrite64
+180 eabi pread64 sys_pread64
+180 oabi pread64 sys_pread64
+180 oabic pread64 sys_oabi_pread64
+181 eabi pwrite64 sys_pwrite64
+181 oabi pwrite64 sys_pwrite64
+181 oabic pwrite64 sys_oabi_pwrite64
182 common chown sys_chown16
183 common getcwd sys_getcwd
184 common capget sys_capget
...


Not great, but it has the additional advantage of finally being able
to share the table file with the arm64 copy.

Another idea would be to actually add the six compat_sys_
entry points for OABI from the common table, or redirect
them like

diff --git a/arch/arm/include/asm/unistd.h b/arch/arm/include/asm/unistd.h
index 9fb00973c608..1ff4b6579ba1 100644
--- a/arch/arm/include/asm/unistd.h
+++ b/arch/arm/include/asm/unistd.h
@@ -33,6 +33,15 @@
#define __ARCH_WANT_SYS_OLD_GETRLIMIT
#define __ARCH_WANT_OLD_READDIR
#define __ARCH_WANT_SYS_SOCKETCALL
+
+/* allow using compat column from shared syscall table */
+#define compat_sys_pselect6_time64 sys_pselect6_time64
+#define compat_sys_ppoll_time64 sys_ppoll_time64
+#define compat_sys_io_pgetevents_time64 sys_io_pgetevents_time64
+#define compat_sys_recvmmsg_time64 sys_recvmmsg_time64
+#define compat_sys_rt_sigtimedwait_time64 sys_rt_sigtimedwait_time64
+#define compat_sys_epoll_pwait2 sys_epoll_pwait2
+
#endif
#define __ARCH_WANT_SYS_FORK
#define __ARCH_WANT_SYS_VFORK

This would be the least invasive here, but also the least intuitive.

Arnd