]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Consolidate Linux msgrcv implementation
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 25 Oct 2016 22:55:09 +0000 (20:55 -0200)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 28 Dec 2016 22:28:56 +0000 (20:28 -0200)
This patch consolidates the msgrcv Linux implementation in only
one default file, sysdeps/unix/sysv/linux/msgrcv.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 (msgctl): Remove.
* sysdeps/unix/sysv/linux/arm/syscalls.list (msgctl): Likewise.
* sysdeps/unix/sysv/linux/generic/syscalls.list (msgctl): Likewise.
* sysdeps/unix/sysv/linux/hppa/syscalls.list (msgctl): Likewise.
* sysdeps/unix/sysv/linux/ia64/syscalls.list (msgctl): Likewise.
* sysdeps/unix/sysv/linux/microblaze/syscalls.list (msgctl): Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list (msgctl):
Likewise.
* sysdeps/unix/sysv/linux/x86_64/syscalls.list (msgctl): Likewise,
* sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (msgctl):
Likewise.
* sysdeps/unix/sysv/linux/msgrcv.c (__libc_msgrcv): Use msgrcv syscall
if defined.
* sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c: Remove file.

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/microblaze/syscalls.list
sysdeps/unix/sysv/linux/mips/mips64/syscalls.list
sysdeps/unix/sysv/linux/msgrcv.c
sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list
sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c [deleted file]
sysdeps/unix/sysv/linux/x86_64/syscalls.list

index 99112e9fb8a06b08b797ed5a4c3421976f795bcc..d1dda4d9be4267f85213c0a2d4f1f02c4d29d2b9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,20 @@
 2016-12-28  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
+       * sysdeps/unix/sysv/linux/alpha/syscalls.list (msgctl): Remove.
+       * sysdeps/unix/sysv/linux/arm/syscalls.list (msgctl): Likewise.
+       * sysdeps/unix/sysv/linux/generic/syscalls.list (msgctl): Likewise.
+       * sysdeps/unix/sysv/linux/hppa/syscalls.list (msgctl): Likewise.
+       * sysdeps/unix/sysv/linux/ia64/syscalls.list (msgctl): Likewise.
+       * sysdeps/unix/sysv/linux/microblaze/syscalls.list (msgctl): Likewise.
+       * sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list (msgctl):
+       Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/syscalls.list (msgctl): Likewise,
+       * sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (msgctl):
+       Likewise.
+       * sysdeps/unix/sysv/linux/msgrcv.c (__libc_msgrcv): Use msgrcv syscall
+       if defined.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c: Remove file.
+
        * sysdeps/unix/sysv/linux/alpha/Makefile (sysdeps_routines): Remove
        oldmsgctl.
        * sysdeps/unix/sysv/linux/alpha/msgctl.c: Remove file.
index f82c9da691e4f52f9fc2c17f3d9d398d2495dcff..ddbd67282debf0113e72c794531a5cc227db31db 100644 (file)
@@ -1,7 +1,6 @@
 # File name    Caller  Syscall name    # args  Strong name     Weak names
 
 msgget         -       msgget          i:ii    __msgget        msgget
-msgrcv         -       msgrcv          Ci:ibnii __msgrcv       msgrcv
 msgsnd         -       msgsnd          Ci:ibni __msgsnd        msgsnd
 shmat          -       osf_shmat       i:ipi   __shmat         shmat
 oldshmctl      EXTRA   shmctl          i:iip   __old_shmctl    shmctl@GLIBC_2.0
index 82402b1ee991c4e220a951c3b0d534728f56e963..297f7e78122649325eb0d36ae44a457404911c2c 100644 (file)
@@ -24,7 +24,6 @@ personality   EXTRA   personality     Ei:i    __personality   personality
 # Semaphore and shm system calls.  msgctl, shmctl, and semctl have C
 # wrappers (to set __IPC_64).
 msgget         -       msgget          i:ii    __msgget        msgget
-msgrcv         -       msgrcv          Ci:ibnii __msgrcv       msgrcv
 msgsnd         -       msgsnd          Ci:ibni __msgsnd        msgsnd
 shmat          -       shmat           i:ipi   __shmat         shmat
 shmdt          -       shmdt           i:s     __shmdt         shmdt
index dea452b606fd53063d0b12d203139c209f9172b1..6869a484ba9175398f2bc6c6a63bf4c9e042cb7d 100644 (file)
@@ -2,7 +2,6 @@
 
 # SysV APIs
 msgget         -       msgget          i:ii    __msgget        msgget
-msgrcv         -       msgrcv          Ci:ibnii __msgrcv       msgrcv
 msgsnd         -       msgsnd          Ci:ibni __msgsnd        msgsnd
 semget         -       semget          i:iii   __semget        semget
 semctl         -       semctl          i:iiii  __semctl        semctl
index ead0e993f38775dfe05a468cff4feff1a3fc60c5..e4e40a0df18ceb0449313dcc8a3a7934c3eaad1d 100644 (file)
@@ -2,7 +2,6 @@
 
 # semaphore and shm system calls
 msgget         -       msgget          i:ii    __msgget        msgget
-msgrcv         -       msgrcv          Ci:ibnii __msgrcv       msgrcv
 msgsnd         -       msgsnd          Ci:ibni __msgsnd        msgsnd
 shmat          -       shmat           i:ipi   __shmat         shmat
 shmctl         -       shmctl          i:iip   __shmctl        shmctl
