]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Consolidate Linux accept implementation
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 17 Nov 2016 20:13:44 +0000 (18:13 -0200)
committerAdhemerval Zanella <adhemerval.zanella@linaro.com>
Thu, 9 Mar 2017 14:22:06 +0000 (15:22 +0100)
This patch consolidates the accept Linux syscall implementation on
sysdeps/unix/sysv/linux/accept.c.  The changes are:

  1. Remove accept from auto-generation syscalls.list on the architecture
     that uses __NR_accept.
  2. Define __NR_accept as default (__ASSUME_ACCEPT_SYSCALL) and undef for
     architectures that do not support it.
  3. Remove __ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL and decide to use
     __NR_accept4 for accept generation based on __ASSUME_ACCEPT4_SYSCALL.

Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.

* sysdeps/unix/sysv/linux/accept.c (__libc_accept): Replace
__ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL by __ASSUME_ACCEPT4_SYSCALL.
* sysdeps/unix/sysv/linux/alpha/syscalls.list: Remove accept from
auto-generation list.
* sysdeps/unix/sysv/linux/arm/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/generic/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/hppa/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/ia64/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/mips/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/x86_64/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/i386/kernel-features.h
(__ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL): Remove define.
(__ASSUME_ACCEPT_SYSCALL): Undefine.
* sysdeps/unix/sysv/linux/kernel-features.h
(__ASSUME_ACCEPT_SYSCALL): New define.
* sysdeps/unix/sysv/linux/m68k/kernel-features.h
(__ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL): Remove define.
(__ASSUME_ACCEPT_SYSCALL): Define wheter kernel version supports.
* sysdeps/unix/sysv/linux/microblaze/kernel-features.h
(__ASSUME_ACCEPT_SYSCALL): Define.
* sysdeps/unix/sysv/linux/powerpc/kernel-features.h
(__ASSUME_ACCEPT_SYSCALL): Undefine.
* sysdeps/unix/sysv/linux/s390/kernel-features.h
(__ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL): Remove define.
(__ASSUME_ACCEPT_SYSCALL): Undefine.
* sysdeps/unix/sysv/linux/sh/kernel-features.h
(__ASSUME_ACCEPT_SYSCALL): Undefine.
* sysdeps/unix/sysv/linux/sparc/kernel-features.h
(__ASSUME_ACCEPT_SYSCALL): Undefine for 32 bits.

18 files changed:
ChangeLog
sysdeps/unix/sysv/linux/accept.c
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/i386/kernel-features.h
sysdeps/unix/sysv/linux/ia64/syscalls.list
sysdeps/unix/sysv/linux/kernel-features.h
sysdeps/unix/sysv/linux/m68k/kernel-features.h
sysdeps/unix/sysv/linux/microblaze/kernel-features.h
sysdeps/unix/sysv/linux/mips/syscalls.list
sysdeps/unix/sysv/linux/powerpc/kernel-features.h
sysdeps/unix/sysv/linux/s390/kernel-features.h
sysdeps/unix/sysv/linux/sh/kernel-features.h
sysdeps/unix/sysv/linux/sparc/kernel-features.h
sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
sysdeps/unix/sysv/linux/x86_64/syscalls.list

