]> sourceware.org Git - glibc.git/commitdiff
Consolidate Linux semtimedop implementation
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 26 Oct 2016 19:51:37 +0000 (17:51 -0200)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 28 Dec 2016 22:31:04 +0000 (20:31 -0200)
This patch consolidates the semtimedop Linux implementation in only
one default file, sysdeps/unix/sysv/linux/semtimedop.c.  If tries to use
the direct syscall if it is supported, otherwise will use the old ipc
multiplex mechanism.

Checked on x86_64, i686, powerpc64le, aarch64, and armhf.

* sysdeps/unix/sysv/linux/alpha/syscalls.list (semtimedop): Remove.
* sysdeps/unix/sysv/linux/arm/syscalls.list (semtimedop): Likewise.
* sysdeps/unix/sysv/linux/generic/syscalls.list (semtimedop):
Likewise.
* sysdeps/unix/sysv/linux/hppa/syscalls.list (semtimedop): Likewise.
* sysdeps/unix/sysv/linux/ia64/syscalls.list (semtimedop): Likewise.
* sysdeps/unix/sysv/linux/microblaze/syscalls.list (semtimedop):
Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (semtimedop):
Likewise.
* sysdeps/unix/sysv/linux/x86_64/syscalls.list (semtimedop): Likewise.
* sysdeps/unix/sysv/linux/m68k/semtimedop.S: Remove file.
* sysdeps/unix/sysv/linux/s390/semtimedop.c: Reorganize headers and
add a comment about s390 syscall difference from default one.
* sysdeps/unix/sysv/linux/semtimedop.c (semtimedop): Use semtimedop
syscall if it is defined.

12 files changed:
ChangeLog
sysdeps/unix/sysv/linux/alpha/syscalls.list
sysdeps/unix/sysv/linux/arm/syscalls.list
sysdeps/unix/sysv/linux/generic/syscalls.list
sysdeps/unix/sysv/linux/hppa/syscalls.list
sysdeps/unix/sysv/linux/ia64/syscalls.list
sysdeps/unix/sysv/linux/m68k/semtimedop.S [deleted file]
sysdeps/unix/sysv/linux/microblaze/syscalls.list
sysdeps/unix/sysv/linux/mips/mips64/syscalls.list
sysdeps/unix/sysv/linux/s390/semtimedop.c
sysdeps/unix/sysv/linux/semtimedop.c
sysdeps/unix/sysv/linux/x86_64/syscalls.list

index 76ad37da1e78666022c9ee1f5afcd3edf7f7aee7..8e59a083af1c10dec4097f20687ae2ec7edd59e0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,22 @@
 2016-12-28  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
+       * sysdeps/unix/sysv/linux/alpha/syscalls.list (semtimedop): Remove.
+       * sysdeps/unix/sysv/linux/arm/syscalls.list (semtimedop): Likewise.
+       * sysdeps/unix/sysv/linux/generic/syscalls.list (semtimedop):
+       Likewise.
+       * sysdeps/unix/sysv/linux/hppa/syscalls.list (semtimedop): Likewise.
+       * sysdeps/unix/sysv/linux/ia64/syscalls.list (semtimedop): Likewise.
+       * sysdeps/unix/sysv/linux/microblaze/syscalls.list (semtimedop):
+       Likewise.
+       * sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (semtimedop):
+       Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/syscalls.list (semtimedop): Likewise.
+       * sysdeps/unix/sysv/linux/m68k/semtimedop.S: Remove file.
+       * sysdeps/unix/sysv/linux/s390/semtimedop.c: Reorganize headers and
+       add a comment about s390 syscall difference from default one.
+       * sysdeps/unix/sysv/linux/semtimedop.c (semtimedop): Use semtimedop
+       syscall if it is defined.
+
        * sysdeps/unix/sysv/linux/alpha/syscalls.list (semop): Remove.
        * sysdeps/unix/sysv/linux/arm/syscalls.list (semop): Likewise.
        * sysdeps/unix/sysv/linux/generic/syscalls.list (semop): Likewise.
index c20543a6ad420818344c2ada81b9a4352ff49c06..8d3a042afee0934977232952940f49530a1fd024 100644 (file)
@@ -4,7 +4,6 @@ shmat           -       osf_shmat       i:ipi   __shmat         shmat
 oldshmctl      EXTRA   shmctl          i:iip   __old_shmctl    shmctl@GLIBC_2.0
 shmdt          -       shmdt           i:s     __shmdt         shmdt
 shmget         -       shmget          i:iii   __shmget        shmget
