diff mbox

Revert {send,sendm,recv,recvm}msg conformance changes

Message ID 1465506573-21409-1-git-send-email-adhemerval.zanella@linaro.org
State Accepted
Commit 78880cc185dc521855a58001a28e3059722d8e85
Headers show

Commit Message

Adhemerval Zanella Netto June 9, 2016, 9:09 p.m. UTC
After some discussion in libc-alpha about this POSIX compliance fix, I see
that GLIBC should indeed revert back to previous definition of msghdr and
cmsghdr and implementation of sendmsg, recvmsg, sendmmsg, recvmmsg due some
reasons:

 * The possible issue where the syscalls wrapper add the compatibility
   layer is quite limited in scope and range.  And kernel current
   also add some limits to the values on the internal msghdr and
   cmsghdr fields:

     - msghdr::msg_iovlen larger than UIO_MAXIOV (1024) returns
       EMSGSIZE.
     - msghdr::msg_controllen larger than INT_MAX returns ENOBUFS.

 * There is a small performance hit for recvmsg/sendmsg/recmmsg which
   is neglectable, but it is a big hit for sendmmsg since now instead
   of calling the syscall for the packed structure, GLIBC is calling
   multiple sendmsg.  This defeat the very existence of the syscall.

 * It currently breaks libsanitizer build on GCC [1] (I fixed on compiler-rt).
   However the fix is incomplete because it does add any runtime check
   since libsanitizer currently does not have any facility to intercept
   symbols with multiple version [2].

   This, along with incorret dlsym/dlvsym return for versioned symbol due
   another bug [3], makes hard to interpose versioned symbols.

   Also, current approach of fixing GCC PR#71445 leads to half-baked
   solutions without versioned symbol interposing.

This patch basically reverts commits 2f0dc39029ae08, 222c2d7f4357d66,
af7f7c7ec8dea1.  I decided to not revert abf29edd4a3918 (Adjust
kernel-features.h defaults for recvmsg and sendmsg) mainly because it
does not really address the POSIX compliance original issue and also
adds some cleanups.

Tested on x86, i386, s390, s390x, aarch64, and powerpc64le.

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71445
[2] https://github.com/google/sanitizers/issues/628
[3] https://sourceware.org/bugzilla/show_bug.cgi?id=14932


	* 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.
