mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
Update sysvipc kernel-features.h files for Linux 5.1
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.3.0 kernel with --enable-kernel=5.1. Tested-by: Paul A. Clarke <pc@us.ibm.com>
This commit is contained in:
@ -43,9 +43,11 @@
|
|||||||
# undef __ASSUME_SENDTO_SYSCALL
|
# undef __ASSUME_SENDTO_SYSCALL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* i686 only supports ipc syscall. */
|
/* i686 only supports ipc syscall before 5.1. */
|
||||||
#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
#if __LINUX_KERNEL_VERSION < 0x050100
|
||||||
#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
||||||
|
# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
||||||
|
#endif
|
||||||
|
|
||||||
#undef __ASSUME_CLONE_DEFAULT
|
#undef __ASSUME_CLONE_DEFAULT
|
||||||
#define __ASSUME_CLONE_BACKWARDS 1
|
#define __ASSUME_CLONE_BACKWARDS 1
|
||||||
|
@ -50,7 +50,9 @@
|
|||||||
# undef __ASSUME_SET_ROBUST_LIST
|
# undef __ASSUME_SET_ROBUST_LIST
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* m68k only supports ipc syscall. */
|
/* m68k only supports ipc syscall before 5.1. */
|
||||||
#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
#if __LINUX_KERNEL_VERSION < 0x050100
|
||||||
|
# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
||||||
|
# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
||||||
|
#endif
|
||||||
#define __ASSUME_SYSVIPC_BROKEN_MODE_T
|
#define __ASSUME_SYSVIPC_BROKEN_MODE_T
|
||||||
#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
|
||||||
|
@ -31,8 +31,12 @@
|
|||||||
pairs to start with an even-number register. */
|
pairs to start with an even-number register. */
|
||||||
#if _MIPS_SIM == _ABIO32
|
#if _MIPS_SIM == _ABIO32
|
||||||
# define __ASSUME_ALIGNED_REGISTER_PAIRS 1
|
# define __ASSUME_ALIGNED_REGISTER_PAIRS 1
|
||||||
/* mips32 only supports ipc syscall. */
|
/* mips32 only supports ipc syscall before 5.1. */
|
||||||
# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
# 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. */
|
/* The o32 MIPS fadvise64 syscall behaves as fadvise64_64. */
|
||||||
# define __ASSUME_FADVISE64_AS_64_64 1
|
# define __ASSUME_FADVISE64_AS_64_64 1
|
||||||
@ -40,6 +44,8 @@
|
|||||||
/* mips32 support wire-up network syscalls. */
|
/* mips32 support wire-up network syscalls. */
|
||||||
# define __ASSUME_RECV_SYSCALL 1
|
# define __ASSUME_RECV_SYSCALL 1
|
||||||
# define __ASSUME_SEND_SYSCALL 1
|
# define __ASSUME_SEND_SYSCALL 1
|
||||||
|
#else
|
||||||
|
# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Define that mips64-n32 is a ILP32 ABI to set the correct interface to
|
/* Define that mips64-n32 is a ILP32 ABI to set the correct interface to
|
||||||
@ -50,5 +56,3 @@
|
|||||||
|
|
||||||
#undef __ASSUME_CLONE_DEFAULT
|
#undef __ASSUME_CLONE_DEFAULT
|
||||||
#define __ASSUME_CLONE_BACKWARDS 1
|
#define __ASSUME_CLONE_BACKWARDS 1
|
||||||
|
|
||||||
#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
|
||||||
|
@ -111,7 +111,11 @@ int
|
|||||||
attribute_compat_text_section
|
attribute_compat_text_section
|
||||||
__old_msgctl (int msqid, int cmd, struct __old_msqid_ds *buf)
|
__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 compat symbol used the
|
||||||
|
__NR_ipc syscall. */
|
||||||
return INLINE_SYSCALL_CALL (msgctl, msqid, cmd, buf);
|
return INLINE_SYSCALL_CALL (msgctl, msqid, cmd, buf);
|
||||||
#else
|
#else
|
||||||
return INLINE_SYSCALL_CALL (ipc, IPCOP_msgctl, msqid, cmd, 0, buf);
|
return INLINE_SYSCALL_CALL (ipc, IPCOP_msgctl, msqid, cmd, 0, buf);
|
||||||
|
@ -44,9 +44,11 @@
|
|||||||
|
|
||||||
#include_next <kernel-features.h>
|
#include_next <kernel-features.h>
|
||||||
|
|
||||||
/* powerpc only supports ipc syscall. */
|
/* powerpc only supports ipc syscall before 5.1. */
|
||||||
#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
#if __LINUX_KERNEL_VERSION < 0x050100
|
||||||
#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
||||||
|
# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
||||||
|
#endif
|
||||||
|
|
||||||
#undef __ASSUME_CLONE_DEFAULT
|
#undef __ASSUME_CLONE_DEFAULT
|
||||||
#define __ASSUME_CLONE_BACKWARDS 1
|
#define __ASSUME_CLONE_BACKWARDS 1
|
||||||
|
@ -45,12 +45,14 @@
|
|||||||
# undef __ASSUME_SENDTO_SYSCALL
|
# undef __ASSUME_SENDTO_SYSCALL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* s390 only supports ipc syscall. */
|
/* s390 only supports ipc syscall before 5.1. */
|
||||||
#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
#if __LINUX_KERNEL_VERSION < 0x050100
|
||||||
|
# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
||||||
|
# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
||||||
|
#endif
|
||||||
#ifndef __s390x__
|
#ifndef __s390x__
|
||||||
# define __ASSUME_SYSVIPC_BROKEN_MODE_T
|
# define __ASSUME_SYSVIPC_BROKEN_MODE_T
|
||||||
#endif
|
#endif
|
||||||
#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
|
||||||
|
|
||||||
#undef __ASSUME_CLONE_DEFAULT
|
#undef __ASSUME_CLONE_DEFAULT
|
||||||
#define __ASSUME_CLONE_BACKWARDS2
|
#define __ASSUME_CLONE_BACKWARDS2
|
||||||
|
@ -168,7 +168,11 @@ __old_semctl (int semid, int semnum, int cmd, ...)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
# ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
#if defined __ASSUME_DIRECT_SYSVIPC_SYSCALLS \
|
||||||
|
&& !defined __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
||||||
|
/* For architectures that have wire-up semctl but also have __IPC_64 to a
|
||||||
|
value different than default (0x0) it means the compat symbol used the
|
||||||
|
__NR_ipc syscall. */
|
||||||
return INLINE_SYSCALL_CALL (semctl, semid, semnum, cmd, arg.array);
|
return INLINE_SYSCALL_CALL (semctl, semid, semnum, cmd, arg.array);
|
||||||
# else
|
# else
|
||||||
return INLINE_SYSCALL_CALL (ipc, IPCOP_semctl, semid, semnum, cmd,
|
return INLINE_SYSCALL_CALL (ipc, IPCOP_semctl, semid, semnum, cmd,
|
||||||
|
@ -27,7 +27,9 @@ int
|
|||||||
__semtimedop (int semid, struct sembuf *sops, size_t nsops,
|
__semtimedop (int semid, struct sembuf *sops, size_t nsops,
|
||||||
const struct timespec *timeout)
|
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);
|
return INLINE_SYSCALL_CALL (semtimedop, semid, sops, nsops, timeout);
|
||||||
#else
|
#else
|
||||||
return INLINE_SYSCALL_CALL (ipc, IPCOP_semtimedop, semid,
|
return INLINE_SYSCALL_CALL (ipc, IPCOP_semtimedop, semid,
|
||||||
|
@ -43,12 +43,14 @@
|
|||||||
before the offset. */
|
before the offset. */
|
||||||
#define __ASSUME_PRW_DUMMY_ARG 1
|
#define __ASSUME_PRW_DUMMY_ARG 1
|
||||||
|
|
||||||
/* sh only supports ipc syscall. */
|
/* sh only supports ipc syscall before 5.1. */
|
||||||
#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
#if __LINUX_KERNEL_VERSION < 0x050100
|
||||||
|
# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
||||||
|
# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
||||||
|
#endif
|
||||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
# define __ASSUME_SYSVIPC_BROKEN_MODE_T
|
# define __ASSUME_SYSVIPC_BROKEN_MODE_T
|
||||||
#endif
|
#endif
|
||||||
#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
|
||||||
|
|
||||||
/* Support for several syscalls was added in 4.8. */
|
/* Support for several syscalls was added in 4.8. */
|
||||||
#if __LINUX_KERNEL_VERSION < 0x040800
|
#if __LINUX_KERNEL_VERSION < 0x040800
|
||||||
|
@ -111,7 +111,11 @@ int
|
|||||||
attribute_compat_text_section
|
attribute_compat_text_section
|
||||||
__old_shmctl (int shmid, int cmd, struct __old_shmid_ds *buf)
|
__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 compat symbol used the
|
||||||
|
__NR_ipc syscall. */
|
||||||
return INLINE_SYSCALL_CALL (shmctl, shmid, cmd, buf);
|
return INLINE_SYSCALL_CALL (shmctl, shmid, cmd, buf);
|
||||||
#else
|
#else
|
||||||
return INLINE_SYSCALL_CALL (ipc, IPCOP_shmctl, shmid, cmd, 0, buf);
|
return INLINE_SYSCALL_CALL (ipc, IPCOP_shmctl, shmid, cmd, 0, buf);
|
||||||
|
@ -58,10 +58,12 @@
|
|||||||
# undef __NR_pause
|
# undef __NR_pause
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* sparc only supports ipc syscall. */
|
/* sparc only supports ipc syscall before 5.1. */
|
||||||
#undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
#if __LINUX_KERNEL_VERSION < 0x050100
|
||||||
#ifndef __arch64__
|
# undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
||||||
# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
# if !defined __arch64__
|
||||||
|
# undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Support for the renameat2 syscall was added in 3.16. */
|
/* Support for the renameat2 syscall was added in 3.16. */
|
||||||
|
Reference in New Issue
Block a user