diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2019-10-11 11:39:04 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2019-10-17 11:05:40 -0300 |
commit | 765cdd0bffd77960ae852104fc4ea5edcdb8aed3 (patch) | |
tree | 84fcbd5898b0a53b29af09ea49e07c28e21d6bd0 | |
parent | 06436acf819d9e6ada7be3ca977d5c0a23d3f138 (diff) | |
download | glibc-765cdd0bffd77960ae852104fc4ea5edcdb8aed3.tar glibc-765cdd0bffd77960ae852104fc4ea5edcdb8aed3.tar.gz glibc-765cdd0bffd77960ae852104fc4ea5edcdb8aed3.tar.bz2 glibc-765cdd0bffd77960ae852104fc4ea5edcdb8aed3.zip |
sysvipc: Implement semop based on semtimedop
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.
Reviewed-by: Florian Weimer <fweimer@redhat.com>
-rw-r--r-- | include/sys/sem.h | 10 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/semop.c | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/semtimedop.c | 5 | ||||
-rw-r--r-- | sysvipc/semtimedop.c | 6 |
4 files changed, 17 insertions, 10 deletions
diff --git a/include/sys/sem.h b/include/sys/sem.h index b0fb201bd0..69fdf1f752 100644 --- a/include/sys/sem.h +++ b/include/sys/sem.h @@ -1 +1,9 @@ -#include <sysvipc/sys/sem.h> +#ifndef _SYS_SEM_H +# include <sysvipc/sys/sem.h> + +# ifndef _ISOMAC + +__typeof__ (semtimedop) __semtimedop attribute_hidden; + +# 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..09c18d9781 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,4 @@ semtimedop (int semid, struct sembuf *sops, size_t nsops, SEMTIMEDOP_IPC_ARGS (nsops, sops, timeout)); #endif } +weak_alias (__semtimedop, 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) |