index 8a66ca95dd3e4023b85f31f8e305c62b6ceb22d7..a60e615566e1a0accdf6207df8b6640387c5e8b6 100644 (file)
@@ -6,7 +6,6 @@ getpriority     -       getpriority     i:ii    __getpriority   getpriority
 
 # semaphore and shm system calls
 msgget         -       msgget          i:ii    __msgget        msgget
-msgrcv         -       msgrcv          Ci:ibnii __msgrcv       msgrcv
 msgsnd         -       msgsnd          Ci:ibni __msgsnd        msgsnd
 shmat          -       shmat           i:ipi   __shmat         shmat
 shmctl         -       shmctl          i:iip   __shmctl        shmctl
index da0fd4ec98c3e2717d7de78819194ef083efc550..99dc33b9768db833d3ed06e5a8121995dc464614 100644 (file)
@@ -9,7 +9,6 @@ personality     EXTRA   personality     Ei:i    __personality   personality
 # Semaphore and shm system calls.  msgctl, shmctl, and semctl have C
 # wrappers (to set __IPC_64).
 msgget          -       msgget          i:ii    __msgget        msgget
-msgrcv          -       msgrcv          Ci:ibnii __msgrcv       msgrcv
 msgsnd          -       msgsnd          Ci:ibni __msgsnd        msgsnd
 shmat           -       shmat           i:ipi   __shmat         shmat
 shmdt           -       shmdt           i:s     __shmdt         shmdt
index d0d9b9a97fd04bb57201de8821230f42c62f20ba..07b421de27af96954f6ffca0eef40e07a4b9c5e5 100644 (file)
@@ -3,7 +3,6 @@
 # Semaphore and shm system calls.  msgctl, shmctl, and semctl have C
 # wrappers (to set __IPC_64).
 msgget         -       msgget          i:ii    __msgget        msgget
-msgrcv         -       msgrcv          Ci:ibnii __msgrcv       msgrcv
 msgsnd         -       msgsnd          Ci:ibni __msgsnd        msgsnd
 shmat          -       shmat           i:ipi   __shmat         shmat
 shmdt          -       shmdt           i:s     __shmdt         shmdt
index c4dd219097925e7ffee2754e9bd1ce12715ada35..489d6296c7cfe381135aa520de3f49f7bf5cb2cf 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
 #include <sys/msg.h>
 #include <ipc_priv.h>
-
 #include <sysdep-cancel.h>
-#include <sys/syscall.h>
-
-/* Kludge to work around Linux' restriction of only up to five
-   arguments to a system call.  */
-struct ipc_kludge
-  {
-    void *msgp;
-    long int msgtyp;
-  };
-
 
 ssize_t
 __libc_msgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp,
               int msgflg)
 {
-  /* The problem here is that Linux' calling convention only allows up to
-     fives parameters to a system call.  */
-  struct ipc_kludge tmp;
-
-  tmp.msgp = msgp;
-  tmp.msgtyp = msgtyp;
-
-  return SYSCALL_CANCEL (ipc, IPCOP_msgrcv, msqid, msgsz, msgflg, &tmp);
+#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
+  return SYSCALL_CANCEL (msgrcv, msqid, msgp, msgsz, msgtyp, msgflg);
+#else
+  return SYSCALL_CANCEL (ipc, IPCOP_msgrcv, msqid, msgsz, msgflg,
+                        MSGRCV_ARGS (msgp, msgtyp));
+#endif
 }
 weak_alias (__libc_msgrcv, msgrcv)
index 808cbbb6813dc500c683fbb2c06f7a030badf008..59b93fefe4594d879ca9e370bec0eaa9fe1862ba 100644 (file)
@@ -2,7 +2,6 @@
 
 # semaphore and shm system calls
 msgget         -       msgget          i:ii    __msgget        msgget
-msgrcv         -       msgrcv          Ci:ibnii __msgrcv       msgrcv
 msgsnd         -       msgsnd          Ci:ibni __msgsnd        msgsnd
 shmat          -       shmat           i:ipi   __shmat         shmat
 shmctl         -       shmctl          i:iip   __shmctl        shmctl
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c b/sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c
deleted file mode 100644 (file)
index ccaa4ee..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 2010-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   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 <errno.h>
-#include <sys/msg.h>
-#include <ipc_priv.h>
-
-#include <sysdep-cancel.h>
-#include <sys/syscall.h>
-
-ssize_t
-__libc_msgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp,
-              int msgflg)
-{
-  return SYSCALL_CANCEL (ipc, IPCOP_msgrcv, msqid, msgsz, msgflg,
-                        msgp, msgtyp);
-}
-weak_alias (__libc_msgrcv, msgrcv)
index 4d19d75b4e736ac1b2220ed08e9472424e5117a5..7192a96c877bcbc7467a27b0fc97d2c21f17a4cf 100644 (file)
@@ -3,7 +3,6 @@
 arch_prctl     EXTRA   arch_prctl      i:ii    __arch_prctl    arch_prctl
 modify_ldt     EXTRA   modify_ldt      i:ipi   __modify_ldt    modify_ldt
 msgget         -       msgget          i:ii    __msgget        msgget
-msgrcv         -       msgrcv          Ci:ibnii __msgrcv       msgrcv
 msgsnd         -       msgsnd          Ci:ibni __msgsnd        msgsnd
 pread64                -       pread64         Ci:ipii __libc_pread    __libc_pread64 __pread64 pread64 __pread pread
 preadv64       -       preadv          Ci:ipii preadv64        preadv