Browse Source

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>
fw/elf-fixups
Adhemerval Zanella 7 years ago
parent
commit
765cdd0bff
  1. 10
      include/sys/sem.h
  2. 6
      sysdeps/unix/sysv/linux/semop.c
  3. 5
      sysdeps/unix/sysv/linux/semtimedop.c
  4. 6
      sysvipc/semtimedop.c

10
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

6
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);
}

5
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)

6
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)

Loading…
Cancel
Save