diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2019-05-20 12:17:46 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2019-10-18 11:01:13 -0300 |
commit | 720e9541f5d919f3735925a4e6324ecdec171844 (patch) | |
tree | 1fdb4b8b70451d97be8256674cf922edfdf8f945 /sysdeps/unix/sysv/linux/msgctl.c | |
parent | 2901743568452403849be7295c8732faa7732339 (diff) | |
download | glibc-720e9541f5d919f3735925a4e6324ecdec171844.zip glibc-720e9541f5d919f3735925a4e6324ecdec171844.tar.gz glibc-720e9541f5d919f3735925a4e6324ecdec171844.tar.bz2 |
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>
Diffstat (limited to 'sysdeps/unix/sysv/linux/msgctl.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/msgctl.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sysdeps/unix/sysv/linux/msgctl.c b/sysdeps/unix/sysv/linux/msgctl.c index 19d5ded..44ff0e5 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 compat symbol used the + __NR_ipc syscall. */ return INLINE_SYSCALL_CALL (msgctl, msqid, cmd, buf); #else return INLINE_SYSCALL_CALL (ipc, IPCOP_msgctl, msqid, cmd, 0, buf); |