-semtimedop     -       semtimedop      i:ipip  semtimedop
 
 sigstack       -       sigstack        2       sigstack
 
index 3014db836bfac9ad58dd4d50a5d166b1bf2aaaf0..1b2de93518ebc272ddcfc5bd64c7388aa3488bc8 100644 (file)
@@ -26,7 +26,6 @@ personality   EXTRA   personality     Ei:i    __personality   personality
 shmat          -       shmat           i:ipi   __shmat         shmat
 shmdt          -       shmdt           i:s     __shmdt         shmdt
 shmget         -       shmget          i:iii   __shmget        shmget
-semtimedop     -       semtimedop      i:ipip  semtimedop
 
 # proper socket implementations:
 accept         -       accept          Ci:iBN  __libc_accept   __accept accept
index 54e17787482c5c1378d7408dfce66b676c2367e5..e12fb3e8b1efcea49b3c86a54a4b87163631f1d4 100644 (file)
@@ -1,7 +1,6 @@
 # File name    Caller  Syscall name    # args  Strong name     Weak names
 
 # SysV APIs
-semtimedop     -       semtimedop      i:ipip  semtimedop
 shmget         -       shmget          i:iii   __shmget        shmget
 shmctl         -       shmctl          i:iip   __shmctl        shmctl
 shmat          -       shmat           i:ipi   __shmat         shmat
index 8fbcabaa65aafd183a753d1269ec175b41e11de8..a8fbc444177af462645eeee1b4a92e77dd741807 100644 (file)
@@ -5,7 +5,6 @@ shmat           -       shmat           i:ipi   __shmat         shmat
 shmctl         -       shmctl          i:iip   __shmctl        shmctl
 shmdt          -       shmdt           i:s     __shmdt         shmdt
 shmget         -       shmget          i:iii   __shmget        shmget
-semtimedop      -       semtimedop      i:ipip  semtimedop
 
 # proper socket implementations:
 accept         -       accept          Ci:iBN  __libc_accept   __accept accept
index b9271cc545e861c1d9e84170ce9e332b812d0b69..eda4e4e20907977803b260cf123aef6690630e8c 100644 (file)
@@ -9,7 +9,6 @@ shmat           -       shmat           i:ipi   __shmat         shmat
 shmctl         -       shmctl          i:iip   __shmctl        shmctl
 shmdt          -       shmdt           i:s     __shmdt         shmdt
 shmget         -       shmget          i:iii   __shmget        shmget
-semtimedop     -       semtimedop      i:ipip  semtimedop
 
 # proper socket implementations:
 accept         -       accept          Ci:iBN  __libc_accept   __accept accept
diff --git a/sysdeps/unix/sysv/linux/m68k/semtimedop.S b/sysdeps/unix/sysv/linux/m68k/semtimedop.S
deleted file mode 100644 (file)
index b291070..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Copyright (C) 2003-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Andreas Schwab <schwab@suse.de>, 2003.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-#define SYSOP_semtimedop 4
-
-#define SVRSP  8               /* saved register space */
-#define PARMS  4+SVRSP         /* space for 3 saved regs */
-#define SEMID  PARMS
-#define SOPS   SEMID+4
-#define NSOPS  SOPS+4
-#define TIMEOUT        NSOPS+4
-
-       .text
-ENTRY (semtimedop)
-
-       /* Save registers.  */
-       move.l  %d2, %a1
-       move.l  %d3, -(%sp)
-       cfi_adjust_cfa_offset (4)
-       move.l  %d5, -(%sp)
-       cfi_adjust_cfa_offset (4)
-       cfi_register (%d2, %a1)
-       cfi_rel_offset (%d3, 0)
-       cfi_rel_offset (%d5, 4)
-
-       move.l  #SYSOP_semtimedop, %d1
-       move.l  SEMID(%sp), %d2
-       move.l  NSOPS(%sp), %d3
-       move.l  SOPS(%sp), %d5
-       move.l  TIMEOUT(%sp), %a0
-       move.l  #SYS_ify (ipc), %d0
-
-       trap    #0
-
-       /* Restore registers.  */
-       move.l  (%sp)+, %d5
-       cfi_adjust_cfa_offset (-4)
-       cfi_restore (%d5)
-       move.l  (%sp)+, %d3
-       cfi_adjust_cfa_offset (-4)
-       cfi_restore (%d3)
-       move.l  %a1, %d2
-       cfi_restore (%d2)
-
-       /* Check for error.  */
-       tst.l   %d0
-       jmi     SYSCALL_ERROR_LABEL
-
-       /* Successful; return the syscall's value.  */
-       ret
-
-PSEUDO_END (semtimedop)
index 3da653dc70aea109192f9a1b2a07373e17e9e04c..d9afda0548c89888b7cbad4a344d03ccc5e97076 100644 (file)
@@ -11,4 +11,3 @@ personality   EXTRA   personality     Ei:i    __personality   personality
 shmat           -       shmat           i:ipi   __shmat         shmat
 shmdt           -       shmdt           i:s     __shmdt         shmdt
 shmget          -       shmget          i:iii   __shmget        shmget