---
 ChangeLog                                          | 102 +++++++++++++++++++++
 conform/data/sys/socket.h-data                     |   8 +-
 nptl/Makefile                                      |   6 +-
 sysdeps/unix/sysv/linux/Makefile                   |   9 +-
 sysdeps/unix/sysv/linux/aarch64/Versions           |   4 -
 sysdeps/unix/sysv/linux/aarch64/libc.abilist       |   4 -
 sysdeps/unix/sysv/linux/alpha/Versions             |   3 -
 sysdeps/unix/sysv/linux/alpha/libc.abilist         |   4 -
 sysdeps/unix/sysv/linux/arm/libc.abilist           |   2 -
 sysdeps/unix/sysv/linux/bits/socket.h              |  49 ++--------
 sysdeps/unix/sysv/linux/hppa/Versions              |   3 -
 sysdeps/unix/sysv/linux/hppa/libc.abilist          |   2 -
 sysdeps/unix/sysv/linux/i386/Versions              |   3 -
 sysdeps/unix/sysv/linux/i386/libc.abilist          |   2 -
 sysdeps/unix/sysv/linux/ia64/libc.abilist          |   4 -
 sysdeps/unix/sysv/linux/m68k/Versions              |   3 -
 sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist |   2 -
 sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist   |   2 -
 sysdeps/unix/sysv/linux/microblaze/Versions        |   3 -
 sysdeps/unix/sysv/linux/microblaze/libc.abilist    |   2 -
 sysdeps/unix/sysv/linux/mips/mips32/Versions       |   3 -
 .../unix/sysv/linux/mips/mips32/fpu/libc.abilist   |   2 -
 .../unix/sysv/linux/mips/mips32/nofpu/libc.abilist |   2 -
 sysdeps/unix/sysv/linux/mips/mips64/n32/Versions   |   3 -
 .../unix/sysv/linux/mips/mips64/n32/libc.abilist   |   2 -
 sysdeps/unix/sysv/linux/mips/mips64/n64/Versions   |   5 -
 .../unix/sysv/linux/mips/mips64/n64/libc.abilist   |   4 -
 sysdeps/unix/sysv/linux/nios2/Versions             |   3 -
 sysdeps/unix/sysv/linux/nios2/libc.abilist         |   2 -
 sysdeps/unix/sysv/linux/oldrecvmmsg.c              |  87 ------------------
 sysdeps/unix/sysv/linux/oldrecvmsg.c               |  40 --------
 sysdeps/unix/sysv/linux/oldsendmmsg.c              |  76 ---------------
 sysdeps/unix/sysv/linux/oldsendmsg.c               |  40 --------
 sysdeps/unix/sysv/linux/powerpc/Versions           |   3 -
 .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist  |   2 -
 .../linux/powerpc/powerpc32/nofpu/libc.abilist     |   2 -
 sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions |   3 -
 .../sysv/linux/powerpc/powerpc64/libc-le.abilist   |   4 -
 .../unix/sysv/linux/powerpc/powerpc64/libc.abilist |   4 -
 sysdeps/unix/sysv/linux/recvmmsg.c                 |  61 +++++-------
 sysdeps/unix/sysv/linux/recvmsg.c                  |  39 ++------
 sysdeps/unix/sysv/linux/s390/s390-32/Versions      |   3 -
 sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist  |   2 -
 sysdeps/unix/sysv/linux/s390/s390-64/Versions      |   3 -
 sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist  |   4 -
 sysdeps/unix/sysv/linux/sendmmsg.c                 |  72 +++++----------
 sysdeps/unix/sysv/linux/sendmsg.c                  |  26 ++----
 sysdeps/unix/sysv/linux/sh/Versions                |   3 -
 sysdeps/unix/sysv/linux/sh/libc.abilist            |   2 -
 sysdeps/unix/sysv/linux/sparc/Versions             |   3 -
 sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist |   2 -
 sysdeps/unix/sysv/linux/sparc/sparc64/Versions     |   3 -
 sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist |   4 -
 sysdeps/unix/sysv/linux/tile/Versions              |   3 -
 .../sysv/linux/tile/tilegx/tilegx32/libc.abilist   |   2 -
 .../unix/sysv/linux/tile/tilegx/tilegx64/Versions  |   5 -
 .../sysv/linux/tile/tilegx/tilegx64/libc.abilist   |   4 -
 sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist  |   2 -
 sysdeps/unix/sysv/linux/x86_64/64/Versions         |   5 -
 sysdeps/unix/sysv/linux/x86_64/64/libc.abilist     |   4 -
 sysdeps/unix/sysv/linux/x86_64/Versions            |   3 -
 sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist    |   2 -
 62 files changed, 180 insertions(+), 581 deletions(-)
 delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/Versions
 delete mode 100644 sysdeps/unix/sysv/linux/oldrecvmmsg.c
 delete mode 100644 sysdeps/unix/sysv/linux/oldrecvmsg.c
 delete mode 100644 sysdeps/unix/sysv/linux/oldsendmmsg.c
 delete mode 100644 sysdeps/unix/sysv/linux/oldsendmsg.c
 delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Versions
 delete mode 100644 sysdeps/unix/sysv/linux/x86_64/64/Versions

-- 
2.7.4

Comments

Adhemerval Zanella Netto June 10, 2016, 2:32 p.m. UTC | #1
On 10/06/2016 11:13, Carlos O'Donell wrote:
> On 06/09/2016 05:09 PM, Adhemerval Zanella wrote:

>> After some discussion in libc-alpha about this POSIX compliance fix, I see

>> that GLIBC should indeed revert back to previous definition of msghdr and

>> cmsghdr and implementation of sendmsg, recvmsg, sendmmsg, recvmmsg due some

>> reasons:

>>

>>  * The possible issue where the syscalls wrapper add the compatibility

>>    layer is quite limited in scope and range.  And kernel current

>>    also add some limits to the values on the internal msghdr and

>>    cmsghdr fields:

>>

>>      - msghdr::msg_iovlen larger than UIO_MAXIOV (1024) returns

>>        EMSGSIZE.

>>      - msghdr::msg_controllen larger than INT_MAX returns ENOBUFS.

