This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[glibc] sysvipc: Implement semop based on semtimedop


https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=765cdd0bffd77960ae852104fc4ea5edcdb8aed3

commit 765cdd0bffd77960ae852104fc4ea5edcdb8aed3
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Fri Oct 11 11:39:04 2019 -0300

    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>

Diff:
---
 include/sys/sem.h                    | 10 +++++++++-
 sysdeps/unix/sysv/linux/semop.c      |  6 +-----
 sysdeps/unix/sysv/linux/semtimedop.c |  5 +++--
 sysvipc/semtimedop.c                 |  6 ++++--
 4 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/include/sys/sem.h b/include/sys/sem.h
index b0fb201..69fdf1f 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 687fdcb..e111b9a 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 f34a7fb..09c18d9 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 5ca4d47..68707d6 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)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]