summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2016-11-02 15:41:15 -0200
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2016-12-28 20:28:56 -0200
commit63719cf1e378b1a01ec6a36cf0ab7462cfb7a6c6 (patch)
tree0451eb07430e7bbddb19b0e48e31a49c101116b0
parent5e628dd118807981bdd880731e6fdf019f64a245 (diff)
downloadglibc-63719cf1e378b1a01ec6a36cf0ab7462cfb7a6c6.tar.gz
Add __ASSUME_DIRECT_SYSVIPC_SYSCALL for Linux
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_DIRECT_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_DIRECT_SYSVIPC_SYSCALL): New define. * sysdeps/unix/sysv/linux/i386/kernel-features.h (__ASSUME_DIRECT_SYSVIPC_SYSCALL): Undef. * sysdeps/unix/sysv/linux/m68k/kernel-features.h (__ASSUME_DIRECT_SYSVIPC_SYSCALL): Likewise. * sysdeps/unix/sysv/linux/mips/kernel-features.h (__ASSUME_DIRECT_SYSVIPC_SYSCALL): Likewise. * sysdeps/unix/sysv/linux/powerpc/kernel-features.h (__ASSUME_DIRECT_SYSVIPC_SYSCALL): Likewise. * sysdeps/unix/sysv/linux/s390/kernel-features.h (__ASSUME_DIRECT_SYSVIPC_SYSCALL): Likewise. * sysdeps/unix/sysv/linux/sh/kernel-features.h (__ASSUME_DIRECT_SYSVIPC_SYSCALL): Likewise. * sysdeps/unix/sysv/linux/sparc/kernel-features.h (__ASSUME_DIRECT_SYSVIPC_SYSCALL): Likewise.
-rw-r--r--ChangeLog19
-rw-r--r--sysdeps/unix/sysv/linux/i386/kernel-features.h3
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h4
-rw-r--r--sysdeps/unix/sysv/linux/m68k/kernel-features.h3
-rw-r--r--sysdeps/unix/sysv/linux/mips/kernel-features.h2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/kernel-features.h3
-rw-r--r--sysdeps/unix/sysv/linux/s390/kernel-features.h3
-rw-r--r--sysdeps/unix/sysv/linux/sh/kernel-features.h3
-rw-r--r--sysdeps/unix/sysv/linux/sparc/kernel-features.h3
9 files changed, 43 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 1ad68675c2..e942c298f3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2016-12-28 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+
+ * sysdeps/unix/sysv/linux/kernel-features.h
+ (__ASSUME_DIRECT_SYSVIPC_SYSCALLS): New define.
+ * sysdeps/unix/sysv/linux/i386/kernel-features.h
+ (__ASSUME_DIRECT_SYSVIPC_SYSCALLS): Undef.
+ * sysdeps/unix/sysv/linux/m68k/kernel-features.h
+ (__ASSUME_DIRECT_SYSVIPC_SYSCALLS): Likewise.
+ * sysdeps/unix/sysv/linux/mips/kernel-features.h
+ (__ASSUME_DIRECT_SYSVIPC_SYSCALLS): Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/kernel-features.h
+ (__ASSUME_DIRECT_SYSVIPC_SYSCALLS): Likewise.
+ * sysdeps/unix/sysv/linux/s390/kernel-features.h
+ (__ASSUME_DIRECT_SYSVIPC_SYSCALLS): Likewise.
+ * sysdeps/unix/sysv/linux/sh/kernel-features.h
+ (__ASSUME_DIRECT_SYSVIPC_SYSCALLS): Likewise.
+ * sysdeps/unix/sysv/linux/sparc/kernel-features.h
+ (__ASSUME_DIRECT_SYSVIPC_SYSCALLS): Likewise.
+
2016-12-28 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
* sysdeps/powerpc/powerpc32/power7/memchr.S (__memchr): Avoid an
diff --git a/sysdeps/unix/sysv/linux/i386/kernel-features.h b/sysdeps/unix/sysv/linux/i386/kernel-features.h
index 148963c36c..0a557f8d7d 100644
--- a/sysdeps/unix/sysv/linux/i386/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/i386/kernel-features.h
@@ -52,3 +52,6 @@
# undef __ASSUME_SENDMSG_SYSCALL
# undef __ASSUME_RECVMSG_SYSCALL
#endif
+
+/* i686 only supports ipc syscall. */
+#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 1d3b554f81..19125ce85c 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -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_DIRECT_SYSVIPC_SYSCALLS 1
diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
index 46ec60115f..b03de4cef1 100644
--- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
@@ -54,3 +54,6 @@
# undef __ASSUME_REQUEUE_PI
# undef __ASSUME_SET_ROBUST_LIST
#endif
+
+/* m68k only supports ipc syscall. */
+#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h
index b486d904c3..fae34aaa18 100644
--- a/sysdeps/unix/sysv/linux/mips/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h
@@ -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_DIRECT_SYSVIPC_SYSCALLS
#endif
/* Define that mips64-n32 is a ILP32 ABI to set the correct interface to
diff --git a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
index 42a53f2c1c..5a84b6b3d3 100644
--- a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
@@ -52,3 +52,6 @@
#endif
#include_next <kernel-features.h>
+
+/* powerpc only supports ipc syscall. */
+#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
diff --git a/sysdeps/unix/sysv/linux/s390/kernel-features.h b/sysdeps/unix/sysv/linux/s390/kernel-features.h
index b3edee4b62..10eade3c5e 100644
--- a/sysdeps/unix/sysv/linux/s390/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/s390/kernel-features.h
@@ -48,3 +48,6 @@
# undef __ASSUME_SENDMSG_SYSCALL
# undef __ASSUME_RECVMSG_SYSCALL
#endif
+
+/* s390 only supports ipc syscall. */
+#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
diff --git a/sysdeps/unix/sysv/linux/sh/kernel-features.h b/sysdeps/unix/sysv/linux/sh/kernel-features.h
index d03aafac75..9eb8ff46d9 100644
--- a/sysdeps/unix/sysv/linux/sh/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/sh/kernel-features.h
@@ -54,4 +54,7 @@
before the offset. */
#define __ASSUME_PRW_DUMMY_ARG 1
+/* sh only supports ipc syscall. */
+#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+
#endif
diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h
index 69c9c7c84e..e487efecf1 100644
--- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/sparc/kernel-features.h
@@ -37,3 +37,6 @@
# undef __ASSUME_REQUEUE_PI
# undef __ASSUME_SET_ROBUST_LIST
#endif
+
+/* sparc only supports ipc syscall. */
+#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS