* [PATCH 3/3] Update sysvipc kernel-features.h files for Linux 5.1
2019-10-11 19:16 [PATCH 1/3] ipc: Refactor sysvipc internal definitions Adhemerval Zanella
2019-10-11 19:16 ` [PATCH 2/3] sysvipc: Implement semop based on semtimedop Adhemerval Zanella
@ 2019-10-11 19:16 ` Adhemerval Zanella
2019-10-15 19:10 ` Paul Clarke
2019-10-15 11:45 ` [PATCH 1/3] ipc: Refactor sysvipc internal definitions Florian Weimer
2 siblings, 1 reply; 12+ messages in thread
From: Adhemerval Zanella @ 2019-10-11 19:16 UTC (permalink / raw)
To: libc-alpha; +Cc: Paul A . Clarke
Linux 5.1 adds missing SySV IPC syscalls to the syscall table for
remanining one that still uses the ipc syscall on glibc (m68k, mips-o32,
powerpc, s390, sh, and sparc32). However the newly added direct ipc
syscall are different than the old ones:
1. They do not expect IPC_64, meaning __IPC_64 should be set to zero
when new syscalls are used. And new syscalls can not be used
for compat functions like __old_semctl (to emulated old sysvipc it
requires to use the old __NR_ipc syscall without __IPC_64).
Thus IPC_64 is redefined for newer kernels on affected ABIs.
2. semtimedop and semop does not exist on 32-bit ABIs (only
semtimedop_time64 is supplied). The provided syscall wrappers only
uses the wire-up syscall if __NR_semtimedop and __NR_semop are
also defined.
Checked on x86_64-linux-gnu and i686-linux-gnu on both a 4.15 kernel
configure with default options and sysvipc tests on a 5.1.2 kernel with
--enable-kernel=5.1.
I also checked the sysvipc tests on alpha, hppa, mips (32, 64, and n32),
powerpc (32, 64, 64le), sparc (32, 64), and s390 (32, 64).
* sysdeps/unix/sysv/linux/i386/kernel-features.h.
(__ASSUME_DIRECT_SYSVIPC_SYSCALLS): Only undefine if
[__LINUX_KERNEL_VERSION < 0x050100].
(__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/m68k/kernel-features.h
(__ASSUME_DIRECT_SYSVIPC_SYSCALLS,
__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/mips/kernel-features.h
(__ASSUME_DIRECT_SYSVIPC_SYSCALLS,
__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/powerpc/kernel-features.h
(__ASSUME_DIRECT_SYSVIPC_SYSCALLS,
__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/s390/kernel-features.h
(__ASSUME_DIRECT_SYSVIPC_SYSCALLS,
__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/sh/kernel-features.h
(__ASSUME_DIRECT_SYSVIPC_SYSCALLS,
__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/sparc/kernel-features.h
(__ASSUME_DIRECT_SYSVIPC_SYSCALLS,
__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/msgctl.c (__old_msgctl): Only use wire-up
syscall if __ASSUME_SYSVIPC_DEFAULT_IPC_64 is not defined.
* sysdeps/unix/sysv/linux/semctl.c (__old_semctl): Likewise.
* sysdeps/unix/sysv/linux/shmctl.c (__old_shmctl): Likewise.
* sysdeps/unix/sysv/linux/semop.c (semop): Only use wire-up if
__NR_semop is also defined.
* sysdeps/unix/sysv/linux/semtimedop.c (semtimedop): Likewise.
---
sysdeps/unix/sysv/linux/i386/kernel-features.h | 8 +++++---
sysdeps/unix/sysv/linux/m68k/kernel-features.h | 8 +++++---
sysdeps/unix/sysv/linux/mips/kernel-features.h | 12 ++++++++----
sysdeps/unix/sysv/linux/msgctl.c | 6 +++++-
sysdeps/unix/sysv/linux/powerpc/kernel-features.h | 8 +++++---
sysdeps/unix/sysv/linux/s390/kernel-features.h | 8 +++++---
sysdeps/unix/sysv/linux/semctl.c | 6 +++++-
sysdeps/unix/sysv/linux/semtimedop.c | 4 +++-
sysdeps/unix/sysv/linux/sh/kernel-features.h | 8 +++++---
sysdeps/unix/sysv/linux/shmctl.c | 6 +++++-
sysdeps/unix/sysv/linux/sparc/kernel-features.h | 10 ++++++----
11 files changed, 57 insertions(+), 27 deletions(-)
diff --git a/sysdeps/unix/sysv/linux/i386/kernel-features.h b/sysdeps/unix/sysv/linux/i386/kernel-features.h
index 33ba18e791..9db3b3a31c 100644
--- a/sysdeps/unix/sysv/linux/i386/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/i386/kernel-features.h
@@ -43,9 +43,11 @@
# undef __ASSUME_SENDTO_SYSCALL
#endif
-/* i686 only supports ipc syscall. */
-#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
-#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
+/* i686 only supports ipc syscall before 5.1. */
+#if __LINUX_KERNEL_VERSION < 0x050100
+# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
+#endif
#undef __ASSUME_CLONE_DEFAULT
#define __ASSUME_CLONE_BACKWARDS 1
diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
index 7ff9b5e28d..76f90ff8b4 100644
--- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
@@ -50,7 +50,9 @@
# undef __ASSUME_SET_ROBUST_LIST
#endif
-/* m68k only supports ipc syscall. */
-#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+/* m68k only supports ipc syscall before 5.1. */
+#if __LINUX_KERNEL_VERSION < 0x050100
+# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
+#endif
#define __ASSUME_SYSVIPC_BROKEN_MODE_T
-#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h
index 7123b362ee..ad5b1ace82 100644
--- a/sysdeps/unix/sysv/linux/mips/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h
@@ -31,8 +31,12 @@
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
+/* mips32 only supports ipc syscall before 5.1. */
+# if __LINUX_KERNEL_VERSION < 0x050100
+# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
+# else
+# endif
/* The o32 MIPS fadvise64 syscall behaves as fadvise64_64. */
# define __ASSUME_FADVISE64_AS_64_64 1
@@ -40,6 +44,8 @@
/* mips32 support wire-up network syscalls. */
# define __ASSUME_RECV_SYSCALL 1
# define __ASSUME_SEND_SYSCALL 1
+#else
+# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
#endif
/* Define that mips64-n32 is a ILP32 ABI to set the correct interface to
@@ -50,5 +56,3 @@
#undef __ASSUME_CLONE_DEFAULT
#define __ASSUME_CLONE_BACKWARDS 1
-
-#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
diff --git a/sysdeps/unix/sysv/linux/msgctl.c b/sysdeps/unix/sysv/linux/msgctl.c
index 19d5ded19f..71b89c1153 100644
--- a/sysdeps/unix/sysv/linux/msgctl.c
+++ b/sysdeps/unix/sysv/linux/msgctl.c
@@ -111,7 +111,11 @@ int
attribute_compat_text_section
__old_msgctl (int msqid, int cmd, struct __old_msqid_ds *buf)
{
-#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+#if defined __ASSUME_DIRECT_SYSVIPC_SYSCALLS \
+ && !defined __ASSUME_SYSVIPC_DEFAULT_IPC_64
+ /* For architecture that have wire-up msgctl but also have __IPC_64 to a
+ value different than default (0x0), it means the old syscall was done
+ using __NR_ipc. */
return INLINE_SYSCALL_CALL (msgctl, msqid, cmd, buf);
#else
return INLINE_SYSCALL_CALL (ipc, IPCOP_msgctl, msqid, cmd, 0, buf);
diff --git a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
index b93f7f8f13..96a2c4b2aa 100644
--- a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
@@ -44,9 +44,11 @@
#include_next <kernel-features.h>
-/* powerpc only supports ipc syscall. */
-#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
-#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
+/* powerpc only supports ipc syscall before 5.1. */
+#if __LINUX_KERNEL_VERSION < 0x050100
+# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
+#endif
#undef __ASSUME_CLONE_DEFAULT
#define __ASSUME_CLONE_BACKWARDS 1
diff --git a/sysdeps/unix/sysv/linux/s390/kernel-features.h b/sysdeps/unix/sysv/linux/s390/kernel-features.h
index f1f8dad305..0fbd16ab85 100644
--- a/sysdeps/unix/sysv/linux/s390/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/s390/kernel-features.h
@@ -45,12 +45,14 @@
# undef __ASSUME_SENDTO_SYSCALL
#endif
-/* s390 only supports ipc syscall. */
-#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+/* s390 only supports ipc syscall before 5.1. */
+#if __LINUX_KERNEL_VERSION < 0x050100
+# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
+#endif
#ifndef __s390x__
# define __ASSUME_SYSVIPC_BROKEN_MODE_T
#endif
-#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
#undef __ASSUME_CLONE_DEFAULT
#define __ASSUME_CLONE_BACKWARDS2
diff --git a/sysdeps/unix/sysv/linux/semctl.c b/sysdeps/unix/sysv/linux/semctl.c
index e7f48e4093..9444515537 100644
--- a/sysdeps/unix/sysv/linux/semctl.c
+++ b/sysdeps/unix/sysv/linux/semctl.c
@@ -168,7 +168,11 @@ __old_semctl (int semid, int semnum, int cmd, ...)
break;
}
-# ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+#if defined __ASSUME_DIRECT_SYSVIPC_SYSCALLS \
+ && !defined __ASSUME_SYSVIPC_DEFAULT_IPC_64
+ /* For architecture that have wire-up semctl but also have __IPC_64 to a
+ value different than default (0x0), it means the old syscall was done
+ using __NR_ipc. */
return INLINE_SYSCALL_CALL (semctl, semid, semnum, cmd, arg.array);
# else
return INLINE_SYSCALL_CALL (ipc, IPCOP_semctl, semid, semnum, cmd,
diff --git a/sysdeps/unix/sysv/linux/semtimedop.c b/sysdeps/unix/sysv/linux/semtimedop.c
index 5f1b205c2b..eade9ec36a 100644
--- a/sysdeps/unix/sysv/linux/semtimedop.c
+++ b/sysdeps/unix/sysv/linux/semtimedop.c
@@ -27,7 +27,9 @@ int
__semtimedop (int semid, struct sembuf *sops, size_t nsops,
const struct timespec *timeout)
{
-#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+ /* semtimedop wire-up syscall is not exported for 32-bit ABIs (they have
+ semtimedop_time64 instead with uses a 64-bit time_t). */
+#if defined __ASSUME_DIRECT_SYSVIPC_SYSCALLS && defined __NR_semtimedop
return INLINE_SYSCALL_CALL (semtimedop, semid, sops, nsops, timeout);
#else
return INLINE_SYSCALL_CALL (ipc, IPCOP_semtimedop, semid,
diff --git a/sysdeps/unix/sysv/linux/sh/kernel-features.h b/sysdeps/unix/sysv/linux/sh/kernel-features.h
index dce9d41653..e9048a6474 100644
--- a/sysdeps/unix/sysv/linux/sh/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/sh/kernel-features.h
@@ -43,12 +43,14 @@
before the offset. */
#define __ASSUME_PRW_DUMMY_ARG 1
-/* sh only supports ipc syscall. */
-#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+/* sh only supports ipc syscall before 5.1. */
+#if __LINUX_KERNEL_VERSION < 0x050100
+# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
+#endif
#if __BYTE_ORDER == __BIG_ENDIAN
# define __ASSUME_SYSVIPC_BROKEN_MODE_T
#endif
-#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
/* Support for several syscalls was added in 4.8. */
#if __LINUX_KERNEL_VERSION < 0x040800
diff --git a/sysdeps/unix/sysv/linux/shmctl.c b/sysdeps/unix/sysv/linux/shmctl.c
index 606c8dcd6b..c4b6d06360 100644
--- a/sysdeps/unix/sysv/linux/shmctl.c
+++ b/sysdeps/unix/sysv/linux/shmctl.c
@@ -111,7 +111,11 @@ int
attribute_compat_text_section
__old_shmctl (int shmid, int cmd, struct __old_shmid_ds *buf)
{
-#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+#if defined __ASSUME_DIRECT_SYSVIPC_SYSCALLS \
+ && !defined __ASSUME_SYSVIPC_DEFAULT_IPC_64
+ /* For architecture that have wire-up shmctl but also have __IPC_64 to a
+ value different than default (0x0), it means the old syscall was done
+ using __NR_ipc. */
return INLINE_SYSCALL_CALL (shmctl, shmid, cmd, buf);
#else
return INLINE_SYSCALL_CALL (ipc, IPCOP_shmctl, shmid, cmd, 0, buf);
diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h
index 25194117f6..ea9a2a8212 100644
--- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/sparc/kernel-features.h
@@ -58,10 +58,12 @@
# undef __NR_pause
#endif
-/* sparc only supports ipc syscall. */
-#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
-#ifndef __arch64__
-# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
+/* sparc only supports ipc syscall before 5.1. */
+#if __LINUX_KERNEL_VERSION < 0x050100
+# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+# if !defined __arch64__
+# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
+# endif
#endif
/* Support for the renameat2 syscall was added in 3.16. */
--
2.17.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/3] sysvipc: Implement semop based on semtimedop
2019-10-11 19:16 [PATCH 1/3] ipc: Refactor sysvipc internal definitions Adhemerval Zanella
@ 2019-10-11 19:16 ` Adhemerval Zanella
2019-10-16 9:59 ` Florian Weimer
2019-10-11 19:16 ` [PATCH 3/3] Update sysvipc kernel-features.h files for Linux 5.1 Adhemerval Zanella
2019-10-15 11:45 ` [PATCH 1/3] ipc: Refactor sysvipc internal definitions Florian Weimer
2 siblings, 1 reply; 12+ messages in thread
From: Adhemerval Zanella @ 2019-10-11 19:16 UTC (permalink / raw)
To: libc-alpha; +Cc: Paul A . Clarke
Besides semop being a subset of semtimedop, new 32-bit architectures
on Linux are not expected to provide the syscall (only the 64-bit time
semtimedop).
Also, Linux 5.1 only wired-up semtimedop for the 64-bit architectures
that missed it (powerpc, s390, and sparc). This simplifies the code
to support it.
Checked on x86_64-linux-gnu and i686-linux-gnu.
* include/sys/sem.h: New file.
* sysdeps/unix/sysv/linux/semop.c (semop): Call internal semtimedop.
* sysdeps/unix/sysv/linux/semtimedop.c (semtimedop): Add internal
alias.
* sysvipc/semtimedop.c (semtimedop): Likewise.
---
include/sys/sem.h | 11 ++++++++++-
sysdeps/unix/sysv/linux/semop.c | 6 +-----
sysdeps/unix/sysv/linux/semtimedop.c | 6 ++++--
sysvipc/semtimedop.c | 6 ++++--
4 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/include/sys/sem.h b/include/sys/sem.h
index b0fb201bd0..bab548c3f7 100644
--- a/include/sys/sem.h
+++ b/include/sys/sem.h
@@ -1 +1,10 @@
-#include <sysvipc/sys/sem.h>
+#ifndef _SYS_SEM_H
+# include <sysvipc/sys/sem.h>
+
+# ifndef _ISOMAC
+
+__typeof__ (semtimedop) __semtimedop attribute_hidden;
+libc_hidden_proto (__semtimedop)
+
+# endif
+#endif
diff --git a/sysdeps/unix/sysv/linux/semop.c b/sysdeps/unix/sysv/linux/semop.c
index 687fdcb805..e111b9aa3d 100644
--- a/sysdeps/unix/sysv/linux/semop.c
+++ b/sysdeps/unix/sysv/linux/semop.c
@@ -26,9 +26,5 @@
int
semop (int semid, struct sembuf *sops, size_t nsops)
{
-#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
- return INLINE_SYSCALL_CALL (semop, semid, sops, nsops);
-#else
- return INLINE_SYSCALL_CALL (ipc, IPCOP_semop, semid, nsops, 0, sops);
-#endif
+ return __semtimedop (semid, sops, nsops, NULL);
}
diff --git a/sysdeps/unix/sysv/linux/semtimedop.c b/sysdeps/unix/sysv/linux/semtimedop.c
index f34a7fb920..5f1b205c2b 100644
--- a/sysdeps/unix/sysv/linux/semtimedop.c
+++ b/sysdeps/unix/sysv/linux/semtimedop.c
@@ -24,8 +24,8 @@
/* Perform user-defined atomical operation of array of semaphores. */
int
-semtimedop (int semid, struct sembuf *sops, size_t nsops,
- const struct timespec *timeout)
+__semtimedop (int semid, struct sembuf *sops, size_t nsops,
+ const struct timespec *timeout)
{
#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
return INLINE_SYSCALL_CALL (semtimedop, semid, sops, nsops, timeout);
@@ -34,3 +34,5 @@ semtimedop (int semid, struct sembuf *sops, size_t nsops,
SEMTIMEDOP_IPC_ARGS (nsops, sops, timeout));
#endif
}
+weak_alias (__semtimedop, semtimedop)
+libc_hidden_def (__semtimedop)
diff --git a/sysvipc/semtimedop.c b/sysvipc/semtimedop.c
index 5ca4d47ee3..68707d6ade 100644
--- a/sysvipc/semtimedop.c
+++ b/sysvipc/semtimedop.c
@@ -22,11 +22,13 @@
/* Perform user-defined atomical operation of array of semaphores. */
int
-semtimedop (int semid, struct sembuf *sops, size_t nsops,
- const struct timespec *timeout)
+__semtimedop (int semid, struct sembuf *sops, size_t nsops,
+ const struct timespec *timeout)
{
__set_errno (ENOSYS);
return -1;
}
+weak_alias (__semtimedop, semtimedop)
+libc_hidden_def (__semtimedop)
stub_warning (semtimedop)
--
2.17.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/3] ipc: Refactor sysvipc internal definitions
@ 2019-10-11 19:16 Adhemerval Zanella
2019-10-11 19:16 ` [PATCH 2/3] sysvipc: Implement semop based on semtimedop Adhemerval Zanella
` (2 more replies)
0 siblings, 3 replies; 12+ messages in thread
From: Adhemerval Zanella @ 2019-10-11 19:16 UTC (permalink / raw)
To: libc-alpha; +Cc: Paul A . Clarke
This patch refactor the internal sysvipc in two main points:
1. Add a new __ASSUME_SYSVIPC_DEFAULT_IPC_64 to infer the __IPC_64
value in wire-up or ipc syscall. The defaut value assumed for
__IPC_64 is also changed from 0x100 to 0x0, aligning with Linux
generic UAPI. The idea is to simplify the Linux 5.1 wire-up for
sysvipc syscalls for some 32-bit ABIs (which expectes __IPC_64
being 0x0) and simplify new ports (which would not require add
a ipc_priv.h to override the __IPC_64 value).
2. It removes some duplicated definition from sysvipc compat code
at ipc_priv.h. The idea is also to make it simpler to enable
the new wireup sysvipc on Linux v5.1.
There is no semantic change expected on any port. Checked with a build
against all affected ABIs.
* sysdeps/unix/sysv/linux/ipc_priv.h (__OLD_IPC_ID_TYPE,
__OLD_IPC_MODE_TYPE, __OLD_IPC_SEQ_TYPE): Define.
(__old_ipc_perm): Use the new defines.
* sysdeps/unix/sysv/linux/alpha/ipc_priv.h (__OLD_IPC_ID_TYPE,
__OLD_IPC_MODE_TYPE, __OLD_IPC_SEQ_TYPE): Define.
(__old_ipc_perm): Use the new defines.
* sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h (__OLD_IPC_ID_TYPE,
__OLD_IPC_MODE_TYPE, __OLD_IPC_SEQ_TYPE): Define.
(__old_ipc_perm): Use the new defines.
* sysdeps/unix/sysv/linux/powerpc/ipc_priv.h (__OLD_IPC_ID_TYPE,
__OLD_IPC_MODE_TYPE, __OLD_IPC_SEQ_TYPE): Define.
(__old_ipc_perm): Use the new defines.
* sysdeps/unix/sysv/linux/kernel-features.h
(__ASSUME_SYSVIPC_DEFAULT_IPC_64): Define.
* sysdeps/unix/sysv/linux/alpha/kernel-features.h
(__ASSUME_SYSVIPC_DEFAULT_IPC_64): Undefine.
* sysdeps/unix/sysv/linux/arm/kernel-features.h
(__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/i386/kernel-features.h
(__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/m68k/kernel-features.h
(__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/mips/kernel-features.h
(__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/microblaze/kernel-features.h
(__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/powerpc/kernel-features.h
(__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/s390/kernel-features.h
(__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/sh/kernel-features.h
(__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/sparc/kernel-features.h
[!__arch64__] (__ASSUME_SYSVIPC_DEFAULT_IPC_64): Likewise.
* sysdeps/unix/sysv/linux/nios2/kernel-features.h: New file.
* sysdeps/unix/sysv/linux/hppa/ipc_priv.h: Remove file.
* sysdeps/unix/sysv/linux/ia64/ipc_priv.h: Likewise.
* sysdeps/unix/sysv/linux/nios2/ipc_priv.h: Likewise.
* sysdeps/unix/sysv/linux/csky/ipc_priv.h: Likewise.
* sysdeps/unix/sysv/linux/riscv/ipc_priv.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h: Likewise.
* sysdeps/unix/sysv/linux/x86_64/ipc_priv.h: Likewise.
---
sysdeps/unix/sysv/linux/alpha/ipc_priv.h | 18 +++--------
.../unix/sysv/linux/alpha/kernel-features.h | 3 ++
sysdeps/unix/sysv/linux/arm/kernel-features.h | 2 ++
sysdeps/unix/sysv/linux/hppa/ipc_priv.h | 21 ------------
.../unix/sysv/linux/i386/kernel-features.h | 1 +
sysdeps/unix/sysv/linux/ia64/ipc_priv.h | 21 ------------
sysdeps/unix/sysv/linux/ipc_priv.h | 31 +++++++++++++-----
sysdeps/unix/sysv/linux/kernel-features.h | 3 ++
.../unix/sysv/linux/m68k/kernel-features.h | 1 +
.../sysv/linux/microblaze/kernel-features.h | 1 +
.../unix/sysv/linux/mips/kernel-features.h | 2 ++
.../unix/sysv/linux/mips/mips64/ipc_priv.h | 18 +++--------
sysdeps/unix/sysv/linux/nios2/ipc_priv.h | 21 ------------
.../ipc_priv.h => nios2/kernel-features.h} | 9 +++---
sysdeps/unix/sysv/linux/powerpc/ipc_priv.h | 28 +++-------------
.../unix/sysv/linux/powerpc/kernel-features.h | 1 +
sysdeps/unix/sysv/linux/riscv/ipc_priv.h | 21 ------------
.../unix/sysv/linux/s390/kernel-features.h | 1 +
sysdeps/unix/sysv/linux/sh/kernel-features.h | 1 +
.../unix/sysv/linux/sparc/kernel-features.h | 3 ++
.../unix/sysv/linux/sparc/sparc64/ipc_priv.h | 20 ++++--------
sysdeps/unix/sysv/linux/x86_64/ipc_priv.h | 32 -------------------
22 files changed, 65 insertions(+), 194 deletions(-)
delete mode 100644 sysdeps/unix/sysv/linux/hppa/ipc_priv.h
delete mode 100644 sysdeps/unix/sysv/linux/ia64/ipc_priv.h
delete mode 100644 sysdeps/unix/sysv/linux/nios2/ipc_priv.h
rename sysdeps/unix/sysv/linux/{csky/ipc_priv.h => nios2/kernel-features.h} (75%)
delete mode 100644 sysdeps/unix/sysv/linux/riscv/ipc_priv.h
delete mode 100644 sysdeps/unix/sysv/linux/x86_64/ipc_priv.h
diff --git a/sysdeps/unix/sysv/linux/alpha/ipc_priv.h b/sysdeps/unix/sysv/linux/alpha/ipc_priv.h
index 881d943063..0bf9da5694 100644
--- a/sysdeps/unix/sysv/linux/alpha/ipc_priv.h
+++ b/sysdeps/unix/sysv/linux/alpha/ipc_priv.h
@@ -16,17 +16,7 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#include <sys/ipc.h> /* For __key_t */
-
-#define __IPC_64 0x100
-
-struct __old_ipc_perm
-{
- __key_t __key; /* Key. */
- unsigned int uid; /* Owner's user ID. */
- unsigned int gid; /* Owner's group ID. */
- unsigned int cuid; /* Creator's user ID. */
- unsigned int cgid; /* Creator's group ID. */
- unsigned int mode; /* Read/write permission. */
- unsigned short int __seq; /* Sequence number. */
-};
+#define __OLD_IPC_ID_TYPE unsigned int
+#define __OLD_IPC_MODE_TYPE unsigned int
+#define __OLD_IPC_SEQ_TYPE unsigned short int
+#include <sysdeps/unix/sysv/linux/ipc_priv.h>
diff --git a/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
index 3928b4b62c..ac127adff7 100644
--- a/sysdeps/unix/sysv/linux/alpha/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
@@ -52,4 +52,7 @@
# undef __ASSUME_STATX
#endif
+/* Alpha support old sysvipc even being a 64-bit architecture. */
+#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
+
#endif /* _KERNEL_FEATURES_H */
diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h
index 6b32970e2b..d66f3a4ab7 100644
--- a/sysdeps/unix/sysv/linux/arm/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h
@@ -54,3 +54,5 @@
#if __BYTE_ORDER == __BIG_ENDIAN
# define __ASSUME_SYSVIPC_BROKEN_MODE_T
#endif
+
+#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
diff --git a/sysdeps/unix/sysv/linux/hppa/ipc_priv.h b/sysdeps/unix/sysv/linux/hppa/ipc_priv.h
deleted file mode 100644
index a52e2c7b37..0000000000
--- a/sysdeps/unix/sysv/linux/hppa/ipc_priv.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Old SysV permission definition for Linux. Hppa version.
- Copyright (C) 2017-2019 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#include <sys/ipc.h> /* For __key_t */
-
-#define __IPC_64 0x0
diff --git a/sysdeps/unix/sysv/linux/i386/kernel-features.h b/sysdeps/unix/sysv/linux/i386/kernel-features.h
index 8e982c41e6..33ba18e791 100644
--- a/sysdeps/unix/sysv/linux/i386/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/i386/kernel-features.h
@@ -45,6 +45,7 @@
/* i686 only supports ipc syscall. */
#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
#undef __ASSUME_CLONE_DEFAULT
#define __ASSUME_CLONE_BACKWARDS 1
diff --git a/sysdeps/unix/sysv/linux/ia64/ipc_priv.h b/sysdeps/unix/sysv/linux/ia64/ipc_priv.h
deleted file mode 100644
index 29451a379a..0000000000
--- a/sysdeps/unix/sysv/linux/ia64/ipc_priv.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Old SysV permission definition for Linux. IA64 version.
- Copyright (C) 2017-2019 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#include <sys/ipc.h> /* For __key_t */
-
-#define __IPC_64 0x0
diff --git a/sysdeps/unix/sysv/linux/ipc_priv.h b/sysdeps/unix/sysv/linux/ipc_priv.h
index deae555bfb..20c6873d94 100644
--- a/sysdeps/unix/sysv/linux/ipc_priv.h
+++ b/sysdeps/unix/sysv/linux/ipc_priv.h
@@ -17,18 +17,33 @@
<https://www.gnu.org/licenses/>. */
#include <sys/ipc.h> /* For __key_t */
-
-#define __IPC_64 0x100
+#include <kernel-features.h>
+
+#ifdef __ASSUME_SYSVIPC_DEFAULT_IPC_64
+# define __IPC_64 0x0
+#else
+# define __IPC_64 0x100
+#endif
+
+#ifndef __OLD_IPC_ID_TYPE
+# define __OLD_IPC_ID_TYPE unsigned short int
+#endif
+#ifndef __OLD_IPC_MODE_TYPE
+# define __OLD_IPC_MODE_TYPE unsigned short int
+#endif
+#ifndef __OLD_IPC_SEQ_TYPE
+# define __OLD_IPC_SEQ_TYPE unsigned short int
+#endif
struct __old_ipc_perm
{
__key_t __key; /* Key. */
- unsigned short int uid; /* Owner's user ID. */
- unsigned short int gid; /* Owner's group ID. */
- unsigned short int cuid; /* Creator's user ID. */
- unsigned short int cgid; /* Creator's group ID. */
- unsigned short int mode; /* Read/write permission. */
- unsigned short int __seq; /* Sequence number. */
+ __OLD_IPC_ID_TYPE uid; /* Owner's user ID. */
+ __OLD_IPC_ID_TYPE gid; /* Owner's group ID. */
+ __OLD_IPC_ID_TYPE cuid; /* Creator's user ID. */
+ __OLD_IPC_ID_TYPE cgid; /* Creator's group ID. */
+ __OLD_IPC_MODE_TYPE mode; /* Read/write permission. */
+ __OLD_IPC_SEQ_TYPE __seq; /* Sequence number. */
};
#define SEMCTL_ARG_ADDRESS(__arg) &__arg.array
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 7305686081..e6be76ff46 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -85,6 +85,9 @@
/* 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
+/* The generic default __IPC_64 value is 0x0, however some architectures
+ require a different value of 0x100. */
+#define __ASSUME_SYSVIPC_DEFAULT_IPC_64 1
/* All supported architectures reserve a 32-bit for MODE field in sysvipc
ipc_perm. However, some kernel ABI interfaces still expect a 16-bit
diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
index becc05d4dd..7ff9b5e28d 100644
--- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
@@ -53,3 +53,4 @@
/* m68k only supports ipc syscall. */
#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
#define __ASSUME_SYSVIPC_BROKEN_MODE_T
+#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
diff --git a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
index 19c77a42bd..2dd9810f93 100644
--- a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
@@ -72,3 +72,4 @@
#if __BYTE_ORDER == __BIG_ENDIAN
# define __ASSUME_SYSVIPC_BROKEN_MODE_T
#endif
+#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h
index a284417253..7123b362ee 100644
--- a/sysdeps/unix/sysv/linux/mips/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h
@@ -50,3 +50,5 @@
#undef __ASSUME_CLONE_DEFAULT
#define __ASSUME_CLONE_BACKWARDS 1
+
+#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h b/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h
index 10d5c52dd0..459ee3d2e7 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h
+++ b/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h
@@ -16,17 +16,7 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#include <sys/ipc.h>
-
-#define __IPC_64 0x100
-
-struct __old_ipc_perm
-{
- __key_t __key; /* Key. */
- int uid; /* Owner's user ID. */
- int gid; /* Owner's group ID. */
- int cuid; /* Creator's user ID. */
- int cgid; /* Creator's group ID. */
- int mode; /* Read/write permission. */
- unsigned short int __seq; /* Sequence number. */
-};
+#define __OLD_IPC_ID_TYPE int
+#define __OLD_IPC_MODE_TYPE int
+#define __OLD_IPC_SEQ_TYPE unsigned short int
+#include <sysdeps/unix/sysv/linux/ipc_priv.h>
diff --git a/sysdeps/unix/sysv/linux/nios2/ipc_priv.h b/sysdeps/unix/sysv/linux/nios2/ipc_priv.h
deleted file mode 100644
index 7e15313999..0000000000
--- a/sysdeps/unix/sysv/linux/nios2/ipc_priv.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Old SysV permission definition for Linux. Nios II version.
- Copyright (C) 2017-2019 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#include <sys/ipc.h> /* For __key_t */
-
-#define __IPC_64 0x0
diff --git a/sysdeps/unix/sysv/linux/csky/ipc_priv.h b/sysdeps/unix/sysv/linux/nios2/kernel-features.h
similarity index 75%
rename from sysdeps/unix/sysv/linux/csky/ipc_priv.h
rename to sysdeps/unix/sysv/linux/nios2/kernel-features.h
index e8e8a256ea..c95e7051d9 100644
--- a/sysdeps/unix/sysv/linux/csky/ipc_priv.h
+++ b/sysdeps/unix/sysv/linux/nios2/kernel-features.h
@@ -1,5 +1,6 @@
-/* Old SysV permission definition for Linux. C-SKY version.
- Copyright (C) 2017-2019 Free Software Foundation, Inc.
+/* Set flags signalling availability of kernel features based on given
+ kernel version number. NIOS2 version.
+ Copyright (C) 2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -16,6 +17,6 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#include <sys/ipc.h> /* For __key_t */
+#include_next <kernel-features.h>
-#define __IPC_64 0x0
+#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
diff --git a/sysdeps/unix/sysv/linux/powerpc/ipc_priv.h b/sysdeps/unix/sysv/linux/powerpc/ipc_priv.h
index 96372bc9ad..a8ebf23cd2 100644
--- a/sysdeps/unix/sysv/linux/powerpc/ipc_priv.h
+++ b/sysdeps/unix/sysv/linux/powerpc/ipc_priv.h
@@ -16,27 +16,7 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#include <sys/ipc.h> /* For __key_t */
-
-#define __IPC_64 0x100
-
-struct __old_ipc_perm
-{
- __key_t __key; /* Key. */
- unsigned int uid; /* Owner's user ID. */
- unsigned int gid; /* Owner's group ID. */
- unsigned int cuid; /* Creator's user ID. */
- unsigned int cgid; /* Creator's group ID. */
- unsigned int mode; /* Read/write permission. */
- unsigned short int __seq; /* Sequence number. */
-};
-
-#define SEMCTL_ARG_ADDRESS(__arg) &__arg.array
-
-#define MSGRCV_ARGS(__msgp, __msgtyp) \
- ((long int []){ (long int) __msgp, __msgtyp })
-
-#define SEMTIMEDOP_IPC_ARGS(__nsops, __sops, __timeout) \
- (__nsops), 0, (__sops), (__timeout)
-
-#include <ipc_ops.h>
+#define __OLD_IPC_ID_TYPE unsigned int
+#define __OLD_IPC_MODE_TYPE unsigned int
+#define __OLD_IPC_SEQ_TYPE unsigned short int
+#include <sysdeps/unix/sysv/linux/ipc_priv.h>
diff --git a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
index d177a91ab3..b93f7f8f13 100644
--- a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
@@ -46,6 +46,7 @@
/* powerpc only supports ipc syscall. */
#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
#undef __ASSUME_CLONE_DEFAULT
#define __ASSUME_CLONE_BACKWARDS 1
diff --git a/sysdeps/unix/sysv/linux/riscv/ipc_priv.h b/sysdeps/unix/sysv/linux/riscv/ipc_priv.h
deleted file mode 100644
index dd755a9f2c..0000000000
--- a/sysdeps/unix/sysv/linux/riscv/ipc_priv.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Old SysV permission definition for Linux. RISC-V version.
- Copyright (C) 2018-2019 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#include <sys/ipc.h> /* For __key_t */
-
-#define __IPC_64 0x0
diff --git a/sysdeps/unix/sysv/linux/s390/kernel-features.h b/sysdeps/unix/sysv/linux/s390/kernel-features.h
index 6dca32c6c7..f1f8dad305 100644
--- a/sysdeps/unix/sysv/linux/s390/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/s390/kernel-features.h
@@ -50,6 +50,7 @@
#ifndef __s390x__
# define __ASSUME_SYSVIPC_BROKEN_MODE_T
#endif
+#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
#undef __ASSUME_CLONE_DEFAULT
#define __ASSUME_CLONE_BACKWARDS2
diff --git a/sysdeps/unix/sysv/linux/sh/kernel-features.h b/sysdeps/unix/sysv/linux/sh/kernel-features.h
index fae54c8df5..dce9d41653 100644
--- a/sysdeps/unix/sysv/linux/sh/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/sh/kernel-features.h
@@ -48,6 +48,7 @@
#if __BYTE_ORDER == __BIG_ENDIAN
# define __ASSUME_SYSVIPC_BROKEN_MODE_T
#endif
+#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
/* Support for several syscalls was added in 4.8. */
#if __LINUX_KERNEL_VERSION < 0x040800
diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h
index c523461d95..25194117f6 100644
--- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/sparc/kernel-features.h
@@ -60,6 +60,9 @@
/* sparc only supports ipc syscall. */
#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+#ifndef __arch64__
+# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
+#endif
/* Support for the renameat2 syscall was added in 3.16. */
#if __LINUX_KERNEL_VERSION < 0x031000
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h b/sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h
index 00f8510056..414755f15a 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h
@@ -16,26 +16,18 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#include <sys/ipc.h> /* For __key_t */
-
-#define __IPC_64 0x0
-
-struct __old_ipc_perm
-{
- __key_t __key; /* Key. */
- unsigned int uid; /* Owner's user ID. */
- unsigned int gid; /* Owner's group ID. */
- unsigned int cuid; /* Creator's user ID. */
- unsigned int cgid; /* Creator's group ID. */
- unsigned int mode; /* Read/write permission. */
- unsigned short int __seq; /* Sequence number. */
-};
+#define __OLD_IPC_ID_TYPE unsigned int
+#define __OLD_IPC_MODE_TYPE unsigned int
+#define __OLD_IPC_SEQ_TYPE unsigned short int
+#include <sysdeps/unix/sysv/linux/ipc_priv.h>
/* SPARC semctl multiplex syscall expects the union pointed address, not
the union address itself. */
+#undef SEMCTL_ARG_ADDRESS
#define SEMCTL_ARG_ADDRESS(__arg) __arg.array
/* Also for msgrcv it does not use the kludge on final 2 arguments. */
+#undef MSGRCV_ARGS
#define MSGRCV_ARGS(__msgp, __msgtyp) __msgp, __msgtyp
#define SEMTIMEDOP_IPC_ARGS(__nsops, __sops, __timeout) \
diff --git a/sysdeps/unix/sysv/linux/x86_64/ipc_priv.h b/sysdeps/unix/sysv/linux/x86_64/ipc_priv.h
deleted file mode 100644
index e89c9b56c5..0000000000
--- a/sysdeps/unix/sysv/linux/x86_64/ipc_priv.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Old SysV permission definition for Linux. x86_64 version.
- Copyright (C) 2016-2019 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#include <sys/ipc.h> /* For __key_t */
-
-#define __IPC_64 0x0
-
-struct __old_ipc_perm
-{
- __key_t __key; /* Key. */
- unsigned short uid; /* Owner's user ID. */
- unsigned short gid; /* Owner's group ID. */
- unsigned short cuid; /* Creator's user ID. */
- unsigned short cgid; /* Creator's group ID. */
- unsigned short mode; /* Read/write permission. */
- unsigned short int __seq; /* Sequence number. */
-};
--
2.17.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] ipc: Refactor sysvipc internal definitions
2019-10-11 19:16 [PATCH 1/3] ipc: Refactor sysvipc internal definitions Adhemerval Zanella
2019-10-11 19:16 ` [PATCH 2/3] sysvipc: Implement semop based on semtimedop Adhemerval Zanella
2019-10-11 19:16 ` [PATCH 3/3] Update sysvipc kernel-features.h files for Linux 5.1 Adhemerval Zanella
@ 2019-10-15 11:45 ` Florian Weimer
2019-10-15 20:10 ` Adhemerval Zanella
2 siblings, 1 reply; 12+ messages in thread
From: Florian Weimer @ 2019-10-15 11:45 UTC (permalink / raw)
To: Adhemerval Zanella; +Cc: libc-alpha, Paul A . Clarke
* Adhemerval Zanella:
> This patch refactor the internal sysvipc in two main points:
>
> 1. Add a new __ASSUME_SYSVIPC_DEFAULT_IPC_64 to infer the __IPC_64
> value in wire-up or ipc syscall. The defaut value assumed for
Sorry, would you please re-phrase? I don't understand the wire-up
terminology in this context.
> __IPC_64 is also changed from 0x100 to 0x0, aligning with Linux
> generic UAPI. The idea is to simplify the Linux 5.1 wire-up for
> sysvipc syscalls for some 32-bit ABIs (which expectes __IPC_64
> being 0x0) and simplify new ports (which would not require add
> a ipc_priv.h to override the __IPC_64 value).
Replace “would not required add a ipc_priv.h” with “will no longer need
to add ipc_priv.h”?
> 2. It removes some duplicated definition from sysvipc compat code
> at ipc_priv.h. The idea is also to make it simpler to enable
> the new wireup sysvipc on Linux v5.1.
Again, I don't understand this terminology.
> diff --git a/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
> index 3928b4b62c..ac127adff7 100644
> --- a/sysdeps/unix/sysv/linux/alpha/kernel-features.h
> +++ b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
> @@ -52,4 +52,7 @@
> # undef __ASSUME_STATX
> #endif
>
> +/* Alpha support old sysvipc even being a 64-bit architecture. */
> +#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
s/support/requires/?
> diff --git a/sysdeps/unix/sysv/linux/alpha/ipc_priv.h b/sysdeps/unix/sysv/linux/alpha/ipc_priv.h
> index 881d943063..0bf9da5694 100644
> --- a/sysdeps/unix/sysv/linux/alpha/ipc_priv.h
> +++ b/sysdeps/unix/sysv/linux/alpha/ipc_priv.h
> +#define __OLD_IPC_SEQ_TYPE unsigned short int
> +#include <sysdeps/unix/sysv/linux/ipc_priv.h>
Isn't that the __OLD_IPC_SEQ_TYPE default? (This applies to other
architectures as well.
In fact, __OLD_IPC_SEQ_TYPE appears to be unsighed short int always, so
I think it shouldn't be parameterized.
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h b/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h
> index 10d5c52dd0..459ee3d2e7 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h
> +#define __OLD_IPC_SEQ_TYPE unsigned short int
> +#include <sysdeps/unix/sysv/linux/ipc_priv.h>
See above.
Rest looks okay to me.
Thanks,
Florian
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] Update sysvipc kernel-features.h files for Linux 5.1
2019-10-11 19:16 ` [PATCH 3/3] Update sysvipc kernel-features.h files for Linux 5.1 Adhemerval Zanella
@ 2019-10-15 19:10 ` Paul Clarke
2019-10-18 13:34 ` Adhemerval Zanella
0 siblings, 1 reply; 12+ messages in thread
From: Paul Clarke @ 2019-10-15 19:10 UTC (permalink / raw)
To: Adhemerval Zanella, libc-alpha
On 10/11/19 2:15 PM, Adhemerval Zanella wrote:
> Linux 5.1 adds missing SySV IPC syscalls to the syscall table for
> remanining one that still uses the ipc syscall on glibc (m68k, mips-o32,
> powerpc, s390, sh, and sparc32). However the newly added direct ipc
> syscall are different than the old ones:
>
> 1. They do not expect IPC_64, meaning __IPC_64 should be set to zero
> when new syscalls are used. And new syscalls can not be used
> for compat functions like __old_semctl (to emulated old sysvipc it
> requires to use the old __NR_ipc syscall without __IPC_64).
> Thus IPC_64 is redefined for newer kernels on affected ABIs.
>
> 2. semtimedop and semop does not exist on 32-bit ABIs (only
> semtimedop_time64 is supplied). The provided syscall wrappers only
> uses the wire-up syscall if __NR_semtimedop and __NR_semop are
> also defined.
>
> Checked on x86_64-linux-gnu and i686-linux-gnu on both a 4.15 kernel
> configure with default options and sysvipc tests on a 5.1.2 kernel with
> --enable-kernel=5.1.
>
> I also checked the sysvipc tests on alpha, hppa, mips (32, 64, and n32),
> powerpc (32, 64, 64le), sparc (32, 64), and s390 (32, 64).
Thanks for putting this patchset together, Adhemerval!
I tested a bare minimum to see if the goal for my original patches had been met, and indeed it has. A no-op (error case) msgctl() is about 7% faster. I added a similar test for semop, too, since that's a special case, and that's about 10% faster.
I don't know if my trivial testing qualifies for a "Tested-by", but you are welcome to use this as such if you wish:
Tested-by: Paul A. Clarke <pc@us.ibm.com>
PC
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] ipc: Refactor sysvipc internal definitions
2019-10-15 11:45 ` [PATCH 1/3] ipc: Refactor sysvipc internal definitions Florian Weimer
@ 2019-10-15 20:10 ` Adhemerval Zanella
0 siblings, 0 replies; 12+ messages in thread
From: Adhemerval Zanella @ 2019-10-15 20:10 UTC (permalink / raw)
To: Florian Weimer; +Cc: libc-alpha, Paul A . Clarke
On 15/10/2019 08:45, Florian Weimer wrote:
> * Adhemerval Zanella:
>
>> This patch refactor the internal sysvipc in two main points:
>>
>> 1. Add a new __ASSUME_SYSVIPC_DEFAULT_IPC_64 to infer the __IPC_64
>> value in wire-up or ipc syscall. The defaut value assumed for
>
> Sorry, would you please re-phrase? I don't understand the wire-up
> terminology in this context.
The 'wire-up' here means the syscall is done by its own entrypoint defined
by a __NR_ number instead of a multiplexed one, in this case the __NR_ipc.
Maybe the following is more clear:
1. Add a new __ASSUME_SYSVIPC_DEFAULT_IPC_64 to infer the __IPC_64
value to be used along either the multiplexed __NR_ipc or wired-up
syscall.
>
>> __IPC_64 is also changed from 0x100 to 0x0, aligning with Linux
>> generic UAPI. The idea is to simplify the Linux 5.1 wire-up for
>> sysvipc syscalls for some 32-bit ABIs (which expectes __IPC_64
>> being 0x0) and simplify new ports (which would not require add
>> a ipc_priv.h to override the __IPC_64 value).
>
> Replace âwould not required add a ipc_priv.hâ with âwill no longer need
> to add ipc_priv.hâ?
Ack.
>
>
>> 2. It removes some duplicated definition from sysvipc compat code
>> at ipc_priv.h. The idea is also to make it simpler to enable
>> the new wireup sysvipc on Linux v5.1.
>
> Again, I don't understand this terminology.
This idea is to consolidate the __old_ipc_perm and other arch-specific
definitions that are duplicated over the architectures. Maybe:
2. It also removed some duplicated internal definition used on compat
sysvipc symbols defined at ipc_priv.h (more specifically the
__old_ipc_perm, SEMCTL_ARG_ADDRESS, MSGRCV_ARGS, and SEMTIMEDOP_IPC_ARGS).
The idea is also to make it simpler to enable the new wire-up sysvipc
syscall provided by Linux v5.1.
>
>> diff --git a/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
>> index 3928b4b62c..ac127adff7 100644
>> --- a/sysdeps/unix/sysv/linux/alpha/kernel-features.h
>> +++ b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
>> @@ -52,4 +52,7 @@
>> # undef __ASSUME_STATX
>> #endif
>>
>> +/* Alpha support old sysvipc even being a 64-bit architecture. */
>> +#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
>
> s/support/requires/?
Ack.
>
>> diff --git a/sysdeps/unix/sysv/linux/alpha/ipc_priv.h b/sysdeps/unix/sysv/linux/alpha/ipc_priv.h
>> index 881d943063..0bf9da5694 100644
>> --- a/sysdeps/unix/sysv/linux/alpha/ipc_priv.h
>> +++ b/sysdeps/unix/sysv/linux/alpha/ipc_priv.h
>
>> +#define __OLD_IPC_SEQ_TYPE unsigned short int
>> +#include <sysdeps/unix/sysv/linux/ipc_priv.h>
>
> Isn't that the __OLD_IPC_SEQ_TYPE default? (This applies to other
> architectures as well.
>
> In fact, __OLD_IPC_SEQ_TYPE appears to be unsighed short int always, so
> I think it shouldn't be parameterized.
Indeed, I will remove.
>
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h b/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h
>> index 10d5c52dd0..459ee3d2e7 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h
>> +++ b/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h
>
>> +#define __OLD_IPC_SEQ_TYPE unsigned short int
>> +#include <sysdeps/unix/sysv/linux/ipc_priv.h>
>
> See above.
Ack.
>
> Rest looks okay to me.
>
> Thanks,
> Florian
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] sysvipc: Implement semop based on semtimedop
2019-10-11 19:16 ` [PATCH 2/3] sysvipc: Implement semop based on semtimedop Adhemerval Zanella
@ 2019-10-16 9:59 ` Florian Weimer
2019-10-17 19:31 ` Joseph Myers
0 siblings, 1 reply; 12+ messages in thread
From: Florian Weimer @ 2019-10-16 9:59 UTC (permalink / raw)
To: Adhemerval Zanella; +Cc: libc-alpha, Paul A . Clarke
* Adhemerval Zanella:
> diff --git a/include/sys/sem.h b/include/sys/sem.h
> index b0fb201bd0..bab548c3f7 100644
> --- a/include/sys/sem.h
> +++ b/include/sys/sem.h
> @@ -1 +1,10 @@
> -#include <sysvipc/sys/sem.h>
> +#ifndef _SYS_SEM_H
> +# include <sysvipc/sys/sem.h>
> +
> +# ifndef _ISOMAC
> +
> +__typeof__ (semtimedop) __semtimedop attribute_hidden;
> +libc_hidden_proto (__semtimedop)
You don't need libc_hidden_proto if you use attribute_hidden. (You also
need to drop libc_hidden_def if you don't use libc_hidden_proto.)
Rest looks fine.
Thanks,
Florian
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] sysvipc: Implement semop based on semtimedop
2019-10-16 9:59 ` Florian Weimer
@ 2019-10-17 19:31 ` Joseph Myers
2019-10-17 19:37 ` Florian Weimer
0 siblings, 1 reply; 12+ messages in thread
From: Joseph Myers @ 2019-10-17 19:31 UTC (permalink / raw)
To: Florian Weimer; +Cc: Adhemerval Zanella, libc-alpha, Paul A . Clarke
I'm seeing a build failure for i686-gnu I suspect is caused by this
change.
In file included from <command-line>:
./../include/libc-symbols.h:545:33: error: '__EI___semtimedop' aliased to undefined symbol '__GI___semtimedop'
extern thread __typeof (name) __EI_##name \
^~~~~
./../include/libc-symbols.h:541:3: note: in expansion of macro '__hidden_ver2'
__hidden_ver2 (, local, internal, name)
^~~~~~~~~~~~~
./../include/libc-symbols.h:550:29: note: in expansion of macro '__hidden_ver1'
# define hidden_def(name) __hidden_ver1(__GI_##name, name, name);
^~~~~~~~~~~~~
./../include/libc-symbols.h:619:32: note: in expansion of macro 'hidden_def'
# define libc_hidden_def(name) hidden_def (name)
^~~~~~~~~~
semtimedop.c:32:1: note: in expansion of macro 'libc_hidden_def'
libc_hidden_def (__semtimedop)
^~~~~~~~~~~~~~~
https://sourceware.org/ml/libc-testresults/2019-q4/msg00085.html
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] sysvipc: Implement semop based on semtimedop
2019-10-17 19:31 ` Joseph Myers
@ 2019-10-17 19:37 ` Florian Weimer
2019-10-17 19:41 ` Joseph Myers
2019-10-17 19:49 ` Adhemerval Zanella
0 siblings, 2 replies; 12+ messages in thread
From: Florian Weimer @ 2019-10-17 19:37 UTC (permalink / raw)
To: Joseph Myers; +Cc: Adhemerval Zanella, libc-alpha, Paul A . Clarke
* Joseph Myers:
> I'm seeing a build failure for i686-gnu I suspect is caused by this
> change.
>
> In file included from <command-line>:
> ./../include/libc-symbols.h:545:33: error: '__EI___semtimedop' aliased to undefined symbol '__GI___semtimedop'
> extern thread __typeof (name) __EI_##name \
> ^~~~~
> ./../include/libc-symbols.h:541:3: note: in expansion of macro '__hidden_ver2'
> __hidden_ver2 (, local, internal, name)
> ^~~~~~~~~~~~~
> ./../include/libc-symbols.h:550:29: note: in expansion of macro '__hidden_ver1'
> # define hidden_def(name) __hidden_ver1(__GI_##name, name, name);
> ^~~~~~~~~~~~~
> ./../include/libc-symbols.h:619:32: note: in expansion of macro 'hidden_def'
> # define libc_hidden_def(name) hidden_def (name)
> ^~~~~~~~~~
> semtimedop.c:32:1: note: in expansion of macro 'libc_hidden_def'
> libc_hidden_def (__semtimedop)
> ^~~~~~~~~~~~~~~
>
> https://sourceware.org/ml/libc-testresults/2019-q4/msg00085.html
This should fix it.
Thanks,
Florian
8<------------------------------------------------------------------8<
Subject: Remove libc_hidden_def from __semtimedop stub
This breaks the Hurd build after commit 765cdd0bffd77960ae852104f
("sysvipc: Implement semop based on semtimedop") added it to the stub.
-----
sysvipc/semtimedop.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/sysvipc/semtimedop.c b/sysvipc/semtimedop.c
index 68707d6ade..a4b750c813 100644
--- a/sysvipc/semtimedop.c
+++ b/sysvipc/semtimedop.c
@@ -29,6 +29,5 @@ __semtimedop (int semid, struct sembuf *sops, size_t nsops,
return -1;
}
weak_alias (__semtimedop, semtimedop)
-libc_hidden_def (__semtimedop)
stub_warning (semtimedop)
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] sysvipc: Implement semop based on semtimedop
2019-10-17 19:37 ` Florian Weimer
@ 2019-10-17 19:41 ` Joseph Myers
2019-10-17 19:49 ` Adhemerval Zanella
1 sibling, 0 replies; 12+ messages in thread
From: Joseph Myers @ 2019-10-17 19:41 UTC (permalink / raw)
To: Florian Weimer; +Cc: Adhemerval Zanella, libc-alpha, Paul A . Clarke
On Thu, 17 Oct 2019, Florian Weimer wrote:
> This should fix it.
>
> Thanks,
> Florian
>
> 8<------------------------------------------------------------------8<
> Subject: Remove libc_hidden_def from __semtimedop stub
>
> This breaks the Hurd build after commit 765cdd0bffd77960ae852104f
> ("sysvipc: Implement semop based on semtimedop") added it to the stub.
Thanks, please commit.
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] sysvipc: Implement semop based on semtimedop
2019-10-17 19:37 ` Florian Weimer
2019-10-17 19:41 ` Joseph Myers
@ 2019-10-17 19:49 ` Adhemerval Zanella
1 sibling, 0 replies; 12+ messages in thread
From: Adhemerval Zanella @ 2019-10-17 19:49 UTC (permalink / raw)
To: Florian Weimer, Joseph Myers; +Cc: libc-alpha, Paul A . Clarke
On 17/10/2019 16:37, Florian Weimer wrote:
> * Joseph Myers:
>
>> I'm seeing a build failure for i686-gnu I suspect is caused by this
>> change.
>>
>> In file included from <command-line>:
>> ./../include/libc-symbols.h:545:33: error: '__EI___semtimedop' aliased to undefined symbol '__GI___semtimedop'
>> extern thread __typeof (name) __EI_##name \
>> ^~~~~
>> ./../include/libc-symbols.h:541:3: note: in expansion of macro '__hidden_ver2'
>> __hidden_ver2 (, local, internal, name)
>> ^~~~~~~~~~~~~
>> ./../include/libc-symbols.h:550:29: note: in expansion of macro '__hidden_ver1'
>> # define hidden_def(name) __hidden_ver1(__GI_##name, name, name);
>> ^~~~~~~~~~~~~
>> ./../include/libc-symbols.h:619:32: note: in expansion of macro 'hidden_def'
>> # define libc_hidden_def(name) hidden_def (name)
>> ^~~~~~~~~~
>> semtimedop.c:32:1: note: in expansion of macro 'libc_hidden_def'
>> libc_hidden_def (__semtimedop)
>> ^~~~~~~~~~~~~~~
>>
>> https://sourceware.org/ml/libc-testresults/2019-q4/msg00085.html
>
> This should fix it.
>
> Thanks,
> Florian
>
> 8<------------------------------------------------------------------8<
> Subject: Remove libc_hidden_def from __semtimedop stub
>
> This breaks the Hurd build after commit 765cdd0bffd77960ae852104f
> ("sysvipc: Implement semop based on semtimedop") added it to the stub.
>
> -----
> sysvipc/semtimedop.c | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/sysvipc/semtimedop.c b/sysvipc/semtimedop.c
> index 68707d6ade..a4b750c813 100644
> --- a/sysvipc/semtimedop.c
> +++ b/sysvipc/semtimedop.c
> @@ -29,6 +29,5 @@ __semtimedop (int semid, struct sembuf *sops, size_t nsops,
> return -1;
> }
> weak_alias (__semtimedop, semtimedop)
> -libc_hidden_def (__semtimedop)
>
> stub_warning (semtimedop)
>
Ugh, I though I removed it from last iteration, thanks for catching it.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] Update sysvipc kernel-features.h files for Linux 5.1
2019-10-15 19:10 ` Paul Clarke
@ 2019-10-18 13:34 ` Adhemerval Zanella
0 siblings, 0 replies; 12+ messages in thread
From: Adhemerval Zanella @ 2019-10-18 13:34 UTC (permalink / raw)
To: Paul Clarke, libc-alpha
On 15/10/2019 16:10, Paul Clarke wrote:
> On 10/11/19 2:15 PM, Adhemerval Zanella wrote:
>> Linux 5.1 adds missing SySV IPC syscalls to the syscall table for
>> remanining one that still uses the ipc syscall on glibc (m68k, mips-o32,
>> powerpc, s390, sh, and sparc32). However the newly added direct ipc
>> syscall are different than the old ones:
>>
>> 1. They do not expect IPC_64, meaning __IPC_64 should be set to zero
>> when new syscalls are used. And new syscalls can not be used
>> for compat functions like __old_semctl (to emulated old sysvipc it
>> requires to use the old __NR_ipc syscall without __IPC_64).
>> Thus IPC_64 is redefined for newer kernels on affected ABIs.
>>
>> 2. semtimedop and semop does not exist on 32-bit ABIs (only
>> semtimedop_time64 is supplied). The provided syscall wrappers only
>> uses the wire-up syscall if __NR_semtimedop and __NR_semop are
>> also defined.
>>
>> Checked on x86_64-linux-gnu and i686-linux-gnu on both a 4.15 kernel
>> configure with default options and sysvipc tests on a 5.1.2 kernel with
>> --enable-kernel=5.1.
>>
>> I also checked the sysvipc tests on alpha, hppa, mips (32, 64, and n32),
>> powerpc (32, 64, 64le), sparc (32, 64), and s390 (32, 64).
>
> Thanks for putting this patchset together, Adhemerval!
>
> I tested a bare minimum to see if the goal for my original patches had been met, and indeed it has. A no-op (error case) msgctl() is about 7% faster. I added a similar test for semop, too, since that's a special case, and that's about 10% faster.
>
> I don't know if my trivial testing qualifies for a "Tested-by", but you are welcome to use this as such if you wish:
> Tested-by: Paul A. Clarke <pc@us.ibm.com>
>
> PC
>
Thanks for checking on powerpc, I also rechecked on i686-linux
as well. I will commit this shortly.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2019-10-18 13:34 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-11 19:16 [PATCH 1/3] ipc: Refactor sysvipc internal definitions Adhemerval Zanella
2019-10-11 19:16 ` [PATCH 2/3] sysvipc: Implement semop based on semtimedop Adhemerval Zanella
2019-10-16 9:59 ` Florian Weimer
2019-10-17 19:31 ` Joseph Myers
2019-10-17 19:37 ` Florian Weimer
2019-10-17 19:41 ` Joseph Myers
2019-10-17 19:49 ` Adhemerval Zanella
2019-10-11 19:16 ` [PATCH 3/3] Update sysvipc kernel-features.h files for Linux 5.1 Adhemerval Zanella
2019-10-15 19:10 ` Paul Clarke
2019-10-18 13:34 ` Adhemerval Zanella
2019-10-15 11:45 ` [PATCH 1/3] ipc: Refactor sysvipc internal definitions Florian Weimer
2019-10-15 20:10 ` Adhemerval Zanella
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 read-only IMAP folder(s) and NNTP newsgroup(s).