diff options
62 files changed, 180 insertions, 581 deletions
diff --git a/ChangeLog b/ChangeLog index 9f9c7080a7..34f51b5890 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,105 @@ +2016-06-10 Adhemerval Zanela <adhemerval.zanella@linaro.org> + + * conform/data/sys/socket.h-data (msghdr.msg_iovlen): Add xfail-. + (msghdr.msg_controllen): Likewise. + (cmsghdr.cmsg_len): Likewise. + * nptl/Makefile (libpthread-routines): Remove ptw-oldrecvmsg and + ptw-oldsendmsg. + (CFLAGS-oldrecvmsg.c): Remove rule. + (CFLAGS-oldsendmsg.c): Likewise. + (CFLAGS-recvmsg.c): Add rule. + (CFLAGS-sendmsg.c): Likewise. + * sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove + oldrecvmsg, oldsendmsg, oldrecvmmsg, oldsendmmsg. + (CFLAGS-recvmsg.c): Remove rule. + (CFLAGS-sendmsg.c): Likewise. + (CFLAGS-oldrecvmsg.c): Likewise. + (CFLAGS-oldsendmsg.c): Likewise. + (CFLAGS-recvmmsg.c): Likewise. + * sysdeps/unix/sysv/linux/bits/socket.h (msghdr.msg_iovlen): Revert + to kernel defined interfaces. + (msghdr.msg_controllen): Likewise. + (cmsghdr.cmsg_len): Likewise. + (msghdr.__glibc_reserved1): Remove member. + (msghdr.__glibc_reserved2): Likewise. + (cmsghdr.__glibc_reserved1): Likewise. + * sysdeps/unix/sysv/linux/oldrecvmmsg.c: Remove file. + * sysdeps/unix/sysv/linux/oldrecvmsg.c: Likewise. + * sysdeps/unix/sysv/linux/oldsendmmsg.c: Likewise. + * sysdeps/unix/sysv/linux/oldsendmsg.c: Likewise. + * sysdeps/unix/sysv/linux/recvmmsg.c: Revert back to previous + version. + * sysdeps/unix/sysv/linux/recvmsg.c: Likewise. + * sysdeps/unix/sysv/linux/sendmmsg.c: Likewise. + * sysdeps/unix/sysv/linux/sendmsg.c: Likewise. + * sysdeps/unix/sysv/linux/aarch64/Versions [libc] (GLIBC_2.24): + Remove recvmsg and sendmsg. + * sysdeps/unix/sysv/linux/alpha/Versions [libc] (GLIBC_2.24): + Likewise. + * sysdeps/unix/sysv/linux/hppa/Versions [libc] (GLIBC_2.24): + Likewise. + * sysdeps/unix/sysv/linux/i386/Versions [libc] (GLIBC_2.24): Likewise. + * sysdeps/unix/sysv/linux/m68k/Versions [libc] (GLIBC_2.24): Likewise. + * sysdeps/unix/sysv/linux/microblaze/Versions [libc] (GLIBC_2.24): + Likewise. + * sysdeps/unix/sysv/linux/mips/mips32/Versions [libc] (GLIBC_2.24): + Likewise. + * sysdeps/unix/sysv/linux/mips/mips64/n32/Versions + [libc] (GLIBC_2.24): Likewise. + * sysdeps/unix/sysv/linux/nios2/Versions [libc] (GLIBC_2.24): + Likewise. + * sysdeps/unix/sysv/linux/powerpc/Versions [libc] (GLIBC_2.24): + Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions + [libc] (GLIBC_2.24): Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/Versions [libc] (GLIBC_2.24): + Likewise. + * sysdeps/unix/sysv/linux/s390/s390-64/Versions [libc] (GLIBC_2.24): + Likewise. + * sysdeps/unix/sysv/linux/sh/Versions [libc] (GLIBC_2.24): Likewise. + * sysdeps/unix/sysv/linux/sparc/Versions [libc] (GLIBC_2.24): + Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/Versions [libc] (GLIBC_2.24): + Likewise. + * sysdeps/unix/sysv/linux/tile/Versions [libc] (GLIBC_2.24): + Likewise. + * sysdeps/unix/sysv/linux/x86_64/Versions [libc] (GLIBC_2.24): + Likewise. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Versions: Remove file + * sysdeps/unix/sysv/linux/x86_64/64/Versions: Likewise. + * sysdeps/unix/sysv/linux/mips/mips64/n64/Versions: Likewise. + * sysdeps/unix/sysv/linux/aarch64/libc.abilist: Remove new 2.24 + version for {recv,send,recm,sendm}msg. + * sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/arm/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/hppa/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/i386/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/microblaze/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist: + Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist: + Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/nios2/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/sh/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise. + * sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise. + 2016-06-10 Florian Weimer <fweimer@redhat.com> [BZ #19564] diff --git a/conform/data/sys/socket.h-data b/conform/data/sys/socket.h-data index 3a6cf7c673..442d4d288a 100644 --- a/conform/data/sys/socket.h-data +++ b/conform/data/sys/socket.h-data @@ -22,9 +22,10 @@ type {struct msghdr} element {struct msghdr} {void*} msg_name element {struct msghdr} socklen_t msg_namelen element {struct msghdr} {struct iovec*} msg_iov -element {struct msghdr} int msg_iovlen +// Bug 16919: wrong type for msg_iovlen and msg_controllen members. +xfail-element {struct msghdr} int msg_iovlen element {struct msghdr} {void*} msg_control -element {struct msghdr} socklen_t msg_controllen +xfail-element {struct msghdr} socklen_t msg_controllen element {struct msghdr} int msg_flags type {struct iovec} @@ -34,7 +35,8 @@ element {struct iovec} size_t iov_len type {struct cmsghdr} -element {struct cmsghdr} socklen_t cmsg_len +// Bug 16919: wrong type for cmsg_len member. +xfail-element {struct cmsghdr} socklen_t cmsg_len element {struct cmsghdr} int cmsg_level element {struct cmsghdr} int cmsg_type diff --git a/nptl/Makefile b/nptl/Makefile index eaa6f7f283..a159b58935 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -115,7 +115,7 @@ libpthread-routines = nptl-init vars events version pt-interp \ ptw-pread ptw-pread64 ptw-pwrite ptw-pwrite64 \ ptw-tcdrain ptw-wait ptw-waitpid ptw-msgrcv ptw-msgsnd \ ptw-sigwait ptw-sigsuspend \ - ptw-oldrecvmsg ptw-oldsendmsg \ + ptw-recvmsg ptw-sendmsg \ pt-raise pt-system \ flockfile ftrylockfile funlockfile \ sigaction \ @@ -207,8 +207,8 @@ CFLAGS-accept.c = -fexceptions -fasynchronous-unwind-tables CFLAGS-sendto.c = -fexceptions -fasynchronous-unwind-tables CFLAGS-connect.c = -fexceptions -fasynchronous-unwind-tables CFLAGS-recvfrom.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-oldrecvmsg.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-oldsendmsg.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-recvmsg.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-sendmsg.c = -fexceptions -fasynchronous-unwind-tables CFLAGS-pt-system.c = -fexceptions diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index c57575fbcb..35e1ed48d2 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -124,12 +124,9 @@ ifeq ($(subdir),socket) sysdep_headers += net/if_ppp.h net/ppp-comp.h \ net/ppp_defs.h net/if_arp.h net/route.h net/ethernet.h \ net/if_slip.h net/if_packet.h net/if_shaper.h -sysdep_routines += cmsg_nxthdr oldrecvmsg oldsendmsg \ - oldrecvmmsg oldsendmmsg -CFLAGS-recvmsg.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-sendmsg.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-oldrecvmsg.c = -fexceptions -fasynchronous-unwind-tables -CFLAGS-oldsendmsg.c = -fexceptions -fasynchronous-unwind-tables +sysdep_routines += cmsg_nxthdr +CFLAGS-recvmmsg.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-sendmmsg.c = -fexceptions -fasynchronous-unwind-tables endif ifeq ($(subdir),sunrpc) diff --git a/sysdeps/unix/sysv/linux/aarch64/Versions b/sysdeps/unix/sysv/linux/aarch64/Versions index ae3742cc1e..9bd87fe2d0 100644 --- a/sysdeps/unix/sysv/linux/aarch64/Versions +++ b/sysdeps/unix/sysv/linux/aarch64/Versions @@ -5,10 +5,6 @@ ld { } } libc { - GLIBC_2.24 { - recvmsg; sendmsg; - } - GLIBC_PRIVATE { __vdso_clock_gettime; __vdso_clock_getres; diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist index 38788910c2..9cdb623a5c 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist @@ -2089,7 +2089,3 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmmsg F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmmsg F -GLIBC_2.24 sendmsg F diff --git a/sysdeps/unix/sysv/linux/alpha/Versions b/sysdeps/unix/sysv/linux/alpha/Versions index 31abb2206e..29b82f999b 100644 --- a/sysdeps/unix/sysv/linux/alpha/Versions +++ b/sysdeps/unix/sysv/linux/alpha/Versions @@ -85,9 +85,6 @@ libc { #errlist-compat 140 _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; } - GLIBC_2.24 { - recvmsg; sendmsg; - } GLIBC_PRIVATE { __libc_alpha_cache_shape; } diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist index 5ce7e10c44..f3f3c70ca6 100644 --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist @@ -2000,10 +2000,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmmsg F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/arm/libc.abilist b/sysdeps/unix/sysv/linux/arm/libc.abilist index 9f8eecc4c5..a93803d182 100644 --- a/sysdeps/unix/sysv/linux/arm/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/libc.abilist @@ -90,8 +90,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F GLIBC_2.4 GLIBC_2.4 A GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h index ef4629a743..2eb95f7e20 100644 --- a/sysdeps/unix/sysv/linux/bits/socket.h +++ b/sysdeps/unix/sysv/linux/bits/socket.h @@ -27,8 +27,6 @@ #include <stddef.h> #include <sys/types.h> -#include <endian.h> -#include <bits/wordsize.h> /* Type for length arguments in socket calls. */ #ifndef __socklen_t_defined @@ -252,32 +250,13 @@ struct msghdr socklen_t msg_namelen; /* Length of address data. */ struct iovec *msg_iov; /* Vector of data to send/receive into. */ -#if __WORDSIZE == 64 -# if __BYTE_ORDER == __BIG_ENDIAN - int __glibc_reserved1; /* Pad to adjust Linux size to POSIX defined - size for msg_iovlen. */ - int msg_iovlen; /* Number of elements in the vector. */ -# else - int msg_iovlen; - int __glibc_reserved1; -# endif -#else - int msg_iovlen; -#endif + size_t msg_iovlen; /* Number of elements in the vector. */ void *msg_control; /* Ancillary data (eg BSD filedesc passing). */ -#if __WORDSIZE == 64 -# if __BYTE_ORDER == __BIG_ENDIAN - int __glibc_reserved2; /* Pad to adjust Linux size to POSIX defined - size for msg_controllen. */ - socklen_t msg_controllen; /* Ancillary data buffer length. */ -# else - socklen_t msg_controllen; - int __glibc_reserved2; -# endif -#else - socklen_t msg_controllen; -#endif + size_t msg_controllen; /* Ancillary data buffer length. + !! The type should be socklen_t but the + definition of the kernel is incompatible + with this. */ int msg_flags; /* Flags on received message. */ }; @@ -285,19 +264,11 @@ struct msghdr /* Structure used for storage of ancillary data object information. */ struct cmsghdr { -#if __WORDSIZE == 64 -# if __BYTE_ORDER == __BIG_ENDIAN - int __glibc_reserved1; /* Pad toadjust Linux size to POSIX defined - size for cmsg_len. */ - socklen_t cmsg_len; /* Length of data in cmsg_data plus length - of cmsghdr structure. */ -# else - socklen_t cmsg_len; - int __glibc_reserved1; -# endif -#else - socklen_t cmsg_len; -#endif + size_t cmsg_len; /* Length of data in cmsg_data plus length + of cmsghdr structure. + !! The type should be socklen_t but the + definition of the kernel is incompatible + with this. */ int cmsg_level; /* Originating protocol. */ int cmsg_type; /* Protocol specific type. */ #if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L diff --git a/sysdeps/unix/sysv/linux/hppa/Versions b/sysdeps/unix/sysv/linux/hppa/Versions index f0af95ef46..b5098b2171 100644 --- a/sysdeps/unix/sysv/linux/hppa/Versions +++ b/sysdeps/unix/sysv/linux/hppa/Versions @@ -35,7 +35,4 @@ libc { GLIBC_2.19 { fanotify_mark; } - GLIBC_2.24 { - recvmsg; sendmsg; - } } diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist index 421b6feaea..58ed133385 100644 --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -1854,8 +1854,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/i386/Versions b/sysdeps/unix/sysv/linux/i386/Versions index 64d503b62d..f3544acb75 100644 --- a/sysdeps/unix/sysv/linux/i386/Versions +++ b/sysdeps/unix/sysv/linux/i386/Versions @@ -45,9 +45,6 @@ libc { # f* fallocate64; } - GLIBC_2.24 { - recvmsg; sendmsg; - } GLIBC_PRIVATE { __modify_ldt; } diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist index b7fc26c4cd..61cbae0f58 100644 --- a/sysdeps/unix/sysv/linux/i386/libc.abilist +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -2012,8 +2012,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist index e0df2e3ae2..d40d264ef2 100644 --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist @@ -1876,10 +1876,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmmsg F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/m68k/Versions b/sysdeps/unix/sysv/linux/m68k/Versions index 2dc2e83d07..7ecc96ea97 100644 --- a/sysdeps/unix/sysv/linux/m68k/Versions +++ b/sysdeps/unix/sysv/linux/m68k/Versions @@ -40,9 +40,6 @@ libc { GLIBC_2.12 { __m68k_read_tp; } - GLIBC_2.24 { - recvmsg; sendmsg; - } GLIBC_PRIVATE { __vdso_atomic_cmpxchg_32; __vdso_atomic_barrier; } diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist index f80cdfe28e..64432ae0e1 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist @@ -91,8 +91,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F GLIBC_2.4 GLIBC_2.4 A GLIBC_2.4 _Exit F GLIBC_2.4 _IO_2_1_stderr_ D 0x98 diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist index 9132c26e77..8086c3857e 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -1968,8 +1968,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/microblaze/Versions b/sysdeps/unix/sysv/linux/microblaze/Versions index 2e93b8a43a..aa48a3c155 100644 --- a/sysdeps/unix/sysv/linux/microblaze/Versions +++ b/sysdeps/unix/sysv/linux/microblaze/Versions @@ -2,7 +2,4 @@ libc { GLIBC_2.18 { fallocate64; } - GLIBC_2.24 { - recvmsg; sendmsg; - } } diff --git a/sysdeps/unix/sysv/linux/microblaze/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/libc.abilist index 94439272a5..8c4c3bba45 100644 --- a/sysdeps/unix/sysv/linux/microblaze/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/libc.abilist @@ -2089,5 +2089,3 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/Versions b/sysdeps/unix/sysv/linux/mips/mips32/Versions index c4f38d8faf..9621fb5cae 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/Versions +++ b/sysdeps/unix/sysv/linux/mips/mips32/Versions @@ -3,7 +3,4 @@ libc { getrlimit64; setrlimit64; } - GLIBC_2.24 { - recvmsg; sendmsg; - } } diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist index 69386b2a94..db014edc51 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -1943,8 +1943,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist index 62ba3f918e..33ac881346 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist @@ -1941,8 +1941,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/Versions b/sysdeps/unix/sysv/linux/mips/mips64/n32/Versions index c4f38d8faf..9621fb5cae 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/Versions +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/Versions @@ -3,7 +3,4 @@ libc { getrlimit64; setrlimit64; } - GLIBC_2.24 { - recvmsg; sendmsg; - } } diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist index 49b2ad7aa5..b8b2c0eabb 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -1939,8 +1939,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/Versions b/sysdeps/unix/sysv/linux/mips/mips64/n64/Versions deleted file mode 100644 index 517d79a880..0000000000 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/Versions +++ /dev/null @@ -1,5 +0,0 @@ -libc { - GLIBC_2.24 { - recvmsg; sendmsg; - } -} diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist index 445db92115..07413015f4 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist @@ -1934,10 +1934,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmmsg F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/nios2/Versions b/sysdeps/unix/sysv/linux/nios2/Versions index 93458f5951..e42c85f575 100644 --- a/sysdeps/unix/sysv/linux/nios2/Versions +++ b/sysdeps/unix/sysv/linux/nios2/Versions @@ -3,7 +3,4 @@ libc { _flush_cache; cacheflush; } - GLIBC_2.24 { - recvmsg; sendmsg; - } } diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist index d854b6d8c9..fa04825b2b 100644 --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist @@ -2130,5 +2130,3 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F diff --git a/sysdeps/unix/sysv/linux/oldrecvmmsg.c b/sysdeps/unix/sysv/linux/oldrecvmmsg.c deleted file mode 100644 index 4bf849bb58..0000000000 --- a/sysdeps/unix/sysv/linux/oldrecvmmsg.c +++ /dev/null @@ -1,87 +0,0 @@ -/* Compatibility version of recvmsg. - 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 <sys/socket.h> -#include <sysdep-cancel.h> -#include <socketcall.h> -#include <shlib-compat.h> - -#if __WORDSIZE == 64 -# if SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_24) - -/* Do not use the recvmmsg syscall on socketcall architectures unless - it was added at the same time as the socketcall support or can be - assumed to be present. */ -# if defined __ASSUME_SOCKETCALL \ - && !defined __ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL \ - && !defined __ASSUME_RECVMMSG_SYSCALL -# undef __NR_recvmmsg -# endif - -int -__old_recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, - int flags, struct timespec *tmo) -{ -# ifdef __NR_recvmmsg - return SYSCALL_CANCEL (recvmmsg, fd, vmessages, vlen, flags, tmo); -# elif defined __NR_socketcall -# ifdef __ASSUME_RECVMMSG_SOCKETCALL - return SOCKETCALL_CANCEL (recvmmsg, fd, vmessages, vlen, flags, tmo); -# else - static int have_recvmmsg; - if (__glibc_likely (have_recvmmsg >= 0)) - { - int ret = SOCKETCALL_CANCEL (recvmmsg, fd, vmessages, vlen, flags, - tmo); - /* The kernel returns -EINVAL for unknown socket operations. - We need to convert that error to an ENOSYS error. */ - if (__builtin_expect (ret < 0, 0) - && have_recvmmsg == 0 - && errno == EINVAL) - { - /* Try another call, this time with an invalid file - descriptor and all other parameters cleared. This call - will not cause any harm and it will return - immediately. */ - ret = SOCKETCALL_CANCEL (invalid, -1); - if (errno == EINVAL) - { - have_recvmmsg = -1; - __set_errno (ENOSYS); - } - else - { - have_recvmmsg = 1; - __set_errno (EINVAL); - } - return -1; - } - return ret; - } - __set_errno (ENOSYS); - return -1; -# endif /* __ASSUME_RECVMMSG_SOCKETCALL */ -# else - __set_errno (ENOSYS); - return -1; -# endif -} -compat_symbol (libc, __old_recvmmsg, recvmmsg, GLIBC_2_12); - -# endif /* SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_24) */ -#endif /* __WORDSIZE == 64 */ diff --git a/sysdeps/unix/sysv/linux/oldrecvmsg.c b/sysdeps/unix/sysv/linux/oldrecvmsg.c deleted file mode 100644 index 01c596e09a..0000000000 --- a/sysdeps/unix/sysv/linux/oldrecvmsg.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Compatibility version of recvmsg. - Copyright (C) 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 <sys/socket.h> -#include <sysdep-cancel.h> -#include <socketcall.h> -#include <shlib-compat.h> - -/* Both libc.so and libpthread.so provides sendmsg, so we need to - provide the compat symbol for both libraries. */ -#if SHLIB_COMPAT (MODULE_NAME, GLIBC_2_0, GLIBC_2_24) - -/* We can use the same struct layout for old symbol version since - size is the same. */ -ssize_t -__old_recvmsg (int fd, struct msghdr *msg, int flags) -{ -# ifdef __ASSUME_RECVMSG_SYSCALL - return SYSCALL_CANCEL (recvmsg, fd, msg, flags); -# else - return SOCKETCALL_CANCEL (recvmsg, fd, msg, flags); -# endif -} -compat_symbol (MODULE_NAME, __old_recvmsg, recvmsg, GLIBC_2_0); -#endif diff --git a/sysdeps/unix/sysv/linux/oldsendmmsg.c b/sysdeps/unix/sysv/linux/oldsendmmsg.c deleted file mode 100644 index e40c31121c..0000000000 --- a/sysdeps/unix/sysv/linux/oldsendmmsg.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Compatibility implementation of sendmmsg. - Copyright (C) 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 <sys/socket.h> -#include <sysdep-cancel.h> -#include <socketcall.h> -#include <shlib-compat.h> - -#if __WORDSIZE == 64 -# if SHLIB_COMPAT (libc, GLIBC_2_14, GLIBC_2_24) - -int -__old_sendmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, - int flags) -{ -# ifdef __NR_sendmmsg - return SYSCALL_CANCEL (sendmmsg, fd, vmessages, vlen, flags); -# elif defined __NR_socketcall -# ifdef __ASSUME_SENDMMSG_SOCKETCALL - return SOCKETCALL_CANCEL (sendmmsg, fd, vmessages, vlen, flags); -# else - static int have_sendmmsg; - if (__glibc_likely (have_sendmmsg >= 0)) - { - int ret = SOCKETCALL_CANCEL (sendmmsg, fd, vmessages, vlen, flags); - /* The kernel returns -EINVAL for unknown socket operations. - We need to convert that error to an ENOSYS error. */ - if (__builtin_expect (ret < 0, 0) - && have_sendmmsg == 0 - && errno == EINVAL) - { - /* Try another call, this time with an invalid file - descriptor and all other parameters cleared. This call - will not cause any harm and it will return - immediately. */ - ret = SOCKETCALL_CANCEL (invalid, -1); - if (errno == EINVAL) - { - have_sendmmsg = -1; - __set_errno (ENOSYS); - } - else - { - have_sendmmsg = 1; - __set_errno (EINVAL); - } - return -1; - } - return ret; - } - __set_errno (ENOSYS); - return -1; -# endif /* __ASSUME_SENDMMSG_SOCKETCALL */ -# else /* defined __NR_socketcall */ - __set_errno (ENOSYS); - return -1; -# endif -} -compat_symbol (libc, __old_sendmmsg, sendmmsg, GLIBC_2_14); -# endif /* SHLIB_COMPAT (libc, GLIBC_2_14, GLIBC_2_24) */ -#endif /* __WORDSIZE == 64 */ diff --git a/sysdeps/unix/sysv/linux/oldsendmsg.c b/sysdeps/unix/sysv/linux/oldsendmsg.c deleted file mode 100644 index a96790aa23..0000000000 --- a/sysdeps/unix/sysv/linux/oldsendmsg.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Compatibility implementation of sendmsg. - Copyright (C) 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 <sys/socket.h> -#include <sysdep-cancel.h> -#include <socketcall.h> -#include <shlib-compat.h> - -/* Both libc.so and libpthread.so provides sendmsg, so we need to - provide the compat symbol for both libraries. */ -#if SHLIB_COMPAT (MODULE_NAME, GLIBC_2_0, GLIBC_2_24) - -/* We can use the same struct layout for old symbol version since - size is the same. */ -ssize_t -__old_sendmsg (int fd, const struct msghdr *msg, int flags) -{ -# ifdef __ASSUME_SENDMSG_SYSCALL - return SYSCALL_CANCEL (sendmsg, fd, msg, flags); -# else - return SOCKETCALL_CANCEL (sendmsg, fd, msg, flags); -# endif -} -compat_symbol (MODULE_NAME, __old_sendmsg, sendmsg, GLIBC_2_0); -#endif diff --git a/sysdeps/unix/sysv/linux/powerpc/Versions b/sysdeps/unix/sysv/linux/powerpc/Versions index ab0db57137..8ebeea15a1 100644 --- a/sysdeps/unix/sysv/linux/powerpc/Versions +++ b/sysdeps/unix/sysv/linux/powerpc/Versions @@ -5,9 +5,6 @@ ld { } } libc { - GLIBC_2.24 { - recvmsg; sendmsg; - } GLIBC_PRIVATE { __vdso_get_tbfreq; __vdso_clock_gettime; diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist index bcb4bd1c8d..3d633c0999 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@ -1972,8 +1972,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist index 01f49572ee..a6b164bc23 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist @@ -1977,8 +1977,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions b/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions index 53e5527cb3..a8e88b89db 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions @@ -22,9 +22,6 @@ libc { GLIBC_2.17 { __ppc_get_timebase_freq; } - GLIBC_2.24 { - recvmsg; sendmsg; - } } librt { diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist index 83486704ab..7200b76287 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist @@ -2177,7 +2177,3 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmmsg F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmmsg F -GLIBC_2.24 sendmsg F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist index 3de5d61cb7..de62ecb0f3 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist @@ -91,10 +91,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmmsg F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 _Exit F GLIBC_2.3 _IO_2_1_stderr_ D 0xe0 diff --git a/sysdeps/unix/sysv/linux/recvmmsg.c b/sysdeps/unix/sysv/linux/recvmmsg.c index 08b89ba962..bf18260b46 100644 --- a/sysdeps/unix/sysv/linux/recvmmsg.c +++ b/sysdeps/unix/sysv/linux/recvmmsg.c @@ -16,10 +16,12 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#include <errno.h> #include <sys/socket.h> -#include <socketcall.h> + #include <sysdep-cancel.h> -#include <shlib-compat.h> +#include <sys/syscall.h> +#include <kernel-features.h> /* Do not use the recvmmsg syscall on socketcall architectures unless it was added at the same time as the socketcall support or can be @@ -30,39 +32,31 @@ # undef __NR_recvmmsg #endif -static inline void -adjust_mmsghdr (struct mmsghdr *vmessages, unsigned int vlen) -{ -#if __WORDSIZE == 64 - /* POSIX specifies that both msghdr::msg_iovlen and msghdr::msg_controllen - to be int and socklen_t respectively. However Linux defines it as - both size_t. So for 64-bit it requires some adjustments by zeroing - the pad fields. */ - struct mmsghdr *vmhdr = vmessages; - for (unsigned int i = 0; i != 0; i--, vmhdr++) - { - vmhdr->msg_hdr.__glibc_reserved1 = 0; - vmhdr->msg_hdr.__glibc_reserved2 = 0; - } -#endif -} - +#ifdef __NR_recvmmsg int -__recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, - int flags, struct timespec *tmo) +recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags, + struct timespec *tmo) { -#ifdef __NR_recvmmsg - adjust_mmsghdr (vmessages, vlen); return SYSCALL_CANCEL (recvmmsg, fd, vmessages, vlen, flags, tmo); +} #elif defined __NR_socketcall +# include <socketcall.h> # ifdef __ASSUME_RECVMMSG_SOCKETCALL - adjust_mmsghdr (vmessages, vlen); +int +recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags, + struct timespec *tmo) +{ return SOCKETCALL_CANCEL (recvmmsg, fd, vmessages, vlen, flags, tmo); +} # else - static int have_recvmmsg; +static int have_recvmmsg; + +int +recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags, + struct timespec *tmo) +{ if (__glibc_likely (have_recvmmsg >= 0)) { - adjust_mmsghdr (vmessages, vlen); int ret = SOCKETCALL_CANCEL (recvmmsg, fd, vmessages, vlen, flags, tmo); /* The kernel returns -EINVAL for unknown socket operations. @@ -92,19 +86,8 @@ __recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, } __set_errno (ENOSYS); return -1; -# endif /* __ASSUME_RECVMMSG_SOCKETCALL */ -#else -# define STUB 1 - __set_errno (ENOSYS); - return -1; -#endif } -#ifdef STUB -stub_warning (recvmmsg) -#endif - -#if __WORDSIZE == 64 -versioned_symbol (libc, __recvmmsg, recvmmsg, GLIBC_2_24); +# endif /* __ASSUME_RECVMMSG_SOCKETCALL */ #else -weak_alias (__recvmmsg, recvmmsg) +# include <socket/recvmmsg.c> #endif diff --git a/sysdeps/unix/sysv/linux/recvmsg.c b/sysdeps/unix/sysv/linux/recvmsg.c index 25a319358b..14ba67e72c 100644 --- a/sysdeps/unix/sysv/linux/recvmsg.c +++ b/sysdeps/unix/sysv/linux/recvmsg.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2015-2016 Free Software Foundation, Inc. +/* Linux recvmsg syscall wrapper. + Copyright (C) 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 @@ -23,35 +24,11 @@ ssize_t __libc_recvmsg (int fd, struct msghdr *msg, int flags) { - ssize_t ret; - - /* POSIX specifies that both msghdr::msg_iovlen and msghdr::msg_controllen - to be int and socklen_t respectively. However Linux defines it as - both size_t. So for 64-bit it requires some adjustments by copying to - temporary header and zeroing the pad fields. */ -#if __WORDSIZE == 64 - struct msghdr hdr, *orig = msg; - if (msg != NULL) - { - hdr = *msg; - hdr.__glibc_reserved1 = 0; - hdr.__glibc_reserved2 = 0; - msg = &hdr; - } -#endif - -#ifdef __ASSUME_RECVMSG_SYSCALL - ret = SYSCALL_CANCEL (recvmsg, fd, msg, flags); -#else - ret = SOCKETCALL_CANCEL (recvmsg, fd, msg, flags); -#endif - -#if __WORDSIZE == 64 - if (orig != NULL) - *orig = hdr; -#endif - - return ret; +# ifdef __ASSUME_RECVMSG_SYSCALL + return SYSCALL_CANCEL (recvmsg, fd, msg, flags); +# else + return SOCKETCALL_CANCEL (recvmsg, fd, msg, flags); +# endif } +weak_alias (__libc_recvmsg, recvmsg) weak_alias (__libc_recvmsg, __recvmsg) -versioned_symbol (libc, __libc_recvmsg, recvmsg, GLIBC_2_24); diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/Versions b/sysdeps/unix/sysv/linux/s390/s390-32/Versions index afcc3fee4e..1c120e8cbe 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/Versions +++ b/sysdeps/unix/sysv/linux/s390/s390-32/Versions @@ -49,9 +49,6 @@ libc { GLIBC_2.11 { fallocate64; } - GLIBC_2.24 { - recvmsg; sendmsg; - } } libutil { diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index 761f3401ca..8da0bc087f 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -1972,8 +1972,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/Versions b/sysdeps/unix/sysv/linux/s390/s390-64/Versions index fde5aeee48..3f4d960421 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/Versions +++ b/sysdeps/unix/sysv/linux/s390/s390-64/Versions @@ -4,9 +4,6 @@ libc { __register_frame; __register_frame_table; __deregister_frame; __frame_state_for; __register_frame_info_table; } - GLIBC_2.24 { - recvmsg; sendmsg; - } } librt { diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist index b7f5371085..59066a9402 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist @@ -1873,10 +1873,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmmsg F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/sendmmsg.c b/sysdeps/unix/sysv/linux/sendmmsg.c index 9b193438ce..6e0d46be9e 100644 --- a/sysdeps/unix/sysv/linux/sendmmsg.c +++ b/sysdeps/unix/sysv/linux/sendmmsg.c @@ -16,10 +16,12 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#include <errno.h> #include <sys/socket.h> -#include <socketcall.h> + #include <sysdep-cancel.h> -#include <shlib-compat.h> +#include <sys/syscall.h> +#include <kernel-features.h> /* Do not use the sendmmsg syscall on socketcall architectures unless it was added at the same time as the socketcall support or can be @@ -30,53 +32,31 @@ # undef __NR_sendmmsg #endif -#if __WORDSIZE == 64 -static inline int -send_mmsghdr (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags) -{ - /* Emulate kernel interface for vlen size. */ - if (vlen > IOV_MAX) - vlen = IOV_MAX; - if (vlen == 0) - return 0; - /* POSIX specifies that both msghdr::msg_iovlen and msghdr::msg_controllen - to be int and socklen_t respectively, however Linux defines it as both - size_t. So for 64-bit it requires some adjustments by copying to - temporary header and zeroing the pad fields. - The problem is sendmmsg's msghdr may points to an already-filled control - buffer and modifying it is not part of sendmmsg contract (the data may - be in ro map). So interact over the msghdr calling the sendmsg that - adjust the header using a temporary buffer. */ - for (unsigned int i = 0; i < vlen; i++) - { - ssize_t ret = __sendmsg (fd, &vmessages[i].msg_hdr, flags); - if (ret < 0) - return -1; - vmessages[i].msg_len = ret; - } - return 1; -} -#endif - +#ifdef __NR_sendmmsg int __sendmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags) { -#if __WORDSIZE == 64 - return send_mmsghdr (fd, vmessages, vlen, flags); -#elif defined __NR_sendmmsg return SYSCALL_CANCEL (sendmmsg, fd, vmessages, vlen, flags); +} +libc_hidden_def (__sendmmsg) +weak_alias (__sendmmsg, sendmmsg) #elif defined __NR_socketcall +# include <socketcall.h> # ifdef __ASSUME_SENDMMSG_SOCKETCALL +int +__sendmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags) +{ return SOCKETCALL_CANCEL (sendmmsg, fd, vmessages, vlen, flags); +} # else - static int have_sendmmsg; +static int have_sendmmsg; + +int +__sendmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags) +{ if (__glibc_likely (have_sendmmsg >= 0)) { -# if __WORDSIZE == 64 - int ret = send_mmsghdr (fd, vmessages, vlen, flags); -# else int ret = SOCKETCALL_CANCEL (sendmmsg, fd, vmessages, vlen, flags); -# endif /* The kernel returns -EINVAL for unknown socket operations. We need to convert that error to an ENOSYS error. */ if (__builtin_expect (ret < 0, 0) @@ -104,20 +84,10 @@ __sendmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags) } __set_errno (ENOSYS); return -1; -# endif /* __ASSUME_SENDMMSG_SOCKETCALL */ -#else /* defined __NR_socketcall */ -# define STUB 1 - __set_errno (ENOSYS); - return -1; -#endif } -#ifdef STUB -stub_warning (sendmmsg) -#endif - +# endif /* __ASSUME_SENDMMSG_SOCKETCALL */ libc_hidden_def (__sendmmsg) -#if __WORDSIZE == 64 -versioned_symbol (libc, __sendmmsg, sendmmsg, GLIBC_2_24); -#else weak_alias (__sendmmsg, sendmmsg) +#else +# include <socket/sendmmsg.c> #endif diff --git a/sysdeps/unix/sysv/linux/sendmsg.c b/sysdeps/unix/sysv/linux/sendmsg.c index a5ef238c4a..e10ab60ec3 100644 --- a/sysdeps/unix/sysv/linux/sendmsg.c +++ b/sysdeps/unix/sysv/linux/sendmsg.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2015-2016 Free Software Foundation, Inc. +/* Compatibility implementation of sendmsg. + Copyright (C) 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 @@ -23,26 +24,11 @@ ssize_t __libc_sendmsg (int fd, const struct msghdr *msg, int flags) { - /* POSIX specifies that both msghdr::msg_iovlen and msghdr::msg_controllen - to be int and socklen_t respectively. However Linux defines it as - both size_t. So for 64-bit it requires some adjustments by copying to - temporary header and zeroing the pad fields. */ -#if __WORDSIZE == 64 - struct msghdr hdr; - if (msg != NULL) - { - hdr = *msg; - hdr.__glibc_reserved1 = 0; - hdr.__glibc_reserved2 = 0; - msg = &hdr; - } -#endif - -#ifdef __ASSUME_SENDMSG_SYSCALL +# ifdef __ASSUME_SENDMSG_SYSCALL return SYSCALL_CANCEL (sendmsg, fd, msg, flags); -#else +# else return SOCKETCALL_CANCEL (sendmsg, fd, msg, flags); -#endif +# endif } +weak_alias (__libc_sendmsg, sendmsg) weak_alias (__libc_sendmsg, __sendmsg) -versioned_symbol (libc, __libc_sendmsg, sendmsg, GLIBC_2_24); diff --git a/sysdeps/unix/sysv/linux/sh/Versions b/sysdeps/unix/sysv/linux/sh/Versions index ae5a00e640..e0938c4165 100644 --- a/sysdeps/unix/sysv/linux/sh/Versions +++ b/sysdeps/unix/sysv/linux/sh/Versions @@ -30,7 +30,4 @@ libc { GLIBC_2.16 { fanotify_mark; } - GLIBC_2.24 { - recvmsg; sendmsg; - } } diff --git a/sysdeps/unix/sysv/linux/sh/libc.abilist b/sysdeps/unix/sysv/linux/sh/libc.abilist index fb58c06b3d..01ca9e65ba 100644 --- a/sysdeps/unix/sysv/linux/sh/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/libc.abilist @@ -1858,8 +1858,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/sparc/Versions b/sysdeps/unix/sysv/linux/sparc/Versions index adbdec508a..4dc1cd720b 100644 --- a/sysdeps/unix/sysv/linux/sparc/Versions +++ b/sysdeps/unix/sysv/linux/sparc/Versions @@ -29,9 +29,6 @@ libc { __getshmlba; } - GLIBC_2.24 { - recvmsg; sendmsg; - } } libpthread { diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index 01260e253b..245c1c6d22 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -1964,8 +1964,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/Versions b/sysdeps/unix/sysv/linux/sparc/sparc64/Versions index f950070b4d..fbea1bb2ef 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/Versions +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/Versions @@ -8,9 +8,6 @@ libc { # w* wordexp; } - GLIBC_2.24 { - recvmsg; sendmsg; - } } librt { diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist index 8884d4e4b7..4478d13710 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist @@ -1902,10 +1902,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmmsg F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/tile/Versions b/sysdeps/unix/sysv/linux/tile/Versions index a68e181940..13da68fa79 100644 --- a/sysdeps/unix/sysv/linux/tile/Versions +++ b/sysdeps/unix/sysv/linux/tile/Versions @@ -11,9 +11,6 @@ libc { fallocate64; set_dataplane; } - GLIBC_2.24 { - recvmsg; sendmsg; - } GLIBC_PRIVATE { __syscall_error; __vdso_clock_gettime; diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist index 81eea08440..c1a2613418 100644 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist +++ b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist @@ -2096,5 +2096,3 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Versions b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Versions deleted file mode 100644 index 517d79a880..0000000000 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Versions +++ /dev/null @@ -1,5 +0,0 @@ -libc { - GLIBC_2.24 { - recvmsg; sendmsg; - } -} diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist index 9ce9b57b28..35fbf8a904 100644 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist +++ b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist @@ -2096,7 +2096,3 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmmsg F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmmsg F -GLIBC_2.24 sendmsg F diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist index 81eea08440..c1a2613418 100644 --- a/sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist +++ b/sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist @@ -2096,5 +2096,3 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/Versions b/sysdeps/unix/sysv/linux/x86_64/64/Versions deleted file mode 100644 index 517d79a880..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/64/Versions +++ /dev/null @@ -1,5 +0,0 @@ -libc { - GLIBC_2.24 { - recvmsg; sendmsg; - } -} diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist index 03549b17df..c1054ce9d2 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist @@ -1853,10 +1853,6 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmmsg F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmmsg F -GLIBC_2.24 sendmsg F GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_tolower_loc F diff --git a/sysdeps/unix/sysv/linux/x86_64/Versions b/sysdeps/unix/sysv/linux/x86_64/Versions index bbef7e08e5..2a7ed280fd 100644 --- a/sysdeps/unix/sysv/linux/x86_64/Versions +++ b/sysdeps/unix/sysv/linux/x86_64/Versions @@ -6,9 +6,6 @@ libc { modify_ldt; } - GLIBC_2.24 { - recvmsg; sendmsg; - } } librt { diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist index 86dab3ff01..2fd6d60d38 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist @@ -2096,5 +2096,3 @@ GLIBC_2.23 fts64_read F GLIBC_2.23 fts64_set F GLIBC_2.24 GLIBC_2.24 A GLIBC_2.24 quick_exit F -GLIBC_2.24 recvmsg F -GLIBC_2.24 sendmsg F |