-semtimedop      -       semtimedop      i:ipip  semtimedop
index 720db96d59e90d429ce17ee42df6489133b36bf7..9cbbd38918544874aff7157e92475fd862d61e31 100644 (file)
@@ -5,4 +5,3 @@
 shmat          -       shmat           i:ipi   __shmat         shmat
 shmdt          -       shmdt           i:s     __shmdt         shmdt
 shmget         -       shmget          i:iii   __shmget        shmget
-semtimedop     -       semtimedop      i:ipip  semtimedop
index f226953fd39b8a2b66383a4adf80e0cc653eeee7..db43f00dfe9eb13c7394d52084e97aeef329e1c1 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
 #include <sys/sem.h>
 #include <ipc_priv.h>
-
 #include <sysdep.h>
-#include <sys/syscall.h>
+#include <errno.h>
 
 /* Perform user-defined atomical operation of array of semaphores.  */
 
@@ -29,6 +27,10 @@ int
 semtimedop (int semid, struct sembuf *sops, size_t nsops,
            const struct timespec *timeout)
 {
-  return INLINE_SYSCALL (ipc, 5, IPCOP_semtimedop,
-                        semid, (int) nsops, timeout, sops);
+  /* The s390 sys_ipc variant has only five parameters instead of six
+     (as for default variant) and the only difference is the handling of
+     SEMTIMEDOP where on s390 the third parameter is used as a pointer
+     to a struct timespec where the generic variant uses fifth parameter.  */
+  return INLINE_SYSCALL_CALL (ipc, IPCOP_semtimedop, semid, nsops, timeout,
+                             sops);
 }
index 30ee7fe39eb7d8bf6de023f474fb77ba699df960..4216dda930908af71ca60178298524b26be79b1a 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
 #include <sys/sem.h>
 #include <ipc_priv.h>
-
 #include <sysdep.h>
-#include <sys/syscall.h>
+#include <errno.h>
 
 /* Perform user-defined atomical operation of array of semaphores.  */
 
@@ -29,7 +27,10 @@ int
 semtimedop (int semid, struct sembuf *sops, size_t nsops,
            const struct timespec *timeout)
 {
-  return INLINE_SYSCALL (ipc, 6, IPCOP_semtimedop,
-                        semid, (int) nsops, 0, sops,
-                        timeout);
+#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+  return INLINE_SYSCALL_CALL (semtimedop, semid, sops, nsops, timeout);
+#else
+  return INLINE_SYSCALL_CALL (ipc, IPCOP_semtimedop, semid, nsops, 0, sops,
+                             timeout);
+#endif
 }
index d17a1869aa1df6223f28a88c6b45742c0cdf48dc..573ed0735d3b0b26b82e14cd2d532b6f13c64265 100644 (file)
@@ -10,7 +10,6 @@ shmat         -       shmat           i:ipi   __shmat         shmat
 shmctl         -       shmctl          i:iip   __shmctl        shmctl
 shmdt          -       shmdt           i:s     __shmdt         shmdt
 shmget         -       shmget          i:iii   __shmget        shmget
-semtimedop     -       semtimedop      i:ipip  semtimedop
 syscall_clock_gettime  EXTRA   clock_gettime   Ei:ip           __syscall_clock_gettime
 
 
This page took 0.18122 seconds and 5 git commands to generate.