[v3,01/17] Add __ASSUME_SYSVIPC_SYSCALL for Linux
Commit Message
On current minimum supported kernels, the SysV IPC on Linux is provided
by either the ipc syscalls or correspondent wire syscalls. Also, for
architectures that supports wire syscalls all syscalls are supported
in a set (msgct, msgrcv, msgsnd, msgget, semctl, semget, semop, semtimedop,
shmctl, shmat, shmget, shmdt).
The architectures that only supports ipc syscall are:
- i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and
powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64.
And the architectures that only supports wired syscalls are:
- aarch64, alpha, hppa, ia64, mips64, mips64n32, nios2, tile
(tilepro, tilegx, and tilegx64), and x86_64
Also arm is the only one that supports both wire syscalls and the
ipc, although the ipc one is deprecated.
This patch adds a new define, __ASSUME_SYSVIPC_SYSCALL, that wired
syscalls are supported on the system and the general idea is to use
it where possible.
I also checked the syscall table for all architectures on Linux 4.9
and there is no change on described support for Linux 2.6.32/3.2.
* sysdeps/unix/sysv/linux/kernel-features.h
(__ASSUME_SYSVIPC_SYSCALL): New define.
* sysdeps/unix/sysv/linux/i386/kernel-features.h
(__ASSUME_SYSVIPC_SYSCALL): Undef.
* sysdeps/unix/sysv/linux/m68k/kernel-features.h
(__ASSUME_SYSVIPC_SYSCALL): Likewise.
* sysdeps/unix/sysv/linux/mips/kernel-features.h
(__ASSUME_SYSVIPC_SYSCALL): Likewise.
* sysdeps/unix/sysv/linux/powerpc/kernel-features.h
(__ASSUME_SYSVIPC_SYSCALL): Likewise.
* sysdeps/unix/sysv/linux/s390/kernel-features.h
(__ASSUME_SYSVIPC_SYSCALL): Likewise.
* sysdeps/unix/sysv/linux/sh/kernel-features.h
(__ASSUME_SYSVIPC_SYSCALL): Likewise.
* sysdeps/unix/sysv/linux/sparc/kernel-features.h
(__ASSUME_SYSVIPC_SYSCALL): Likewise.
---
ChangeLog | 19 +++++++++++++++++++
sysdeps/unix/sysv/linux/i386/kernel-features.h | 3 +++
sysdeps/unix/sysv/linux/kernel-features.h | 4 ++++
sysdeps/unix/sysv/linux/m68k/kernel-features.h | 3 +++
sysdeps/unix/sysv/linux/mips/kernel-features.h | 2 ++
sysdeps/unix/sysv/linux/powerpc/kernel-features.h | 3 +++
sysdeps/unix/sysv/linux/s390/kernel-features.h | 3 +++
sysdeps/unix/sysv/linux/sh/kernel-features.h | 3 +++
sysdeps/unix/sysv/linux/sparc/kernel-features.h | 3 +++
9 files changed, 43 insertions(+)
Comments
On Nov 08 2016, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote:
> This patch adds a new define, __ASSUME_SYSVIPC_SYSCALL, that wired
> syscalls are supported on the system and the general idea is to use
> it where possible.
For me, the name implies to use the ipc multiplexer, not the other way
round. Perhaps rename it to __ASSMUME_DIRECT_SYSVIPC_SYSCALLS.
Andreas.
On 08/11/2016 19:18, Andreas Schwab wrote:
> On Nov 08 2016, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote:
>
>> This patch adds a new define, __ASSUME_SYSVIPC_SYSCALL, that wired
>> syscalls are supported on the system and the general idea is to use
>> it where possible.
>
> For me, the name implies to use the ipc multiplexer, not the other way
> round. Perhaps rename it to __ASSMUME_DIRECT_SYSVIPC_SYSCALLS.
>
> Andreas.
>
Right, I changed it locally here to __ASSUME_DIRECT_SYSVIPC_SYSCALL.
@@ -52,3 +52,6 @@
# undef __ASSUME_SENDMSG_SYSCALL
# undef __ASSUME_RECVMSG_SYSCALL
#endif
+
+/* i686 only supports ipc syscall. */
+#undef __ASSUME_SYSVIPC_SYSCALL
@@ -147,3 +147,7 @@
separate syscalls were only added later. */
#define __ASSUME_SENDMSG_SYSCALL 1
#define __ASSUME_RECVMSG_SYSCALL 1
+
+/* Support for SysV IPC through wired syscalls. All supported architectures
+ either support ipc syscall and/or all the ipc correspondent syscalls. */
+#define __ASSUME_SYSVIPC_SYSCALL 1
@@ -54,3 +54,6 @@
# undef __ASSUME_REQUEUE_PI
# undef __ASSUME_SET_ROBUST_LIST
#endif
+
+/* m68k only supports ipc syscall. */
+#undef __ASSUME_SYSVIPC_SYSCALL
@@ -32,6 +32,8 @@
pairs to start with an even-number register. */
#if _MIPS_SIM == _ABIO32
# define __ASSUME_ALIGNED_REGISTER_PAIRS 1
+/* mips32 only supports ipc syscall. */
+# undef __ASSUME_SYSVIPC_SYSCALL
#endif
/* Define that mips64-n32 is a ILP32 ABI to set the correct interface to
@@ -52,3 +52,6 @@
#endif
#include_next <kernel-features.h>
+
+/* powerpc only supports ipc syscall. */
+#undef __ASSUME_SYSVIPC_SYSCALL
@@ -48,3 +48,6 @@
# undef __ASSUME_SENDMSG_SYSCALL
# undef __ASSUME_RECVMSG_SYSCALL
#endif
+
+/* s390 only supports ipc syscall. */
+#undef __ASSUME_SYSVIPC_SYSCALL
@@ -50,3 +50,6 @@
the kernel interface for p{read,write}64 adds a dummy long argument
before the offset. */
#define __ASSUME_PRW_DUMMY_ARG 1
+
+/* sh only supports ipc syscall. */
+#undef __ASSUME_SYSVIPC_SYSCALL
@@ -37,3 +37,6 @@
# undef __ASSUME_REQUEUE_PI
# undef __ASSUME_SET_ROBUST_LIST
#endif
+
+/* sparc only supports ipc syscall. */
+#undef __ASSUME_SYSVIPC_SYSCALL