index ba57667649d258d29e9c161ecd60810833273b1a..1c8c729a527ed426d6dac326d01c38f9727bdfd7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,36 @@
+2016-03-08  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+
+       * sysdeps/unix/sysv/linux/accept.c (__libc_accept): Replace
+       __ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL by __ASSUME_ACCEPT4_SYSCALL.
+       * sysdeps/unix/sysv/linux/alpha/syscalls.list?: Remove accept from
+       auto-generation list.
+       * sysdeps/unix/sysv/linux/arm/syscalls.list: Likewise.
+       * sysdeps/unix/sysv/linux/generic/syscalls.list: Likewise.
+       * sysdeps/unix/sysv/linux/hppa/syscalls.list: Likewise.
+       * sysdeps/unix/sysv/linux/ia64/syscalls.list: Likewise.
+       * sysdeps/unix/sysv/linux/mips/syscalls.list: Likewise.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/syscalls.list: Likewise.
+       * sysdeps/unix/sysv/linux/i386/kernel-features.h
+       (__ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL): Remove define.
+       (__ASSUME_ACCEPT_SYSCALL): Undefine.
+       * sysdeps/unix/sysv/linux/kernel-features.h
+       (__ASSUME_ACCEPT_SYSCALL): New define.
+       * sysdeps/unix/sysv/linux/m68k/kernel-features.h
+       (__ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL): Remove define.
+       (__ASSUME_ACCEPT_SYSCALL): Define wheter kernel version supports.
+       * sysdeps/unix/sysv/linux/microblaze/kernel-features.h
+       (__ASSUME_ACCEPT_SYSCALL): Define.
+       * sysdeps/unix/sysv/linux/powerpc/kernel-features.h
+       (__ASSUME_ACCEPT_SYSCALL): Undefine.
+       * sysdeps/unix/sysv/linux/s390/kernel-features.h
+       (__ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL): Remove define.
+       (__ASSUME_ACCEPT_SYSCALL): Undefine.
+       * sysdeps/unix/sysv/linux/sh/kernel-features.h
+       (__ASSUME_ACCEPT_SYSCALL): Undefine.
+       * sysdeps/unix/sysv/linux/sparc/kernel-features.h
+       (__ASSUME_ACCEPT_SYSCALL): Undefine for 32 bits.
+
 2017-03-08  Yury Norov <ynorov@caviumnetworks.com>
            Zack Weinberg  <zackw@panix.com>
 
index c5935ab0a875d813f542298a5ae4e00373b4883c..2fb59b75372eba3d87646c8fde80382b2a5bca5c 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
-#include <signal.h>
 #include <sys/socket.h>
-
 #include <sysdep-cancel.h>
 #include <socketcall.h>