>>

>>  * There is a small performance hit for recvmsg/sendmsg/recmmsg which

>>    is neglectable, but it is a big hit for sendmmsg since now instead

>>    of calling the syscall for the packed structure, GLIBC is calling

>>    multiple sendmsg.  This defeat the very existence of the syscall.

>>

>>  * It currently breaks libsanitizer build on GCC [1] (I fixed on compiler-rt).

>>    However the fix is incomplete because it does add any runtime check

>>    since libsanitizer currently does not have any facility to intercept

>>    symbols with multiple version [2].

>>

>>    This, along with incorret dlsym/dlvsym return for versioned symbol due

>>    another bug [3], makes hard to interpose versioned symbols.

>>

>>    Also, current approach of fixing GCC PR#71445 leads to half-baked

>>    solutions without versioned symbol interposing.

>>

>> This patch basically reverts commits 2f0dc39029ae08, 222c2d7f4357d66,

>> af7f7c7ec8dea1.  I decided to not revert abf29edd4a3918 (Adjust

>> kernel-features.h defaults for recvmsg and sendmsg) mainly because it

>> does not really address the POSIX compliance original issue and also

>> adds some cleanups.

>>

>> Tested on x86, i386, s390, s390x, aarch64, and powerpc64le.

>>

>> [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71445

>> [2] https://github.com/google/sanitizers/issues/628

>> [3] https://sourceware.org/bugzilla/show_bug.cgi?id=14932

> 

> Thank you for all the work you put into these patches.

> 

> While we ended up reverting them, I am wont to say "experience is knowing

> what not to do" and it is hard won.

> 

> While I am in favour of these patches, the subsequent problems make them

> difficult to justify until such problems are fixed.

> 

> Several of the problems are not specific to your changes either, they are

> general architectural problems with the tooling that will need to be fixed

> at some point as we version more and more of the implementation.

> 


I will push this soon and also reopen BZ#16919 with some notes why it was
reverted.
diff mbox

Patch

diff --git a/conform/data/sys/socket.h-data b/conform/data/sys/socket.h-data
index 3a6cf7c..442d4d2 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 eaa6f7f..a159b58 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 c57575f..35e1ed4 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 ae3742c..9bd87fe 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 3878891..9cdb623 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 31abb22..29b82f9 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 5ce7e10..f3f3c70 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 9f8eecc..a93803d 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 ef4629a..2eb95f7 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 f0af95e..b5098b2 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 421b6fe..58ed133 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 64d503b..f3544ac 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 b7fc26c..61cbae0 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 e0df2e3..d40d264 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 2dc2e83..7ecc96e 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 f80cdfe..64432ae 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 9132c26..8086c38 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 2e93b8a..aa48a3c 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 9443927..8c4c3bb 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 c4f38d8..9621fb5 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 69386b2..db014ed 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 62ba3f9..33ac881 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 c4f38d8..9621fb5 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 49b2ad7..b8b2c0e 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 517d79a..0000000
--- 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 445db92..0741301 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 93458f5..e42c85f 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 d854b6d..fa04825 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 4bf849b..0000000
--- 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 01c596e..0000000
--- 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 e40c311..0000000
--- 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 a96790a..0000000
--- 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 ab0db57..8ebeea1 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 bcb4bd1..3d633c0 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 01f4957..a6b164b 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 53e5527..a8e88b8 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 8348670..7200b76 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 3de5d61..de62ecb 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 08b89ba..bf18260 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 25a3193..14ba67e 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 afcc3fe..1c120e8 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 761f340..8da0bc0 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 fde5aee..3f4d960 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 b7f5371..59066a9 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 9b19343..6e0d46b 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 a5ef238..e10ab60 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 ae5a00e..e0938c4 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 fb58c06..01ca9e6 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 adbdec5..4dc1cd7 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 01260e2..245c1c6 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 f950070..fbea1bb 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 8884d4e..4478d13 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 a68e181..13da68f 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 81eea08..c1a2613 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 517d79a..0000000
--- 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 9ce9b57..35fbf8a 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 81eea08..c1a2613 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 517d79a..0000000
--- 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 03549b1..c1054ce 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 bbef7e0..2a7ed28 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 86dab3f..2fd6d60 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