]> sourceware.org Git - glibc.git/commitdiff
network: recvmsg and sendmsg standard compliance (BZ#16919)
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Fri, 18 Mar 2016 20:34:33 +0000 (17:34 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 25 May 2016 20:39:01 +0000 (17:39 -0300)
POSIX specifies that both msghdr::msg_iovlen and msghdr::msg_controllen
to be of size int and socklen_t respectively.  However Linux defines it as
both size_t and for 64-bit it requires some adjustments to make the
functions standard compliance.

This patch fixes it by creating a temporary header and zeroing the pad
fields for 64-bits architecture where size of size_t exceeds the size of
the int.

Also the new recvmsg and sendmsg implementation is only added on libc,
with libpthread only containing a compat symbol.

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

* conform/data/sys/socket.h-data (msghdr.msg_iovlen): Remove xfail-
and change to correct expected type.
(msghdr.msg_controllen): Likewise.
(cmsghdr.cmsg_len): Likewise.
* sysdeps/unix/sysv/linux/bits/socket.h (msghdr.msg_iovlen): Fix
expected POSIX assumption about the size.
(msghdr.msg_controllen): Likewise.
(msghdr.__glibc_reserved1): Likewise.
(msghdr.__glibc_reserved2): Likewise.
(cmsghdr.cmsg_len): Likewise.
(cmsghdr.__glibc_reserved1): Likewise.
* nptl/Makefile (libpthread-routines): Remove ptw-recvmsg and ptw-sendmsg.
Add ptw-oldrecvmsg and ptw-oldsendmsg.
(CFLAGS-sendmsg.c): Remove rule.
(CFLAGS-recvmsg.c): Likewise.
(CFLAGS-oldsendmsg.c): Add rule.
(CFLAGS-oldrecvmsg.c): Likewise.
* sysdeps/unix/sysv/linux/alpha/Versions [libc] (GLIBC_2.24): Add
recvmsg and sendmsg.
* sysdeps/unix/sysv/linux/aarch64/Version [libc] (GLIBC_2.24):
Likewise.
* sysdeps/unix/sysv/linux/arm/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/ia64/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/mips/mips64/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/tile/tilegx/tilegx64/Versions [libc]
(GLIBC_2.24): Likewise.
( sysdeps/unix/sysv/linux/x86_64/64/Versions [libc] (GLIBC_2.24):
Likewise.
* sysdeps/unix/sysv/linux/x84_64/Versions [libc] (GLIBC_2.24):
Likewise.
* sysdeps/unix/sysv/linux/Makefile
[$(subdir) = socket)] (sysdep_headers): Add oldrecvmsg and oldsendmsg.
(CFLAGS-sendmsg.c): Add rule.
(CFLAGS-recvmsg.c): Likewise.
(CFLAGS-oldsendmsg.c): Likewise.
(CFLAGS-oldrecvmsg.c): Likewise.
* sysdeps/unix/sysv/linux/check_native.c (__check_native): Fix msghdr
initialization.
* sysdeps/unix/sysv/linux/check_pf.c (make_request): Likewise.
* sysdeps/unix/sysv/linux/ifaddrs.c (__netlink_request): Likewise.
* sysdeps/unix/sysv/linux/oldrecvmsg.c: New file.
* sysdeps/unix/sysv/linux/oldsendmsg.c: Likewise.
* sysdeps/unix/sysv/linux/recvmsg.c (__libc_recvmsg): Adjust msghdr
iovlen and controllen fields to adjust to POSIX specification.
* sysdeps/unix/sysv/linux/sendmsg.c (__libc_sendmsg): Likewise.
* sysdeps/unix/sysv/linux/aarch64/libc.abilist: New version and
added recvmsg and sendmsg.
* sysdeps/unix/sysv/linux/alpha/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/nios2/libc.abilist: Likewise
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist:
Likewise.
* sysdeps/unix/linux/powerpc/powerpc32/nofpu/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist: Likewise.
* sysdepe/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise.
Likewise.
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/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/sparc/sparc64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist: Likewise.
Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.

63 files changed:
ChangeLog
conform/data/sys/socket.h-data
nptl/Makefile
sysdeps/unix/sysv/linux/Makefile
sysdeps/unix/sysv/linux/aarch64/Versions
sysdeps/unix/sysv/linux/aarch64/libc.abilist
sysdeps/unix/sysv/linux/alpha/Versions
sysdeps/unix/sysv/linux/alpha/libc.abilist
sysdeps/unix/sysv/linux/arm/Versions
sysdeps/unix/sysv/linux/arm/libc.abilist
sysdeps/unix/sysv/linux/bits/socket.h
sysdeps/unix/sysv/linux/check_native.c
sysdeps/unix/sysv/linux/check_pf.c
sysdeps/unix/sysv/linux/hppa/Versions
sysdeps/unix/sysv/linux/hppa/libc.abilist
sysdeps/unix/sysv/linux/i386/Versions
sysdeps/unix/sysv/linux/i386/libc.abilist
sysdeps/unix/sysv/linux/ia64/Versions
sysdeps/unix/sysv/linux/ia64/libc.abilist
sysdeps/unix/sysv/linux/ifaddrs.c
sysdeps/unix/sysv/linux/m68k/Versions
sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
sysdeps/unix/sysv/linux/microblaze/Versions
sysdeps/unix/sysv/linux/microblaze/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/Versions
sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n32/Versions
sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n64/Versions [new file with mode: 0644]
sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
sysdeps/unix/sysv/linux/nios2/Versions
sysdeps/unix/sysv/linux/nios2/libc.abilist
sysdeps/unix/sysv/linux/oldrecvmsg.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/oldsendmsg.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/powerpc/Versions
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions
sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist
sysdeps/unix/sysv/linux/recvmsg.c
sysdeps/unix/sysv/linux/s390/s390-32/Versions
sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-64/Versions
sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
sysdeps/unix/sysv/linux/sendmsg.c
sysdeps/unix/sysv/linux/sh/Versions
sysdeps/unix/sysv/linux/sh/libc.abilist
sysdeps/unix/sysv/linux/sparc/Versions
sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc64/Versions
sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
sysdeps/unix/sysv/linux/tile/Versions
sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist
sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Versions [new file with mode: 0644]
sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist
sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist
sysdeps/unix/sysv/linux/x86_64/64/Versions [new file with mode: 0644]
sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
sysdeps/unix/sysv/linux/x86_64/Versions
sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist

index 88954132f723bda190eecb7855e627399ab4dac4..d16c2b71e6b836940874b97e6d4f13b82d18e36a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,111 @@
 2016-05-25  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
+       * conform/data/sys/socket.h-data (msghdr.msg_iovlen): Remove xfail-
+       and change to correct expected type.
+       (msghdr.msg_controllen): Likewise.
+       (cmsghdr.cmsg_len): Likewise.
+       * sysdeps/unix/sysv/linux/bits/socket.h (msghdr.msg_iovlen): Fix
+       expected POSIX assumption about the size.
+       (msghdr.msg_controllen): Likewise.
+       (msghdr.__glibc_reserved1): Likewise.
+       (msghdr.__glibc_reserved2): Likewise.
+       (cmsghdr.cmsg_len): Likewise.
+       (cmsghdr.__glibc_reserved1): Likewise.
+       * nptl/Makefile (libpthread-routines): Remove ptw-recvmsg and ptw-sendmsg.
+       Add ptw-oldrecvmsg and ptw-oldsendmsg.
+       (CFLAGS-sendmsg.c): Remove rule.
+       (CFLAGS-recvmsg.c): Likewise.
+       (CFLAGS-oldsendmsg.c): Add rule.
+       (CFLAGS-oldrecvmsg.c): Likewise.
+       * sysdeps/unix/sysv/linux/alpha/Versions [libc] (GLIBC_2.24): Add
+       recvmsg and sendmsg.
+       * sysdeps/unix/sysv/linux/aarch64/Version [libc] (GLIBC_2.24):
+       Likewise.
+       * sysdeps/unix/sysv/linux/arm/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/ia64/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/mips/mips64/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/tile/tilegx/tilegx64/Versions [libc]
+       (GLIBC_2.24): Likewise.
+       ( sysdeps/unix/sysv/linux/x86_64/64/Versions [libc] (GLIBC_2.24):
+       Likewise.
+       * sysdeps/unix/sysv/linux/x84_64/Versions [libc] (GLIBC_2.24):
+       Likewise.
+       * sysdeps/unix/sysv/linux/Makefile
+       [$(subdir) = socket)] (sysdep_headers): Add oldrecvmsg and oldsendmsg.
+       (CFLAGS-sendmsg.c): Add rule.
+       (CFLAGS-recvmsg.c): Likewise.
+       (CFLAGS-oldsendmsg.c): Likewise.
+       (CFLAGS-oldrecvmsg.c): Likewise.
+       * sysdeps/unix/sysv/linux/check_native.c (__check_native): Fix msghdr
+       initialization.
+       * sysdeps/unix/sysv/linux/check_pf.c (make_request): Likewise.
+       * sysdeps/unix/sysv/linux/ifaddrs.c (__netlink_request): Likewise.
+       * sysdeps/unix/sysv/linux/oldrecvmsg.c: New file.
+       * sysdeps/unix/sysv/linux/oldsendmsg.c: Likewise.
+       * sysdeps/unix/sysv/linux/recvmsg.c (__libc_recvmsg): Adjust msghdr
+       iovlen and controllen fields to adjust to POSIX specification.
+       * sysdeps/unix/sysv/linux/sendmsg.c (__libc_sendmsg): Likewise.
+       * sysdeps/unix/sysv/linux/aarch64/libc.abilist: New version and
+       added recvmsg and sendmsg.
+       * sysdeps/unix/sysv/linux/alpha/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/nios2/libc.abilist: Likewise
+       * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist:
+       Likewise.
+       * sysdeps/unix/linux/powerpc/powerpc32/nofpu/libc.abilist: Likewise.
+       * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist: Likewise.
+       * sysdepe/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise.
+       Likewise.
+       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/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/sparc/sparc64/libc.abilist: Likewise.
+       * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist: Likewise.
+       * sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist: Likewise.
+       * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist: Likewise.
+       Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.
+
        * sysdeps/unix/sysv/linux/alpha/syscalls.list (recvmsg): Remove
        from auto-generation.
        (sendmsg): Likewise.
index 442d4d288ab47eee2e3ff21247e19951f02345b0..3a6cf7c673823850f60e424524328d98c7318f29 100644 (file)
@@ -22,10 +22,9 @@ type {struct msghdr}
 element {struct msghdr} {void*} msg_name
 element {struct msghdr} socklen_t msg_namelen
 element {struct msghdr} {struct iovec*} msg_iov
-// Bug 16919: wrong type for msg_iovlen and msg_controllen members.
-xfail-element {struct msghdr} int msg_iovlen
+element {struct msghdr} int msg_iovlen
 element {struct msghdr} {void*} msg_control
-xfail-element {struct msghdr} socklen_t msg_controllen
+element {struct msghdr} socklen_t msg_controllen
 element {struct msghdr} int msg_flags
 
 type {struct iovec}
@@ -35,8 +34,7 @@ element {struct iovec} size_t iov_len
 
 type {struct cmsghdr}
 
-// Bug 16919: wrong type for cmsg_len member.
-xfail-element {struct cmsghdr} socklen_t cmsg_len
+element {struct cmsghdr} socklen_t cmsg_len
 element {struct cmsghdr} int cmsg_level
 element {struct cmsghdr} int cmsg_type
 
index dc3ccab991ad53808b61112572ec82bdb4bc8b3c..42409289bdc8d42084fd8e681146292f1028695b 100644 (file)
@@ -109,12 +109,13 @@ libpthread-routines = nptl-init vars events version pt-interp \
                      lll_timedlock_wait lll_timedwait_tid \
                      pt-fork pt-vfork \
                      ptw-write ptw-read ptw-close ptw-fcntl ptw-accept \
-                     ptw-connect ptw-recv ptw-recvfrom ptw-recvmsg ptw-send \
-                     ptw-sendmsg ptw-sendto ptw-fsync ptw-lseek ptw-llseek \
+                     ptw-connect ptw-recv ptw-recvfrom ptw-send \
+                     ptw-sendto ptw-fsync ptw-lseek ptw-llseek \
                      ptw-msync ptw-nanosleep ptw-open ptw-open64 ptw-pause \
                      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 \
                      pt-raise pt-system \
                      flockfile ftrylockfile funlockfile \
                      sigaction \
@@ -204,10 +205,10 @@ CFLAGS-recv.c = -fexceptions -fasynchronous-unwind-tables
 CFLAGS-send.c = -fexceptions -fasynchronous-unwind-tables
 CFLAGS-accept.c = -fexceptions -fasynchronous-unwind-tables
 CFLAGS-sendto.c = -fexceptions -fasynchronous-unwind-tables
-CFLAGS-sendmsg.c = -fexceptions -fasynchronous-unwind-tables
 CFLAGS-connect.c = -fexceptions -fasynchronous-unwind-tables
-CFLAGS-recvmsg.c = -fexceptions -fasynchronous-unwind-tables
 CFLAGS-recvfrom.c = -fexceptions -fasynchronous-unwind-tables
+CFLAGS-oldrecvmsg.c = -fexceptions -fasynchronous-unwind-tables
+CFLAGS-oldrecvfrom.c = -fexceptions -fasynchronous-unwind-tables
 
 CFLAGS-pt-system.c = -fexceptions
 
index 9b4e2e1f7cb93da814f40e5c4e493058b506b506..bbba51bda8e7214f586bb5d1843ec81a8fffd303 100644 (file)
@@ -124,7 +124,11 @@ 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
+sysdep_routines += cmsg_nxthdr oldrecvmsg oldsendmsg
+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
 endif
 
 ifeq ($(subdir),sunrpc)
index 9bd87fe2d0b656581fc4d959596bbc2eaa1536e6..ae3742cc1ea474dfccf3728cf4c115181d2dfd1e 100644 (file)
@@ -5,6 +5,10 @@ ld {
   }
 }
 libc {
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
+
   GLIBC_PRIVATE {
     __vdso_clock_gettime;
     __vdso_clock_getres;
index 5799239a0020a1a69270baca4fad7c15c34a9970..c3f2346ad15fc4d0261802eff11371e74e489867 100644 (file)
@@ -2087,3 +2087,6 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+GLIBC_2.24 recvmsg F
+GLIBC_2.24 sendmsg F
index 29b82f999b67cb0cc60026bd5856e10fdca58382..31abb2206eaac3194ec93b058f2a07deba113199 100644 (file)
@@ -85,6 +85,9 @@ libc {
     #errlist-compat    140
     _sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
   GLIBC_PRIVATE {
     __libc_alpha_cache_shape;
   }
index 0fa4ee9beaad8b38f30d2b0b16e03a63de4fba06..78222422583dd6f7bef123fa73c99dd800636e69 100644 (file)
@@ -1998,6 +1998,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index 5ff2225f249046bed4ef2a0d39c135eaae467f56..7e5ba5345564e470a7c2ca8bfad20596f0e53331 100644 (file)
@@ -7,6 +7,9 @@ libc {
   GLIBC_2.11 {
     fallocate64;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
   GLIBC_PRIVATE {
     # A copy of sigaction lives in libpthread, and needs these.
     __default_sa_restorer; __default_rt_sa_restorer;
index db9fa350f09e22da8af03bfa431f791000726d3a..2b2f9f05a9d7bfcb09b512c3cd09f69fd313349b 100644 (file)
@@ -88,6 +88,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index 2eb95f7e20b8b68685ac2363b4b2db72cab8d98a..ef4629a743773eba8e044812be9810edf178a483 100644 (file)
@@ -27,6 +27,8 @@
 #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
@@ -250,13 +252,32 @@ struct msghdr
     socklen_t msg_namelen;     /* Length of address data.  */
 
     struct iovec *msg_iov;     /* Vector of data to send/receive into.  */
-    size_t msg_iovlen;         /* Number of elements in the vector.  */
+#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
 
     void *msg_control;         /* Ancillary data (eg BSD filedesc passing). */
-    size_t msg_controllen;     /* Ancillary data buffer length.
-                                  !! The type should be socklen_t but the
-                                  definition of the kernel is incompatible
-                                  with this.  */
+#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
 
     int msg_flags;             /* Flags on received message.  */
   };
@@ -264,11 +285,19 @@ struct msghdr
 /* Structure used for storage of ancillary data object information.  */
 struct cmsghdr
   {
-    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.  */
+#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
     int cmsg_level;            /* Originating protocol.  */
     int cmsg_type;             /* Protocol specific type.  */
 #if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
index b3cbbe369db45844f5828f89c5714b41e7f2a961..a8e447ed414a3d36325eed70076a1aa7debaf609 100644 (file)
@@ -111,10 +111,13 @@ __check_native (uint32_t a1_index, int *a1_native,
     {
       struct msghdr msg =
        {
-         (void *) &nladdr, sizeof (nladdr),
-         &iov, 1,
-         NULL, 0,
-         0
+         .msg_name = (void *) &nladdr,
+         .msg_namelen =  sizeof (nladdr),
+         .msg_iov = &iov,
+         .msg_iovlen = 1,
+         .msg_control = NULL,
+         .msg_controllen = 0,
+         .msg_flags = 0
        };
 
       ssize_t read_len = TEMP_FAILURE_RETRY (__recvmsg (fd, &msg, 0));
index d55953a64d8a5b9ca8b79a1959ec79626e8d52fc..89e9031dad945103d1758958ae93842f3006ed16 100644 (file)
@@ -158,10 +158,13 @@ make_request (int fd, pid_t pid)
     {
       struct msghdr msg =
        {
-         (void *) &nladdr, sizeof (nladdr),
-         &iov, 1,
-         NULL, 0,
-         0
+         .msg_name = (void *) &nladdr,
+         .msg_namelen =  sizeof (nladdr),
+         .msg_iov = &iov,
+         .msg_iovlen = 1,
+         .msg_control = NULL,
+         .msg_controllen = 0,
+         .msg_flags = 0
        };
 
       ssize_t read_len = TEMP_FAILURE_RETRY (__recvmsg (fd, &msg, 0));
index b5098b21710d1867fdd006d730a6be23ec2f9641..895696ebf8e90b0e96ca622d041bd256c1996782 100644 (file)
@@ -35,4 +35,7 @@ libc {
   GLIBC_2.19 {
     fanotify_mark;
   }
+  GLIBC_2.24 {
+    recvms; sendmsg;
+  }
 }
index 1d30644651f2fa0c443886893a3218af7b9e4f7f..84e84311a66a748f31e2a97b5c455ef9c565c6d0 100644 (file)
@@ -1852,6 +1852,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index f3544acb75d23c885bd751f57aeff753272ad9c4..55d12777ef217e9324ab3cd3bdbaad3dd60d43fc 100644 (file)
@@ -45,6 +45,9 @@ libc {
     # f*
     fallocate64;
   }
+  GLIBC_2.24 {
+    recvms; sendmsg;
+  }
   GLIBC_PRIVATE {
     __modify_ldt;
   }
index 8f3502dfdb9514cdaf305379652eef2429d28aa9..0229cd6d9bfa7e8090de895bd30ce4c7897d6ffd 100644 (file)
@@ -2010,6 +2010,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index b38d6ef62e186d9eb7898b2bf447e9df7f34adc1..116f4e850397ba3e58b9e576bd2d3d460bf23e44 100644 (file)
@@ -22,6 +22,9 @@ libc {
   GLIBC_2.2.6 {
     getunwind;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
 }
 libpthread {
   GLIBC_2.3.3 {
index 921ec55eeb034af16cfadf4244d6b0faa567f4ae..f5739b47da27e6a609074ae4ef5ba65333da61c8 100644 (file)
@@ -1874,6 +1874,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index ca38d1a243c315e2dcf181df438e7c87b9a90866..54f1124974bea0a69bc120f5c59e2ae17e8b65d0 100644 (file)
@@ -161,10 +161,13 @@ __netlink_request (struct netlink_handle *h, int type)
     {
       struct msghdr msg =
        {
-         (void *) &nladdr, sizeof (nladdr),
-         &iov, 1,
-         NULL, 0,
-         0
+         .msg_name = (void *) &nladdr,
+         .msg_namelen =  sizeof (nladdr),
+         .msg_iov = &iov,
+         .msg_iovlen = 1,
+         .msg_control = NULL,
+         .msg_controllen = 0,
+         .msg_flags = 0
        };
 
       read_len = TEMP_FAILURE_RETRY (__recvmsg (h->fd, &msg, 0));
index 7ecc96ea972405e272a5ea12e49392f42949ff4f..2dc2e83d0797e83ddb930d4e7572b7559d39e214 100644 (file)
@@ -40,6 +40,9 @@ libc {
   GLIBC_2.12 {
     __m68k_read_tp;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
   GLIBC_PRIVATE {
     __vdso_atomic_cmpxchg_32; __vdso_atomic_barrier;
   }
index 019095b4c2457eeb41d80dd27402bd36818c0df3..3a498cb36efaa0e00fb0dba0693e246756df055f 100644 (file)
@@ -89,6 +89,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index a999a4812e9d73a92a6c180c9f74b48fb0c44d05..948b0506babc4aedc07a18592dfb3fe6992b2aeb 100644 (file)
@@ -1966,6 +1966,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index aa48a3c1551bf4aa0d79c825524958cbcc3c5fde..2e93b8a43af08fad8dd4b25a23829b0a9fae3596 100644 (file)
@@ -2,4 +2,7 @@ libc {
   GLIBC_2.18 {
     fallocate64;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
 }
index 0a08bba5924ec8e4273c889f6c45bc87cd476d67..d7ba0bed17b8e040463a4b86d6f9e297afec94bc 100644 (file)
@@ -2087,3 +2087,6 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+GLIBC_2.24 recvmsg F
+GLIBC_2.24 sendmsg F
index 9621fb5cae80dc4fc7c8ad244aea5891651938ad..c4f38d8faf911ef1c662c28cb43e7c8a17490f63 100644 (file)
@@ -3,4 +3,7 @@ libc {
     getrlimit64;
     setrlimit64;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
 }
index 2ab9e944a32e1ee32c60e5e6b75332f499478e3a..87bb49b3b1b22686725477986142253e9504d781 100644 (file)
@@ -1941,6 +1941,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index b9b4b74bfc26f8ca38275c34e1ef9f9ee97c322d..1a415abad6fa0807e4f4fcb7093daed3ad862757 100644 (file)
@@ -1939,6 +1939,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index 9621fb5cae80dc4fc7c8ad244aea5891651938ad..c4f38d8faf911ef1c662c28cb43e7c8a17490f63 100644 (file)
@@ -3,4 +3,7 @@ libc {
     getrlimit64;
     setrlimit64;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
 }
index 14e12364ef961d81ffe2e0ce977d86558e1c0231..949761b2002cc8e791b6c18fecd9634b3e92fd75 100644 (file)
@@ -1937,6 +1937,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
new file mode 100644 (file)
index 0000000..517d79a
--- /dev/null
@@ -0,0 +1,5 @@
+libc {
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
+}
index 53e0c9a350ac0b055b230f3b36275d350250706d..6722f90fb0f95634336873ccd2555f7a1e243f83 100644 (file)
@@ -1932,6 +1932,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index e42c85f57594c334c9b77c83b6ba99407df71b37..93458f5951b7c9075a636b1cc31b451470229ee2 100644 (file)
@@ -3,4 +3,7 @@ libc {
     _flush_cache;
     cacheflush;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
 }
index dff1ee95660b8e470424cb6e3b120bdc4c95c71e..75ef1ab3436c056a8ebaf254f8a889f11e443db6 100644 (file)
@@ -2128,3 +2128,6 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+GLIBC_2.24 recvmsg F
+GLIBC_2.24 sendmsg F
diff --git a/sysdeps/unix/sysv/linux/oldrecvmsg.c b/sysdeps/unix/sysv/linux/oldrecvmsg.c
new file mode 100644 (file)
index 0000000..01c596e
--- /dev/null
@@ -0,0 +1,40 @@
+/* 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/oldsendmsg.c b/sysdeps/unix/sysv/linux/oldsendmsg.c
new file mode 100644 (file)
index 0000000..a96790a
--- /dev/null
@@ -0,0 +1,40 @@
+/* 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
index 8ebeea15a1b453408a150799628d074f5c856b2a..ab0db5713758c8a3cd27c70aded936353cbdee21 100644 (file)
@@ -5,6 +5,9 @@ ld {
   }
 }
 libc {
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
   GLIBC_PRIVATE {
     __vdso_get_tbfreq;
     __vdso_clock_gettime;
index 6861846109f57cd9380f711f77dd3e0be548e386..5a0890e0e45506e064b2387c8b7548b57634e6e4 100644 (file)
@@ -1970,6 +1970,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index fd611aa9b4232b400c1f0d1c616f9be07dc98313..adbe736e8775a6aa8808217ca58fbeb7f689a5ac 100644 (file)
@@ -1975,6 +1975,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index a8e88b89db8763b08c41a73c52b30eced53396a5..53e5527cb3b98f7ad74c9884d50f01a8b4d0627e 100644 (file)
@@ -22,6 +22,9 @@ libc {
   GLIBC_2.17 {
     __ppc_get_timebase_freq;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
 }
 
 librt {
index a97bd43b8fa05fc3fa9e0c6c40ab6b98fbca30ab..7839b5a5dc847ad17cb9f977840c4f11e5a56242 100644 (file)
@@ -2175,3 +2175,6 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+GLIBC_2.24 recvmsg F
+GLIBC_2.24 sendmsg F
index 00772cb63007373f9e3cccc37f29ce733da81a89..20d5a196548f419c0612f27e8e518a1930d9dd7f 100644 (file)
@@ -89,6 +89,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+GLIBC_2.24 recvmsg 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
index 4caf22e8bfb478f025dffbac7a3b5cc494802752..25a319358b9547976704cde91f44b93d6cfea696 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
-#include <signal.h>
 #include <sys/socket.h>
-
 #include <sysdep-cancel.h>
 #include <socketcall.h>
-#include <kernel-features.h>
-#include <sys/syscall.h>
+#include <shlib-compat.h>
 
 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
-  return SYSCALL_CANCEL (recvmsg, fd, msg, flags);
+  ret = SYSCALL_CANCEL (recvmsg, fd, msg, flags);
 #else
-  return SOCKETCALL_CANCEL (recvmsg, fd, msg, flags);
+  ret = SOCKETCALL_CANCEL (recvmsg, fd, msg, flags);
 #endif
+
+#if __WORDSIZE == 64
+  if (orig != NULL)
+    *orig = hdr;
+#endif
+
+  return ret;
 }
-weak_alias (__libc_recvmsg, recvmsg)
 weak_alias (__libc_recvmsg, __recvmsg)
+versioned_symbol (libc, __libc_recvmsg, recvmsg, GLIBC_2_24);
index 1c120e8cbeabd8d13bb799252b799a799812d8de..afcc3fee4e0a686290a6624eb5848d46a5fb63bc 100644 (file)
@@ -49,6 +49,9 @@ libc {
   GLIBC_2.11 {
     fallocate64;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
 }
 
 libutil {
index 05cb85e5c1d31d10b24f92a5c7483c5f3d7b49b5..03983dfc295c45b47502306b9a96ea72f1a021f3 100644 (file)
@@ -1970,6 +1970,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index 3f4d96042158838849d4b2167944f31e38a7cab7..fde5aeee482974e0e0bad3827f1e74193e93aad8 100644 (file)
@@ -4,6 +4,9 @@ libc {
     __register_frame; __register_frame_table; __deregister_frame;
     __frame_state_for; __register_frame_info_table;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
 }
 
 librt {
index 1af185f4742565dda2415bd3c5fb8bd46d1cb45d..5892fcdae9dca35bc3e79cad94d9fd498e2911f3 100644 (file)
@@ -1871,6 +1871,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index 5b2741ace2b72fdc23843072c8d0e0b15ee87892..a5ef238c4a2e2c18638b26b50b1381b66badb35e 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
-#include <signal.h>
 #include <sys/socket.h>
-
 #include <sysdep-cancel.h>
 #include <socketcall.h>
-#include <kernel-features.h>
-#include <sys/syscall.h>
+#include <shlib-compat.h>
 
 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
   return SYSCALL_CANCEL (sendmsg, fd, msg, flags);
 #else
   return SOCKETCALL_CANCEL (sendmsg, fd, msg, flags);
 #endif
 }
-weak_alias (__libc_sendmsg, sendmsg)
 weak_alias (__libc_sendmsg, __sendmsg)
+versioned_symbol (libc, __libc_sendmsg, sendmsg, GLIBC_2_24);
index e0938c4165888a300dfac51f415944b13521009e..ae5a00e640fd1d48477d953c81d0538c615712c8 100644 (file)
@@ -30,4 +30,7 @@ libc {
   GLIBC_2.16 {
     fanotify_mark;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
 }
index e1286921e5539d13eedcc7d1b61428617b242a0c..a2d85e68c79579916cf7b1b360a666846d5f0dfe 100644 (file)
@@ -1856,6 +1856,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index 4dc1cd720b23f523ed9277475fab4935bdcaf2c3..adbdec508a709c36d84112f2b6be054fb638e90b 100644 (file)
@@ -29,6 +29,9 @@ libc {
 
     __getshmlba;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
 }
 
 libpthread {
index eb141132cd99a21de6220aaca98b5f4e3674c336..c51e79066f6eaf027b1b780b104cd4da7837ed4f 100644 (file)
@@ -1962,6 +1962,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index fbea1bb2efd06bf7c25cc75a74ed9c3423528047..f950070b4d8cda468c47ebf37386abf5dbce1973 100644 (file)
@@ -8,6 +8,9 @@ libc {
     # w*
     wordexp;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
 }
 
 librt {
index 91b97ef1c8e0f836d7f2a9d880d4840ee1866709..015a2f10ac631ad3fe02b2a57c2e04dc0d61a69e 100644 (file)
@@ -1900,6 +1900,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index 13da68fa791535f5a9b5a8f21bf0bde348de0fd2..a68e181940f24ae89f56ba49404f3a033dd9c4d1 100644 (file)
@@ -11,6 +11,9 @@ libc {
     fallocate64;
     set_dataplane;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
   GLIBC_PRIVATE {
     __syscall_error;
     __vdso_clock_gettime;
index ffcc4a0a2b4a8a2a275905ff7b14d9858a70d38d..cd48be13a7598732e06d7c064d2aa217846eb0cc 100644 (file)
@@ -2094,3 +2094,6 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
new file mode 100644 (file)
index 0000000..517d79a
--- /dev/null
@@ -0,0 +1,5 @@
+libc {
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
+}
index a66e8ec877bb08d2957ed6361191b326bb46cda8..1e160bde2c54830639387ab71b644e085af63599 100644 (file)
@@ -2094,3 +2094,6 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+GLIBC_2.24 recvmsg F
+GLIBC_2.24 sendmsg F
index ffcc4a0a2b4a8a2a275905ff7b14d9858a70d38d..cd48be13a7598732e06d7c064d2aa217846eb0cc 100644 (file)
@@ -2094,3 +2094,6 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
new file mode 100644 (file)
index 0000000..517d79a
--- /dev/null
@@ -0,0 +1,5 @@
+libc {
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
+}
index c6e3cd42572d7e2a6831e74213ea20f8bb918ccb..175339e7cddbb77034e5cfbefd7e49456fc82d63 100644 (file)
@@ -1851,6 +1851,9 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+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
index 2a7ed280fd707cdf2514fed921c673fafe8a9d0a..bbef7e08e53ec0b0a912e86cf5afb06aade0dfef 100644 (file)
@@ -6,6 +6,9 @@ libc {
 
     modify_ldt;
   }
+  GLIBC_2.24 {
+    recvmsg; sendmsg;
+  }
 }
 
 librt {
index 04dc8e4520d5356c4c49f9ffca8961eebac27220..4f52e2e6502ac9399436fcca10d66fcc33ae966c 100644 (file)
@@ -2094,3 +2094,6 @@ GLIBC_2.23 fts64_close F
 GLIBC_2.23 fts64_open F
 GLIBC_2.23 fts64_read F
 GLIBC_2.23 fts64_set F
+GLIBC_2.24 GLIBC_2.24 A
+GLIBC_2.24 recvmsg F
+GLIBC_2.24 sendmsg F
This page took 0.371334 seconds and 5 git commands to generate.