From patchwork Wed Mar 23 14:30:59 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 64226 Delivered-To: patch@linaro.org Received: by 10.112.199.169 with SMTP id jl9csp66716lbc; Wed, 23 Mar 2016 07:32:01 -0700 (PDT) X-Received: by 10.98.15.145 with SMTP id 17mr4699463pfp.19.1458743521143; Wed, 23 Mar 2016 07:32:01 -0700 (PDT) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id lf12si4674884pab.207.2016.03.23.07.32.00 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 23 Mar 2016 07:32:01 -0700 (PDT) Received-SPF: pass (google.com: domain of libc-alpha-return-68317-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org; spf=pass (google.com: domain of libc-alpha-return-68317-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=libc-alpha-return-68317-patch=linaro.org@sourceware.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id:in-reply-to :references; q=dns; s=default; b=shH3Kz/hSsOSxPxlqj7jk6RsPy2ehkK psQ7kq5oGSKgTEWdayu89U+GoEiYGr2M+X1uTf6xn6WERqVexJ3a5+CKrAFWO22v oqIZcI5spm0O0tyRh+ui7vOepvBRiOBq7XwxkYhJSoCVL6rmynC7fIgmNhPzml9p PhuMerpKxiJk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id:in-reply-to :references; s=default; bh=B789QqyFnhOBxZwcj2MTrfKltOM=; b=lcq1N UYaIFxEg/Upo28hmB3T57MrZjDTCGZJcDgLvV9U2pROrqhJNvHF8pZBv9SItO5hU QQMzmbehUZBD5nOZWeh5Nlxs4wOfUsYGJRHRvg9zJYA7DbF5ivm90OjUDEzZblHn okRIqctW6yRFhVsbE8zbwCiBx6TY+dSzNo/mkg= Received: (qmail 62582 invoked by alias); 23 Mar 2016 14:31:24 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 62515 invoked by uid 89); 23 Mar 2016 14:31:23 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=278, socket, 8, 6, 2076 X-HELO: mail-yw0-f171.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=DUX6mJAArqDQQdGkYWa6A87HudUira46NuNjSpxApq4=; b=kkDCiYUx+T1bfRxwzvpkTGPxWp0qM2j84sZYyp9kfNZOA7nt/zLXwuwvHu0Tx7RHW0 cC9kbayTEe5PhDJcZEJL8DLM51WXygbdbDljkh0wj7rQf1mfep8yDJWqGKKP2cDED6Oa y0oKi0rOlClGIvv0Vfz5x77pmxbIMq6a17oKYl2Ljt52kRK3SkMZ3g/RpQUdpEJSif9Z oA3hZD2Cojr5yInuQzpcQp6TWhUB/EmBPg8VutNMUUJ9aKF0mP7JY4TNWlW2Te0m1DnE b3qIT+okr0iYfbnvRzkaws0yd7RSbrNFHudd/hkqsf37/O2hiaeb1JAZ6BAsK5JH8gYe oh8A== X-Gm-Message-State: AD7BkJJaLoJUQjaRqJwPk0BGWhd9NDfumiJumjhu1fEx2TvPxNAh997WjBRTT7gj7d9xPeGS X-Received: by 10.13.202.74 with SMTP id m71mr1750633ywd.316.1458743469678; Wed, 23 Mar 2016 07:31:09 -0700 (PDT) From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH 2/3] network: recvmsg and sendmsg standard compliance (BZ#16919) Date: Wed, 23 Mar 2016 11:30:59 -0300 Message-Id: <1458743460-26767-3-git-send-email-adhemerval.zanella@linaro.org> In-Reply-To: <1458743460-26767-1-git-send-email-adhemerval.zanella@linaro.org> References: <1458743460-26767-1-git-send-email-adhemerval.zanella@linaro.org> 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 for such architectures the old recvmsg and sendmsg is exported as a compatibility version. 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. * nptl/Makefile (libpthread-routines): Add ptw-oldrecvmsg and ptw-oldsendmsg. * sysdeps/unix/sysv/linux/aarch64/Version [libc] (GLIBC_2.24): Add recvmsg and sendmsg. [libpthread] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/alpha/Versions [libc] (GLIBC_2.24): Likewise. [libpthread] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/ia64/Versions [libc] (GLIBC_2.24): Likewise. [libpthread] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/mips/mips64/Versions [libc] (GLIBC_2.24): Likewise. [libpthread] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions [libc] (GLIBC_2.24): Likewise. [libpthread] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/Versions [libc] (GLIBC_2.24): Likewise. [libpthread] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/Versions [libc] (GLIBC_2.24): Likewise. [libpthread] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Versions [libc] (GLIBC_2.24): Likewise. [libpthread] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/x84_64/Versions [libc] (GLIBC_2.24): Likewise. [libpthread] (GLIBC_2.24): Likewise. * sysdeps/unix/sysv/linux/Makefile [$(subdir) = socket)] (sysdep_headers): Add oldrecvmsg and oldsendmsg. * 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/aarch64/libpthread.abilist: Likewise. * sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/alpha/libpthread.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libpthread.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n32/libpthread.abilis: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist: Likewise. * sysdepe/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libpthread.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist: Likewise. --- ChangeLog | 77 +++++++ conform/data/sys/socket.h-data | 8 +- nptl/Makefile | 1 + sysdeps/unix/sysv/linux/Makefile | 2 +- sysdeps/unix/sysv/linux/aarch64/Versions | 9 + sysdeps/unix/sysv/linux/aarch64/libc.abilist | 3 + sysdeps/unix/sysv/linux/aarch64/libpthread.abilist | 3 + sysdeps/unix/sysv/linux/alpha/Versions | 6 + sysdeps/unix/sysv/linux/alpha/libc.abilist | 3 + sysdeps/unix/sysv/linux/alpha/libpthread.abilist | 3 + sysdeps/unix/sysv/linux/bits/socket.h | 45 +++- sysdeps/unix/sysv/linux/check_native.c | 11 +- sysdeps/unix/sysv/linux/check_pf.c | 11 +- sysdeps/unix/sysv/linux/ia64/Versions | 6 + sysdeps/unix/sysv/linux/ia64/libc.abilist | 3 + sysdeps/unix/sysv/linux/ia64/libpthread.abilist | 3 + sysdeps/unix/sysv/linux/ifaddrs.c | 11 +- .../unix/sysv/linux/mips/mips64/libpthread.abilist | 3 + .../sysv/linux/mips/mips64/n32/libpthread.abilist | 256 +++++++++++++++++++++ sysdeps/unix/sysv/linux/mips/mips64/n64/Versions | 10 + .../unix/sysv/linux/mips/mips64/n64/libc.abilist | 3 + sysdeps/unix/sysv/linux/oldrecvmsg.c | 42 ++++ sysdeps/unix/sysv/linux/oldsendmsg.c | 42 ++++ sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions | 6 + .../sysv/linux/powerpc/powerpc64/libc-le.abilist | 3 + .../unix/sysv/linux/powerpc/powerpc64/libc.abilist | 3 + .../linux/powerpc/powerpc64/libpthread-le.abilist | 3 + .../linux/powerpc/powerpc64/libpthread.abilist | 3 + sysdeps/unix/sysv/linux/recvmsg.c | 40 +++- sysdeps/unix/sysv/linux/s390/s390-64/Versions | 9 + sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist | 3 + .../sysv/linux/s390/s390-64/libpthread.abilist | 3 + sysdeps/unix/sysv/linux/sendmsg.c | 27 ++- sysdeps/unix/sysv/linux/sparc/sparc64/Versions | 9 + sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist | 3 + .../sysv/linux/sparc/sparc64/libpthread.abilist | 3 + .../unix/sysv/linux/tile/tilegx/tilegx64/Versions | 11 + .../sysv/linux/tile/tilegx/tilegx64/libc.abilist | 3 + .../linux/tile/tilegx/tilegx64/libpthread.abilist | 3 + sysdeps/unix/sysv/linux/x86_64/64/Versions | 10 + sysdeps/unix/sysv/linux/x86_64/64/libc.abilist | 3 + .../unix/sysv/linux/x86_64/64/libpthread.abilist | 3 + 42 files changed, 667 insertions(+), 42 deletions(-) create mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/libpthread.abilist create mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n64/Versions create mode 100644 sysdeps/unix/sysv/linux/oldrecvmsg.c create mode 100644 sysdeps/unix/sysv/linux/oldsendmsg.c create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Versions create mode 100644 sysdeps/unix/sysv/linux/x86_64/64/Versions -- 1.9.1 diff --git a/conform/data/sys/socket.h-data b/conform/data/sys/socket.h-data index 442d4d2..3a6cf7c 100644 --- a/conform/data/sys/socket.h-data +++ b/conform/data/sys/socket.h-data @@ -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 diff --git a/nptl/Makefile b/nptl/Makefile index dc3ccab..28604f6 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -115,6 +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 \ pt-raise pt-system \ flockfile ftrylockfile funlockfile \ sigaction \ diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 9999600..493ac13 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -124,7 +124,7 @@ 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 endif ifeq ($(subdir),sunrpc) diff --git a/sysdeps/unix/sysv/linux/aarch64/Versions b/sysdeps/unix/sysv/linux/aarch64/Versions index 9bd87fe..73ca6fc 100644 --- a/sysdeps/unix/sysv/linux/aarch64/Versions +++ b/sysdeps/unix/sysv/linux/aarch64/Versions @@ -5,8 +5,17 @@ ld { } } libc { + GLIBC_2.24 { + recvmsg; sendmsg; + } + GLIBC_PRIVATE { __vdso_clock_gettime; __vdso_clock_getres; } } +libpthread { + GLIBC_2.24 { + recvmsg; sendmsg; + } +} diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist index 5799239..c3f2346 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist index 0cf30ee..e33401a 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist @@ -224,3 +224,6 @@ GLIBC_2.17 write F GLIBC_2.18 GLIBC_2.18 A GLIBC_2.18 pthread_getattr_default_np F GLIBC_2.18 pthread_setattr_default_np 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/alpha/Versions b/sysdeps/unix/sysv/linux/alpha/Versions index 29b82f9..72fac79 100644 --- a/sysdeps/unix/sysv/linux/alpha/Versions +++ b/sysdeps/unix/sysv/linux/alpha/Versions @@ -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; } @@ -99,6 +102,9 @@ libpthread { # Changed PTHREAD_STACK_MIN. pthread_attr_setstack; pthread_attr_setstacksize; } + GLIBC_2.24 { + recvmsg; sendmsg; + } } librt { GLIBC_2.3 { diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist index 0fa4ee9..7822242 100644 --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist index 7e121d4..65cb648 100644 --- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist @@ -216,6 +216,9 @@ GLIBC_2.2.3 GLIBC_2.2.3 A GLIBC_2.2.3 pthread_getattr_np F GLIBC_2.2.6 GLIBC_2.2.6 A GLIBC_2.2.6 __nanosleep F +GLIBC_2.24 GLIBC_2.24 A +GLIBC_2.24 recvmsg F +GLIBC_2.24 sendmsg F GLIBC_2.3.2 GLIBC_2.3.2 A GLIBC_2.3.2 pthread_cond_broadcast F GLIBC_2.3.2 pthread_cond_destroy F diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h index 0581c79..9c284a4 100644 --- a/sysdeps/unix/sysv/linux/bits/socket.h +++ b/sysdeps/unix/sysv/linux/bits/socket.h @@ -27,6 +27,8 @@ #include #include +#include +#include /* Type for length arguments in socket calls. */ #ifndef __socklen_t_defined @@ -231,13 +233,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. */ }; @@ -245,11 +266,15 @@ 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 __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 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/check_native.c b/sysdeps/unix/sysv/linux/check_native.c index b3cbbe3..a8e447e 100644 --- a/sysdeps/unix/sysv/linux/check_native.c +++ b/sysdeps/unix/sysv/linux/check_native.c @@ -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)); diff --git a/sysdeps/unix/sysv/linux/check_pf.c b/sysdeps/unix/sysv/linux/check_pf.c index d55953a..89e9031 100644 --- a/sysdeps/unix/sysv/linux/check_pf.c +++ b/sysdeps/unix/sysv/linux/check_pf.c @@ -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)); diff --git a/sysdeps/unix/sysv/linux/ia64/Versions b/sysdeps/unix/sysv/linux/ia64/Versions index b38d6ef..cac811c 100644 --- a/sysdeps/unix/sysv/linux/ia64/Versions +++ b/sysdeps/unix/sysv/linux/ia64/Versions @@ -22,12 +22,18 @@ libc { GLIBC_2.2.6 { getunwind; } + GLIBC_2.24 { + recvmsg; sendmsg; + } } libpthread { GLIBC_2.3.3 { # Changed PTHREAD_STACK_MIN. pthread_attr_setstack; pthread_attr_setstacksize; } + GLIBC_2.24 { + recvmsg; sendmsg; + } } librt { GLIBC_2.3.3 { diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist index 921ec55..f5739b4 100644 --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist index d4c8ded..0f3c4c2 100644 --- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist +++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist @@ -204,6 +204,9 @@ GLIBC_2.2.3 GLIBC_2.2.3 A GLIBC_2.2.3 pthread_getattr_np F GLIBC_2.2.6 GLIBC_2.2.6 A GLIBC_2.2.6 __nanosleep F +GLIBC_2.24 GLIBC_2.24 A +GLIBC_2.24 recvmsg F +GLIBC_2.24 sendmsg F GLIBC_2.3.2 GLIBC_2.3.2 A GLIBC_2.3.2 pthread_cond_broadcast F GLIBC_2.3.2 pthread_cond_destroy F diff --git a/sysdeps/unix/sysv/linux/ifaddrs.c b/sysdeps/unix/sysv/linux/ifaddrs.c index ca38d1a..54f1124 100644 --- a/sysdeps/unix/sysv/linux/ifaddrs.c +++ b/sysdeps/unix/sysv/linux/ifaddrs.c @@ -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)); diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist index ad55bdd..6098136 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist @@ -213,6 +213,9 @@ GLIBC_2.2.3 GLIBC_2.2.3 A GLIBC_2.2.3 pthread_getattr_np F GLIBC_2.2.6 GLIBC_2.2.6 A GLIBC_2.2.6 __nanosleep F +GLIBC_2.24 GLIBC_2.24 A +GLIBC_2.24 recvmsg F +GLIBC_2.24 sendmsg F GLIBC_2.3.2 GLIBC_2.3.2 A GLIBC_2.3.2 pthread_cond_broadcast F GLIBC_2.3.2 pthread_cond_destroy F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libpthread.abilist new file mode 100644 index 0000000..ad55bdd --- /dev/null +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libpthread.abilist @@ -0,0 +1,256 @@ +GLIBC_2.0 GLIBC_2.0 A +GLIBC_2.0 _IO_flockfile F +GLIBC_2.0 _IO_ftrylockfile F +GLIBC_2.0 _IO_funlockfile F +GLIBC_2.0 __close F +GLIBC_2.0 __connect F +GLIBC_2.0 __errno_location F +GLIBC_2.0 __fcntl F +GLIBC_2.0 __fork F +GLIBC_2.0 __h_errno_location F +GLIBC_2.0 __lseek F +GLIBC_2.0 __open F +GLIBC_2.0 __pthread_getspecific F +GLIBC_2.0 __pthread_key_create F +GLIBC_2.0 __pthread_mutex_destroy F +GLIBC_2.0 __pthread_mutex_init F +GLIBC_2.0 __pthread_mutex_lock F +GLIBC_2.0 __pthread_mutex_trylock F +GLIBC_2.0 __pthread_mutex_unlock F +GLIBC_2.0 __pthread_mutexattr_destroy F +GLIBC_2.0 __pthread_mutexattr_init F +GLIBC_2.0 __pthread_mutexattr_settype F +GLIBC_2.0 __pthread_once F +GLIBC_2.0 __pthread_setspecific F +GLIBC_2.0 __read F +GLIBC_2.0 __send F +GLIBC_2.0 __sigaction F +GLIBC_2.0 __wait F +GLIBC_2.0 __write F +GLIBC_2.0 _pthread_cleanup_pop F +GLIBC_2.0 _pthread_cleanup_pop_restore F +GLIBC_2.0 _pthread_cleanup_push F +GLIBC_2.0 _pthread_cleanup_push_defer F +GLIBC_2.0 accept F +GLIBC_2.0 close F +GLIBC_2.0 connect F +GLIBC_2.0 fcntl F +GLIBC_2.0 flockfile F +GLIBC_2.0 fork F +GLIBC_2.0 fsync F +GLIBC_2.0 ftrylockfile F +GLIBC_2.0 funlockfile F +GLIBC_2.0 longjmp F +GLIBC_2.0 lseek F +GLIBC_2.0 msync F +GLIBC_2.0 nanosleep F +GLIBC_2.0 open F +GLIBC_2.0 pause F +GLIBC_2.0 pthread_atfork F +GLIBC_2.0 pthread_attr_destroy F +GLIBC_2.0 pthread_attr_getdetachstate F +GLIBC_2.0 pthread_attr_getinheritsched F +GLIBC_2.0 pthread_attr_getschedparam F +GLIBC_2.0 pthread_attr_getschedpolicy F +GLIBC_2.0 pthread_attr_getscope F +GLIBC_2.0 pthread_attr_init F +GLIBC_2.0 pthread_attr_setdetachstate F +GLIBC_2.0 pthread_attr_setinheritsched F +GLIBC_2.0 pthread_attr_setschedparam F +GLIBC_2.0 pthread_attr_setschedpolicy F +GLIBC_2.0 pthread_attr_setscope F +GLIBC_2.0 pthread_cancel F +GLIBC_2.0 pthread_cond_broadcast F +GLIBC_2.0 pthread_cond_destroy F +GLIBC_2.0 pthread_cond_init F +GLIBC_2.0 pthread_cond_signal F +GLIBC_2.0 pthread_cond_timedwait F +GLIBC_2.0 pthread_cond_wait F +GLIBC_2.0 pthread_condattr_destroy F +GLIBC_2.0 pthread_condattr_init F +GLIBC_2.0 pthread_create F +GLIBC_2.0 pthread_detach F +GLIBC_2.0 pthread_equal F +GLIBC_2.0 pthread_exit F +GLIBC_2.0 pthread_getschedparam F +GLIBC_2.0 pthread_getspecific F +GLIBC_2.0 pthread_join F +GLIBC_2.0 pthread_key_create F +GLIBC_2.0 pthread_key_delete F +GLIBC_2.0 pthread_kill F +GLIBC_2.0 pthread_kill_other_threads_np F +GLIBC_2.0 pthread_mutex_destroy F +GLIBC_2.0 pthread_mutex_init F +GLIBC_2.0 pthread_mutex_lock F +GLIBC_2.0 pthread_mutex_trylock F +GLIBC_2.0 pthread_mutex_unlock F +GLIBC_2.0 pthread_mutexattr_destroy F +GLIBC_2.0 pthread_mutexattr_getkind_np F +GLIBC_2.0 pthread_mutexattr_init F +GLIBC_2.0 pthread_mutexattr_setkind_np F +GLIBC_2.0 pthread_once F +GLIBC_2.0 pthread_self F +GLIBC_2.0 pthread_setcancelstate F +GLIBC_2.0 pthread_setcanceltype F +GLIBC_2.0 pthread_setschedparam F +GLIBC_2.0 pthread_setspecific F +GLIBC_2.0 pthread_sigmask F +GLIBC_2.0 pthread_testcancel F +GLIBC_2.0 raise F +GLIBC_2.0 read F +GLIBC_2.0 recv F +GLIBC_2.0 recvfrom F +GLIBC_2.0 recvmsg F +GLIBC_2.0 sem_destroy F +GLIBC_2.0 sem_getvalue F +GLIBC_2.0 sem_init F +GLIBC_2.0 sem_post F +GLIBC_2.0 sem_trywait F +GLIBC_2.0 sem_wait F +GLIBC_2.0 send F +GLIBC_2.0 sendmsg F +GLIBC_2.0 sendto F +GLIBC_2.0 sigaction F +GLIBC_2.0 siglongjmp F +GLIBC_2.0 sigwait F +GLIBC_2.0 system F +GLIBC_2.0 tcdrain F +GLIBC_2.0 vfork F +GLIBC_2.0 wait F +GLIBC_2.0 waitpid F +GLIBC_2.0 write F +GLIBC_2.11 GLIBC_2.11 A +GLIBC_2.11 pthread_sigqueue F +GLIBC_2.12 GLIBC_2.12 A +GLIBC_2.12 pthread_getname_np F +GLIBC_2.12 pthread_mutex_consistent F +GLIBC_2.12 pthread_mutexattr_getrobust F +GLIBC_2.12 pthread_mutexattr_setrobust F +GLIBC_2.12 pthread_setname_np F +GLIBC_2.18 GLIBC_2.18 A +GLIBC_2.18 pthread_getattr_default_np F +GLIBC_2.18 pthread_setattr_default_np F +GLIBC_2.2 GLIBC_2.2 A +GLIBC_2.2 __libc_allocate_rtsig F +GLIBC_2.2 __libc_current_sigrtmax F +GLIBC_2.2 __libc_current_sigrtmin F +GLIBC_2.2 __open64 F +GLIBC_2.2 __pread64 F +GLIBC_2.2 __pthread_rwlock_destroy F +GLIBC_2.2 __pthread_rwlock_init F +GLIBC_2.2 __pthread_rwlock_rdlock F +GLIBC_2.2 __pthread_rwlock_tryrdlock F +GLIBC_2.2 __pthread_rwlock_trywrlock F +GLIBC_2.2 __pthread_rwlock_unlock F +GLIBC_2.2 __pthread_rwlock_wrlock F +GLIBC_2.2 __pwrite64 F +GLIBC_2.2 __res_state F +GLIBC_2.2 __vfork F +GLIBC_2.2 lseek64 F +GLIBC_2.2 open64 F +GLIBC_2.2 pread F +GLIBC_2.2 pread64 F +GLIBC_2.2 pthread_attr_getguardsize F +GLIBC_2.2 pthread_attr_getstack F +GLIBC_2.2 pthread_attr_getstackaddr F +GLIBC_2.2 pthread_attr_getstacksize F +GLIBC_2.2 pthread_attr_init F +GLIBC_2.2 pthread_attr_setguardsize F +GLIBC_2.2 pthread_attr_setstack F +GLIBC_2.2 pthread_attr_setstackaddr F +GLIBC_2.2 pthread_attr_setstacksize F +GLIBC_2.2 pthread_barrier_destroy F +GLIBC_2.2 pthread_barrier_init F +GLIBC_2.2 pthread_barrier_wait F +GLIBC_2.2 pthread_barrierattr_destroy F +GLIBC_2.2 pthread_barrierattr_init F +GLIBC_2.2 pthread_barrierattr_setpshared F +GLIBC_2.2 pthread_condattr_getpshared F +GLIBC_2.2 pthread_condattr_setpshared F +GLIBC_2.2 pthread_create F +GLIBC_2.2 pthread_getconcurrency F +GLIBC_2.2 pthread_getcpuclockid F +GLIBC_2.2 pthread_mutex_timedlock F +GLIBC_2.2 pthread_mutexattr_getpshared F +GLIBC_2.2 pthread_mutexattr_gettype F +GLIBC_2.2 pthread_mutexattr_setpshared F +GLIBC_2.2 pthread_mutexattr_settype F +GLIBC_2.2 pthread_rwlock_destroy F +GLIBC_2.2 pthread_rwlock_init F +GLIBC_2.2 pthread_rwlock_rdlock F +GLIBC_2.2 pthread_rwlock_timedrdlock F +GLIBC_2.2 pthread_rwlock_timedwrlock F +GLIBC_2.2 pthread_rwlock_tryrdlock F +GLIBC_2.2 pthread_rwlock_trywrlock F +GLIBC_2.2 pthread_rwlock_unlock F +GLIBC_2.2 pthread_rwlock_wrlock F +GLIBC_2.2 pthread_rwlockattr_destroy F +GLIBC_2.2 pthread_rwlockattr_getkind_np F +GLIBC_2.2 pthread_rwlockattr_getpshared F +GLIBC_2.2 pthread_rwlockattr_init F +GLIBC_2.2 pthread_rwlockattr_setkind_np F +GLIBC_2.2 pthread_rwlockattr_setpshared F +GLIBC_2.2 pthread_setconcurrency F +GLIBC_2.2 pthread_spin_destroy F +GLIBC_2.2 pthread_spin_init F +GLIBC_2.2 pthread_spin_lock F +GLIBC_2.2 pthread_spin_trylock F +GLIBC_2.2 pthread_spin_unlock F +GLIBC_2.2 pthread_yield F +GLIBC_2.2 pwrite F +GLIBC_2.2 pwrite64 F +GLIBC_2.2 sem_close F +GLIBC_2.2 sem_destroy F +GLIBC_2.2 sem_getvalue F +GLIBC_2.2 sem_init F +GLIBC_2.2 sem_open F +GLIBC_2.2 sem_post F +GLIBC_2.2 sem_timedwait F +GLIBC_2.2 sem_trywait F +GLIBC_2.2 sem_unlink F +GLIBC_2.2 sem_wait F +GLIBC_2.2.3 GLIBC_2.2.3 A +GLIBC_2.2.3 pthread_getattr_np F +GLIBC_2.2.6 GLIBC_2.2.6 A +GLIBC_2.2.6 __nanosleep F +GLIBC_2.3.2 GLIBC_2.3.2 A +GLIBC_2.3.2 pthread_cond_broadcast F +GLIBC_2.3.2 pthread_cond_destroy F +GLIBC_2.3.2 pthread_cond_init F +GLIBC_2.3.2 pthread_cond_signal F +GLIBC_2.3.2 pthread_cond_timedwait F +GLIBC_2.3.2 pthread_cond_wait F +GLIBC_2.3.3 GLIBC_2.3.3 A +GLIBC_2.3.3 __pthread_cleanup_routine F +GLIBC_2.3.3 __pthread_register_cancel F +GLIBC_2.3.3 __pthread_register_cancel_defer F +GLIBC_2.3.3 __pthread_unregister_cancel F +GLIBC_2.3.3 __pthread_unregister_cancel_restore F +GLIBC_2.3.3 __pthread_unwind_next F +GLIBC_2.3.3 pthread_attr_getaffinity_np F +GLIBC_2.3.3 pthread_attr_setaffinity_np F +GLIBC_2.3.3 pthread_attr_setstack F +GLIBC_2.3.3 pthread_attr_setstacksize F +GLIBC_2.3.3 pthread_barrierattr_getpshared F +GLIBC_2.3.3 pthread_condattr_getclock F +GLIBC_2.3.3 pthread_condattr_setclock F +GLIBC_2.3.3 pthread_getaffinity_np F +GLIBC_2.3.3 pthread_setaffinity_np F +GLIBC_2.3.3 pthread_timedjoin_np F +GLIBC_2.3.3 pthread_tryjoin_np F +GLIBC_2.3.4 GLIBC_2.3.4 A +GLIBC_2.3.4 pthread_attr_getaffinity_np F +GLIBC_2.3.4 pthread_attr_setaffinity_np F +GLIBC_2.3.4 pthread_getaffinity_np F +GLIBC_2.3.4 pthread_setaffinity_np F +GLIBC_2.3.4 pthread_setschedprio F +GLIBC_2.4 GLIBC_2.4 A +GLIBC_2.4 pthread_mutex_consistent_np F +GLIBC_2.4 pthread_mutex_getprioceiling F +GLIBC_2.4 pthread_mutex_setprioceiling F +GLIBC_2.4 pthread_mutexattr_getprioceiling F +GLIBC_2.4 pthread_mutexattr_getprotocol F +GLIBC_2.4 pthread_mutexattr_getrobust_np F +GLIBC_2.4 pthread_mutexattr_setprioceiling F +GLIBC_2.4 pthread_mutexattr_setprotocol F +GLIBC_2.4 pthread_mutexattr_setrobust_np 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 index 0000000..f6ac045 --- /dev/null +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/Versions @@ -0,0 +1,10 @@ +libc { + GLIBC_2.24 { + recvmsg; sendmsg; + } +} +libpthread { + 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 53e0c9a..6722f90 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/oldrecvmsg.c b/sysdeps/unix/sysv/linux/oldrecvmsg.c new file mode 100644 index 0000000..fef55dd --- /dev/null +++ b/sysdeps/unix/sysv/linux/oldrecvmsg.c @@ -0,0 +1,42 @@ +/* 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 + . */ + +#include +#include +#include +#include + +#if LONG_MAX > INT_MAX +/* 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 +#endif /* LONG_MAX > INT_MAX */ diff --git a/sysdeps/unix/sysv/linux/oldsendmsg.c b/sysdeps/unix/sysv/linux/oldsendmsg.c new file mode 100644 index 0000000..7d533c1 --- /dev/null +++ b/sysdeps/unix/sysv/linux/oldsendmsg.c @@ -0,0 +1,42 @@ +/* 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 + . */ + +#include +#include +#include +#include + +#if LONG_MAX > INT_MAX +/* 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 +#endif /* LONG_MAX > INT_MAX */ diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions b/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions index a8e88b8..4dc8d57 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions @@ -22,6 +22,9 @@ libc { GLIBC_2.17 { __ppc_get_timebase_freq; } + GLIBC_2.24 { + recvmsg; sendmsg; + } } librt { @@ -40,4 +43,7 @@ libpthread { # Changed PTHREAD_STACK_MIN. pthread_attr_setstack; pthread_attr_setstacksize; } + GLIBC_2.24 { + recvmsg; sendmsg; + } } diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist index a97bd43..7839b5a 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist index 00772cb..20d5a19 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist index 0cf30ee..e33401a 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist @@ -224,3 +224,6 @@ GLIBC_2.17 write F GLIBC_2.18 GLIBC_2.18 A GLIBC_2.18 pthread_getattr_default_np F GLIBC_2.18 pthread_setattr_default_np 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/powerpc/powerpc64/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist index 464b91a..4a845a0 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist @@ -9,6 +9,9 @@ GLIBC_2.12 pthread_setname_np F GLIBC_2.18 GLIBC_2.18 A GLIBC_2.18 pthread_getattr_default_np F GLIBC_2.18 pthread_setattr_default_np 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 _IO_flockfile F GLIBC_2.3 _IO_ftrylockfile F diff --git a/sysdeps/unix/sysv/linux/recvmsg.c b/sysdeps/unix/sysv/linux/recvmsg.c index 4caf22e..fa3a46e 100644 --- a/sysdeps/unix/sysv/linux/recvmsg.c +++ b/sysdeps/unix/sysv/linux/recvmsg.c @@ -15,23 +15,47 @@ License along with the GNU C Library; if not, see . */ -#include -#include #include - #include #include -#include -#include +#include 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 LONG_MAX > INT_MAX + 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 LONG_MAX > INT_MAX + if (orig != NULL) + *orig = hdr; #endif + + return ret; } -weak_alias (__libc_recvmsg, recvmsg) weak_alias (__libc_recvmsg, __recvmsg) +#if LONG_MAX > INT_MAX +versioned_symbol (libc, __libc_recvmsg, recvmsg, GLIBC_2_24); +#else +weak_alias (__libc_recvmsg, recvmsg) +#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/Versions b/sysdeps/unix/sysv/linux/s390/s390-64/Versions index 3f4d960..708028f 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/Versions +++ b/sysdeps/unix/sysv/linux/s390/s390-64/Versions @@ -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 { @@ -13,3 +16,9 @@ librt { timer_settime; } } + +libpthread { + GLIBC_2.24 { + recvmsg; sendmsg; + } +} diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist index 1af185f..5892fcd 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist index 83a1fcd..152bfb5 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist @@ -207,6 +207,9 @@ GLIBC_2.2.3 GLIBC_2.2.3 A GLIBC_2.2.3 pthread_getattr_np F GLIBC_2.2.6 GLIBC_2.2.6 A GLIBC_2.2.6 __nanosleep F +GLIBC_2.24 GLIBC_2.24 A +GLIBC_2.24 recvmsg F +GLIBC_2.24 sendmsg F GLIBC_2.3.2 GLIBC_2.3.2 A GLIBC_2.3.2 pthread_cond_broadcast F GLIBC_2.3.2 pthread_cond_destroy F diff --git a/sysdeps/unix/sysv/linux/sendmsg.c b/sysdeps/unix/sysv/linux/sendmsg.c index 5b2741a..10cded4 100644 --- a/sysdeps/unix/sysv/linux/sendmsg.c +++ b/sysdeps/unix/sysv/linux/sendmsg.c @@ -15,23 +15,38 @@ License along with the GNU C Library; if not, see . */ -#include -#include #include - #include #include -#include -#include +#include 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 LONG_MAX > INT_MAX + 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) +#if LONG_MAX > INT_MAX +versioned_symbol (libc, __libc_sendmsg, sendmsg, GLIBC_2_24); +#else +weak_alias (__libc_sendmsg, sendmsg) +#endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/Versions b/sysdeps/unix/sysv/linux/sparc/sparc64/Versions index fbea1bb..be45683 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/Versions +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/Versions @@ -8,6 +8,9 @@ libc { # w* wordexp; } + GLIBC_2.24 { + recvmsg; sendmsg; + } } librt { @@ -17,3 +20,9 @@ librt { timer_settime; } } + +libpthread { + GLIBC_2.24 { + recvmsg; sendmsg; + } +} diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist index 91b97ef..015a2f1 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist index d4c8ded..0f3c4c2 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist @@ -204,6 +204,9 @@ GLIBC_2.2.3 GLIBC_2.2.3 A GLIBC_2.2.3 pthread_getattr_np F GLIBC_2.2.6 GLIBC_2.2.6 A GLIBC_2.2.6 __nanosleep F +GLIBC_2.24 GLIBC_2.24 A +GLIBC_2.24 recvmsg F +GLIBC_2.24 sendmsg F GLIBC_2.3.2 GLIBC_2.3.2 A GLIBC_2.3.2 pthread_cond_broadcast F GLIBC_2.3.2 pthread_cond_destroy 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 index 0000000..6ee9839 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/Versions @@ -0,0 +1,11 @@ +libc { + GLIBC_2.24 { + recvmsg; sendmsg; + } +} + +libpthread { + 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 a66e8ec..1e160bd 100644 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist +++ b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist @@ -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/libpthread.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libpthread.abilist index d16158f..3e3dcf7 100644 --- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libpthread.abilist +++ b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libpthread.abilist @@ -224,3 +224,6 @@ GLIBC_2.12 write F GLIBC_2.18 GLIBC_2.18 A GLIBC_2.18 pthread_getattr_default_np F GLIBC_2.18 pthread_setattr_default_np 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 index 0000000..f6ac045 --- /dev/null +++ b/sysdeps/unix/sysv/linux/x86_64/64/Versions @@ -0,0 +1,10 @@ +libc { + GLIBC_2.24 { + recvmsg; sendmsg; + } +} +libpthread { + 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 c6e3cd4..175339e 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist index 85365c0..b599e47 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist @@ -203,6 +203,9 @@ GLIBC_2.2.5 waitpid F GLIBC_2.2.5 write F GLIBC_2.2.6 GLIBC_2.2.6 A GLIBC_2.2.6 __nanosleep F +GLIBC_2.24 GLIBC_2.24 A +GLIBC_2.24 recvmsg F +GLIBC_2.24 sendmsg F GLIBC_2.3.2 GLIBC_2.3.2 A GLIBC_2.3.2 pthread_cond_broadcast F GLIBC_2.3.2 pthread_cond_destroy F