-#include <sys/syscall.h>
-#include <kernel-features.h>
 
 int
 __libc_accept (int fd, __SOCKADDR_ARG addr, socklen_t *len)
 {
 #ifdef __ASSUME_ACCEPT_SYSCALL
   return SYSCALL_CANCEL (accept, fd, addr.__sockaddr__, len);
-#elif defined __ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL
+#elif defined __ASSUME_ACCEPT4_SYSCALL
   return SYSCALL_CANCEL (accept4, fd, addr.__sockaddr__, len, 0);
 #else
   return SOCKETCALL_CANCEL (accept, fd, addr.__sockaddr__, len);
index 4001020a6f684569d65b17b46393798763129eb1..4cfe19e645fa991f4c01aac8f095f21df076b4db 100644 (file)
@@ -5,7 +5,6 @@ sigstack        -       sigstack        2       sigstack
 getpriority    -       getpriority     i:ii    __getpriority   getpriority
 
 # proper socket implementations:
-accept         -       accept          Ci:iBN  __libc_accept   __accept accept
 bind           -       bind            i:ipi   __bind          bind
 connect                -       connect         Ci:ipi  __libc_connect  __connect connect
 getpeername    -       getpeername     i:ipp   __getpeername   getpeername
index 0263eee406ef9c6fa43b8cebff29e334d5639d83..1c4f61ff40b328a0571c4d5db65c49b7780755f6 100644 (file)
@@ -22,7 +22,6 @@ fanotify_mark EXTRA   fanotify_mark   i:iiiiis        fanotify_mark
 personality    EXTRA   personality     Ei:i    __personality   personality
 
 # proper socket implementations:
-accept         -       accept          Ci:iBN  __libc_accept   __accept accept
 bind           -       bind            i:ipi   __bind          bind
 connect                -       connect         Ci:ipi  __libc_connect  __connect connect
 getpeername    -       getpeername     i:ipp   __getpeername   getpeername
index 3bb547303efdc49e6848d806793df4aa8eb20cc3..b176a729d7fedd4fc059da7156ae91c20c39b86a 100644 (file)
@@ -5,7 +5,6 @@ socket          -       socket          i:iii   __socket        socket
 socketpair     -       socketpair      i:iiif  __socketpair    socketpair
 bind           -       bind            i:ipi   __bind          bind
 listen         -       listen          i:ii    __listen        listen
-accept         -       accept          Ci:iBN  __libc_accept   __accept accept
 connect                -       connect         Ci:ipi  __libc_connect  __connect connect
 getsockname    -       getsockname     i:ipp   __getsockname   getsockname
 getpeername    -       getpeername     i:ipp   __getpeername   getpeername
index 6d47b11f8a61cdb87e093749752c35989ea8227e..ee814fba6f6a6e83e1ccb1b5c94c61b86cde229a 100644 (file)
@@ -1,7 +1,6 @@
 # File name    Caller  Syscall name    # args  Strong name     Weak names
 
 # proper socket implementations:
-accept         -       accept          Ci:iBN  __libc_accept   __accept accept
 bind           -       bind            i:ipi   __bind          bind
 connect                -       connect         Ci:ipi  __libc_connect  __connect connect
 getpeername    -       getpeername     i:ipp   __getpeername   getpeername
index 2696d1af5787d5c01d2e68845fd0caf3e66950f3..07462f824a8f113444c81a98645f25537ef797f7 100644 (file)
@@ -33,7 +33,6 @@
 # define __ASSUME_BIND_SYSCALL               1
 # define __ASSUME_CONNECT_SYSCALL            1
 # define __ASSUME_LISTEN_SYSCALL             1
-# define __ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL 1
 # define __ASSUME_GETSOCKOPT_SYSCALL         1
 # define __ASSUME_SETSOCKOPT_SYSCALL         1
 # define __ASSUME_GETSOCKNAME_SYSCALL        1
@@ -47,6 +46,8 @@
 
 #include_next <kernel-features.h>
 
+#undef __ASSUME_ACCEPT_SYSCALL
+
 #if __LINUX_KERNEL_VERSION < 0x040300
 # undef __ASSUME_ACCEPT4_SYSCALL
 # undef __ASSUME_SENDMSG_SYSCALL
index dd07db3539549f6ee379bf7805e8bdeb69791035..96db4c30a5111a8644bc2476e1ef840379d10b55 100644 (file)
@@ -5,7 +5,6 @@ umount2         -       umount          2       __umount2       umount2
 getpriority    -       getpriority     i:ii    __getpriority   getpriority
 
 # proper socket implementations:
-accept         -       accept          Ci:iBN  __libc_accept   __accept accept
 bind           -       bind            i:ipi   __bind          bind
 connect                -       connect         Ci:ipi  __libc_connect  __connect connect
 getpeername    -       getpeername     i:ipp   __getpeername   getpeername
index 08485cd0fdbe8b384177f0a17e6d4326ce553e38..78b091b6ae65cf3d943486fa79f80b2a9e6b22d1 100644 (file)
    separate syscalls were only added later.  */
 #define __ASSUME_SENDMSG_SYSCALL       1
 #define __ASSUME_RECVMSG_SYSCALL       1
+#define __ASSUME_ACCEPT_SYSCALL                1
 
 /* Support for SysV IPC through wired syscalls.  All supported architectures
    either support ipc syscall and/or all the ipc correspondent syscalls.  */
index 6811a28121ea5647d482c05d80d7486682419632..ff196ac12f617291c6bda92f106fd31aecc8713d 100644 (file)
@@ -27,7 +27,6 @@
 # define __ASSUME_BIND_SYSCALL               1
 # define __ASSUME_CONNECT_SYSCALL            1
 # define __ASSUME_LISTEN_SYSCALL             1
-# define __ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL 1
 # define __ASSUME_GETSOCKOPT_SYSCALL         1
 # define __ASSUME_SETSOCKOPT_SYSCALL         1
 # define __ASSUME_GETSOCKNAME_SYSCALL        1
@@ -41,6 +40,8 @@
 
 #include_next <kernel-features.h>
 
+#undef __ASSUME_ACCEPT_SYSCALL
+
 #if __LINUX_KERNEL_VERSION < 0x040300
 # undef __ASSUME_ACCEPT4_SYSCALL
 # undef __ASSUME_RECVMMSG_SYSCALL
index f68e8c5d163fae2e6762586623a2fe9a9bea5fa5..9532d5716ecca8fea5b87b29aa093a321409d730 100644 (file)
@@ -24,7 +24,6 @@
 #define __ASSUME_BIND_SYSCALL          1
 #define __ASSUME_CONNECT_SYSCALL       1
 #define __ASSUME_LISTEN_SYSCALL                1
-#define __ASSUME_ACCEPT_SYSCALL                1
 #define __ASSUME_GETSOCKNAME_SYSCALL   1
 #define __ASSUME_GETPEERNAME_SYSCALL   1
 #define __ASSUME_SOCKETPAIR_SYSCALL    1
index cd946a0e4dc51e861d606d635e8c0586980d92fb..81ea2a7ada39c7fc54fce2d07090db0c7bcf187d 100644 (file)
@@ -12,7 +12,6 @@ sysmips               -       sysmips         i:iiii  __sysmips       sysmips
 # Socket functions; Linux/MIPS doesn't use the socketcall(2) wrapper;
 # it's provided for compatibility, though.
 #
-accept         -       accept          Ci:iBN  __libc_accept   __accept accept
 bind           -       bind            i:ipi   __bind          bind
 connect                -       connect         Ci:ipi  __libc_connect  __connect connect
 getpeername    -       getpeername     i:ipp   __getpeername   getpeername
index 02dadc80f50fb17d940b3d2dcd5f264d0f33160e..272800c263d31cd2f73ec25cf3056673952d2c9c 100644 (file)
@@ -25,7 +25,6 @@
 #define __ASSUME_BIND_SYSCALL          1
 #define __ASSUME_CONNECT_SYSCALL       1
 #define __ASSUME_LISTEN_SYSCALL                1
-#define __ASSUME_ACCEPT_SYSCALL                1
 #define __ASSUME_GETSOCKNAME_SYSCALL   1
 #define __ASSUME_GETPEERNAME_SYSCALL   1
 #define __ASSUME_SOCKETPAIR_SYSCALL    1
index 4e04d263082bafb24316ca6499d40248d9c62d71..ccfb0a2c88a06ad142c866cfddf9c07840ec43f5 100644 (file)
@@ -27,7 +27,6 @@
 # define __ASSUME_BIND_SYSCALL               1
 # define __ASSUME_CONNECT_SYSCALL            1
 # define __ASSUME_LISTEN_SYSCALL             1
-# define __ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL 1
 # define __ASSUME_GETSOCKOPT_SYSCALL         1
 # define __ASSUME_SETSOCKOPT_SYSCALL         1
 # define __ASSUME_GETSOCKNAME_SYSCALL        1
@@ -41,6 +40,8 @@
 
 #include_next <kernel-features.h>
 
+#undef __ASSUME_ACCEPT_SYSCALL
+
 #if __LINUX_KERNEL_VERSION < 0x040300
 # undef __ASSUME_ACCEPT4_SYSCALL
 # undef __ASSUME_RECVMMSG_SYSCALL
index 10a669fe3f534eef3ccc91e01f1129f7035a44a7..7a83211661dde4444b48b8c95868a372d5637d88 100644 (file)
@@ -28,7 +28,6 @@
 #define __ASSUME_BIND_SYSCALL          1
 #define __ASSUME_CONNECT_SYSCALL       1
 #define __ASSUME_LISTEN_SYSCALL                1
-#define __ASSUME_ACCEPT_SYSCALL                1
 #define __ASSUME_GETSOCKNAME_SYSCALL   1
 #define __ASSUME_GETPEERNAME_SYSCALL   1
 #define __ASSUME_SOCKETPAIR_SYSCALL    1
index f78ae8518b21f7e2c49cc5b59f47798182f03ce7..3ffa96e303259279f86022b754979334ff1d4c6c 100644 (file)
@@ -38,5 +38,9 @@
 # undef __ASSUME_SET_ROBUST_LIST
 #endif
 
+#if !defined __arch64__
+# undef __ASSUME_ACCEPT_SYSCALL
+#endif
+
 /* sparc only supports ipc syscall.  */
 #undef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
index eecd83742dc4de296641bf1ee5e3fd78494592af..27ca5fa4a303460196a812e4867fa8d7115fd610 100644 (file)
@@ -2,7 +2,6 @@
 
 # Override select.S in parent directory:
 select         -       select          C:5     __select        select
-accept         -       accept          C:3     __libc_accept   __accept accept
 bind           -       bind            3       __bind          bind
 connect                -       connect         C:3     __libc_connect  __connect connect
 getpeername    -       getpeername     3       __getpeername   getpeername
index 45d5ebf59bd17bd8d6ba382e55b0a48557f97540..fe7d1567cb6db4a9ec36746ef3a90b768fbde285 100644 (file)
@@ -10,7 +10,6 @@ syscall_clock_gettime EXTRA   clock_gettime   Ei:ip           __syscall_clock_gettime
 
 
 # proper socket implementations:
-accept         -       accept          Ci:iBN  __libc_accept   __accept accept
 bind           -       bind            i:ipi   __bind          bind
 connect                -       connect         Ci:ipi  __libc_connect  __connect connect
 getpeername    -       getpeername     i:ipp   __getpeername   getpeername