This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.19-64-g0e31b18


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  0e31b18ca280c6056d41d0235b85d6890367ff46 (commit)
      from  dd481ccffd926ea70b107a98a9f4eb00822070c4 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=0e31b18ca280c6056d41d0235b85d6890367ff46

commit 0e31b18ca280c6056d41d0235b85d6890367ff46
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Thu Feb 20 17:53:08 2014 +0000

    Fix __ASSUME_RECVMMSG issues (bug 16610).
    
    Similar to the issues for accept4, __ASSUME_RECVMMSG is also confused
    about whether it relates to function availability or socketcall
    operation availability; this is now bug 16610.
    
    Nothing actually tests __ASSUME_RECVMMSG for function availability,
    but implicit in the definition in kernel-features.h is the idea that
    it makes sense when the syscall is available and socketcall is not
    being used.  As with accept4, there are architectures where the
    syscall was added later than the socketcall operation, meaning that
    assuming glibc is built with recent enough kernel headers, it does not
    attempt to use socketcall for these operations and __ASSUME_RECVMMSG
    gets defined for kernels >= 2.6.33 even when the syscall was only
    added later.
    
    This patch splits the macro into separate macros like those used for
    accept4; having similar macro structure in both cases (and for
    sendmmsg once I've dealt with that) seems likely to be less confusing
    than having a different structure on the basis of nothing actually
    needing to assume the recvmmsg function works.  Appropriate
    definitions are added for all architectures.
    
    Architecture-specific note: Tile's kernel-features.h says "TILE glibc
    support starts with 2.6.36", which is accurate in that 2.6.36 was the
    first kernel version with Tile support, and on that basis I've made
    that header define __ASSUME_RECVMMSG_SYSCALL unconditionally.
    However, Tile's configure.ac has arch_minimum_kernel=2.6.32.  Since
    arch_minimum_kernel is meant to reflect only kernel.org kernel
    versions, I think that should change to 2.6.36.  (If using glibc with
    kernel versions from before a port went in kernel.org, it's your
    responsibility to change arch_minimum_kernel in a local patch, and at
    the same time to adjust any __ASSUME_* definitions that may not be
    correct for your older kernel; for developing the official glibc it
    should only ever be necessary to consider what official kernel.org
    releases support.)
    
    Tested x86_64, including that disassembly of the installed shared
    libraries is unchanged by this patch.
    
    	[BZ #16610]
    	* sysdeps/unix/sysv/linux/kernel-features.h
    	[__LINUX_KERNEL_VERSION >= 0x020621 && __ASSUME_SOCKETCALL]
    	(__ASSUME_RECVMMSG_SOCKETCALL): Define.
    	[(__LINUX_KERNEL_VERSION >= 0x020621 && (__i386__ || __x86_64__ ||
    	__sparc__)) || (__LINUX_KERNEL_VERSION >= 0x020625 && (__powerpc__
    	|| __sh__))] (__ASSUME_RECVMMSG_SYSCALL): Likewise.
    	[__i386__ || __sparc__]
    	(__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
    	[__ASSUME_RECVMMSG_SOCKETCALL || __ASSUME_RECVMMSG_SYSCALL]
    	(__ASSUME_RECVMMSG): Define instead of using previous
    	[__LINUX_KERNEL_VERSION >= 0x020621] condition.
    	* sysdeps/unix/sysv/linux/aarch64/kernel-features.h
    	(__ASSUME_RECVMMSG_SYSCALL): Define.
    	* sysdeps/unix/sysv/linux/alpha/kernel-features.h
    	[__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
    	Likewise.
    	* sysdeps/unix/sysv/linux/arm/kernel-features.h
    	[__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
    	Likewise.
    	* sysdeps/unix/sysv/linux/ia64/kernel-features.h
    	[__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
    	Likewise.
    	* sysdeps/unix/sysv/linux/internal_recvmmsg.S [__ASSUME_SOCKETCALL
    	&& !__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL &&
    	!__ASSUME_RECVMMSG_SYSCALL] (__NR_recvmmsg): Undefine.
    	[__ASSUME_RECVMMSG]: Change condition to
    	[__ASSUME_RECVMMSG_SOCKETCALL].
    	* sysdeps/unix/sysv/linux/microblaze/kernel-features.h
    	[__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
    	Define.
    	(__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
    	* sysdeps/unix/sysv/linux/mips/kernel-features.h
    	[__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
    	Likewise.
    	* sysdeps/unix/sysv/linux/recvmmsg.c [__ASSUME_SOCKETCALL &&
    	!__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL &&
    	!__ASSUME_RECVMMSG_SYSCALL] (__NR_recvmmsg): Undefine.
    	[!__ASSUME_RECVMMSG]: Change condition to
    	[!__ASSUME_RECVMMSG_SOCKETCALL].
    	* sysdeps/unix/sysv/linux/tile/kernel-features.h
    	(__ASSUME_RECVMMSG_SYSCALL): Define.
    
    	* sysdeps/unix/sysv/linux/hppa/kernel-features.h
    	[__LINUX_KERNEL_VERSION >= 0x020622] (__ASSUME_RECVMMSG_SYSCALL):
    	Define.

diff --git a/ChangeLog b/ChangeLog
index a7b2fd9..73f614b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,48 @@
 2014-02-20  Joseph Myers  <joseph@codesourcery.com>
 
+	[BZ #16610]
+	* sysdeps/unix/sysv/linux/kernel-features.h
+	[__LINUX_KERNEL_VERSION >= 0x020621 && __ASSUME_SOCKETCALL]
+	(__ASSUME_RECVMMSG_SOCKETCALL): Define.
+	[(__LINUX_KERNEL_VERSION >= 0x020621 && (__i386__ || __x86_64__ ||
+	__sparc__)) || (__LINUX_KERNEL_VERSION >= 0x020625 && (__powerpc__
+	|| __sh__))] (__ASSUME_RECVMMSG_SYSCALL): Likewise.
+	[__i386__ || __sparc__]
+	(__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
+	[__ASSUME_RECVMMSG_SOCKETCALL || __ASSUME_RECVMMSG_SYSCALL]
+	(__ASSUME_RECVMMSG): Define instead of using previous
+	[__LINUX_KERNEL_VERSION >= 0x020621] condition.
+	* sysdeps/unix/sysv/linux/aarch64/kernel-features.h
+	(__ASSUME_RECVMMSG_SYSCALL): Define.
+	* sysdeps/unix/sysv/linux/alpha/kernel-features.h
+	[__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
+	Likewise.
+	* sysdeps/unix/sysv/linux/arm/kernel-features.h
+	[__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
+	Likewise.
+	* sysdeps/unix/sysv/linux/ia64/kernel-features.h
+	[__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
+	Likewise.
+	* sysdeps/unix/sysv/linux/internal_recvmmsg.S [__ASSUME_SOCKETCALL
+	&& !__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL &&
+	!__ASSUME_RECVMMSG_SYSCALL] (__NR_recvmmsg): Undefine.
+	[__ASSUME_RECVMMSG]: Change condition to
+	[__ASSUME_RECVMMSG_SOCKETCALL].
+	* sysdeps/unix/sysv/linux/microblaze/kernel-features.h
+	[__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
+	Define.
+	(__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
+	* sysdeps/unix/sysv/linux/mips/kernel-features.h
+	[__LINUX_KERNEL_VERSION >= 0x020621] (__ASSUME_RECVMMSG_SYSCALL):
+	Likewise.
+	* sysdeps/unix/sysv/linux/recvmmsg.c [__ASSUME_SOCKETCALL &&
+	!__ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL &&
+	!__ASSUME_RECVMMSG_SYSCALL] (__NR_recvmmsg): Undefine.
+	[!__ASSUME_RECVMMSG]: Change condition to
+	[!__ASSUME_RECVMMSG_SOCKETCALL].
+	* sysdeps/unix/sysv/linux/tile/kernel-features.h
+	(__ASSUME_RECVMMSG_SYSCALL): Define.
+
 	[BZ #16609]
 	* sysdeps/unix/sysv/linux/kernel-features.h [__i386__ ||
 	__powerpc__ || __s390__ || __sh__ || __sparc__]
diff --git a/NEWS b/NEWS
index 3813155..35da791 100644
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,7 @@ Version 2.20
 
 * The following bugs are resolved with this release:
 
-  15894, 16447, 16545, 16574, 16609.
+  15894, 16447, 16545, 16574, 16609, 16610.
 
 * The am33 port, which had not worked for several years, has been removed
   from ports.
diff --git a/ports/ChangeLog.hppa b/ports/ChangeLog.hppa
index bd415aa..5829e55 100644
--- a/ports/ChangeLog.hppa
+++ b/ports/ChangeLog.hppa
@@ -1,5 +1,10 @@
 2014-02-20  Joseph Myers  <joseph@codesourcery.com>
 
+	[BZ #16610]
+	* sysdeps/unix/sysv/linux/hppa/kernel-features.h
+	[__LINUX_KERNEL_VERSION >= 0x020622] (__ASSUME_RECVMMSG_SYSCALL):
+	Define.
+
 	[BZ #16609]
 	* sysdeps/unix/sysv/linux/hppa/kernel-features.h
 	[__LINUX_KERNEL_VERSION >= 0x020622] (__ASSUME_ACCEPT4_SYSCALL):
diff --git a/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h b/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h
index b8abd08..75e1999 100644
--- a/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h
+++ b/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h
@@ -30,9 +30,10 @@
 /* PA-RISC 2.6.9 kernels had the first LWS CAS support */
 #define __ASSUME_LWS_CAS		1
 
-/* Support for the accept4 syscall was added in 2.6.34.  */
+/* Support for the accept4 and recvmmsg syscalls was added in 2.6.34.  */
 #if __LINUX_KERNEL_VERSION >= 0x020622
 # define __ASSUME_ACCEPT4_SYSCALL	1
+# define __ASSUME_RECVMMSG_SYSCALL	1
 #endif
 
 #include_next <kernel-features.h>
diff --git a/sysdeps/unix/sysv/linux/aarch64/kernel-features.h b/sysdeps/unix/sysv/linux/aarch64/kernel-features.h
index 222b61c..3f9cd04 100644
--- a/sysdeps/unix/sysv/linux/aarch64/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/aarch64/kernel-features.h
@@ -30,6 +30,7 @@
 #define __ASSUME_IN_NONBLOCK            1
 #define __ASSUME_O_CLOEXEC              1
 #define __ASSUME_PIPE2                  1
+#define __ASSUME_RECVMMSG_SYSCALL       1
 #define __ASSUME_SIGNALFD4		1
 #define __ASSUME_SOCK_CLOEXEC           1
 #define __ASSUME_UTIMES                 1
diff --git a/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
index 8cceb34..6e4a515 100644
--- a/sysdeps/unix/sysv/linux/alpha/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/alpha/kernel-features.h
@@ -42,6 +42,11 @@
 # define __ASSUME_SIGNALFD4 1
 #endif
 
+/* Support for recvmmsg was added for alpha in 2.6.33.  */
+#if __LINUX_KERNEL_VERSION >= 0x020621
+# define __ASSUME_RECVMMSG_SYSCALL       1
+#endif
+
 /* Support for accept4 was added for alpha in 3.2.  */
 #if __LINUX_KERNEL_VERSION >= 0x030200
 # define __ASSUME_ACCEPT4_SYSCALL      1
diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h
index 304f88d..7b43e36 100644
--- a/sysdeps/unix/sysv/linux/arm/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h
@@ -31,6 +31,11 @@
 # define __ASSUME_SIGNALFD4	1
 #endif
 
+/* Support for the recvmmsg syscall was added in 2.6.33.  */
+#if __LINUX_KERNEL_VERSION >= 0x020621
+# define __ASSUME_RECVMMSG_SYSCALL	1
+#endif
+
 /* Support for the accept4 syscall was added in 2.6.36.  */
 #if __LINUX_KERNEL_VERSION >= 0x020624
 # define __ASSUME_ACCEPT4_SYSCALL	1
diff --git a/sysdeps/unix/sysv/linux/ia64/kernel-features.h b/sysdeps/unix/sysv/linux/ia64/kernel-features.h
index 5c7c4eb..b4955d9 100644
--- a/sysdeps/unix/sysv/linux/ia64/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/ia64/kernel-features.h
@@ -47,6 +47,11 @@
 # define __ASSUME_DUP3		1
 #endif
 
+/* Support for the recvmmsg syscall was added in 2.6.33.  */
+#if __LINUX_KERNEL_VERSION >= 0x020621
+# define __ASSUME_RECVMMSG_SYSCALL	1
+#endif
+
 /* Support for the accept4 syscall was added in 3.3.  */
 #if __LINUX_KERNEL_VERSION >= 0x030300
 # define __ASSUME_ACCEPT4_SYSCALL	1
diff --git a/sysdeps/unix/sysv/linux/internal_recvmmsg.S b/sysdeps/unix/sysv/linux/internal_recvmmsg.S
index 66c1357..6b776b9 100644
--- a/sysdeps/unix/sysv/linux/internal_recvmmsg.S
+++ b/sysdeps/unix/sysv/linux/internal_recvmmsg.S
@@ -1,8 +1,18 @@
 #include <kernel-features.h>
 #include <sys/syscall.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
+   assumed to be present.  */
+#if defined __ASSUME_SOCKETCALL \
+    && !defined __ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL \
+    && !defined __ASSUME_RECVMMSG_SYSCALL
+# undef __NR_recvmmsg
+#endif
+
 #if !defined __NR_recvmmsg && defined __NR_socketcall
 # define socket	recvmmsg
-# ifdef __ASSUME_RECVMMSG
+# ifdef __ASSUME_RECVMMSG_SOCKETCALL
 #  define __socket recvmmsg
 # else
 #  define __socket __internal_recvmmsg
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index b6d7714..034257e 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -233,8 +233,25 @@
 # define __ASSUME_F_GETOWN_EX	1
 #endif
 
-/* Support for the recvmmsg syscall was added in 2.6.33.  */
-#if __LINUX_KERNEL_VERSION >= 0x020621
+/* Support for recvmmsg functionality was added in 2.6.33.  The macros
+   defined correspond to those for accept4.  */
+#if __LINUX_KERNEL_VERSION >= 0x020621 && defined __ASSUME_SOCKETCALL
+# define __ASSUME_RECVMMSG_SOCKETCALL	1
+#endif
+
+/* The recvmmsg syscall was added for i386, x86_64 and SPARC in
+   2.6.33, and for PowerPC and SH in 2.6.37.  */
+#if (__LINUX_KERNEL_VERSION >= 0x020621			\
+     && (defined __i386__ || defined __x86_64__ || defined __sparc__))	\
+    || (__LINUX_KERNEL_VERSION >= 0x020625		\
+	&& (defined __powerpc__ || defined __sh__))
+# define __ASSUME_RECVMMSG_SYSCALL	1
+#endif
+#if defined __i386__ || defined __sparc__
+# define __ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL	1
+#endif
+
+#if defined __ASSUME_RECVMMSG_SOCKETCALL || defined __ASSUME_RECVMMSG_SYSCALL
 # define __ASSUME_RECVMMSG	1
 #endif
 
diff --git a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
index 413b4a0..7266e96 100644
--- a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
@@ -29,9 +29,11 @@
 #define __ASSUME_SIGNALFD4      1
 #define __ASSUME_DUP3           1
 
-/* Support for the accept4 syscall was added in 2.6.33.  */
+/* Support for the accept4 and recvmmsg syscalls was added in 2.6.33.  */
 #if __LINUX_KERNEL_VERSION >= 0x020621
 # define __ASSUME_ACCEPT4_SYSCALL        1
+# define __ASSUME_RECVMMSG_SYSCALL       1
 #endif
+#define __ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL      1
 
 #include_next <kernel-features.h>
diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h
index 94deaf9..22064d9 100644
--- a/sysdeps/unix/sysv/linux/mips/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h
@@ -36,6 +36,11 @@
 # define __ASSUME_ACCEPT4_SYSCALL	1
 #endif
 
+/* Support for the recvmmsg syscall was added in 2.6.33.  */
+#if __LINUX_KERNEL_VERSION >= 0x020621
+# define __ASSUME_RECVMMSG_SYSCALL	1
+#endif
+
 #include_next <kernel-features.h>
 
 /* The n32 syscall ABI did not have a getdents64 syscall until
diff --git a/sysdeps/unix/sysv/linux/recvmmsg.c b/sysdeps/unix/sysv/linux/recvmmsg.c
index 04ff42e..57ddf31 100644
--- a/sysdeps/unix/sysv/linux/recvmmsg.c
+++ b/sysdeps/unix/sysv/linux/recvmmsg.c
@@ -23,6 +23,14 @@
 #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
+   assumed to be present.  */
+#if defined __ASSUME_SOCKETCALL \
+    && !defined __ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL \
+    && !defined __ASSUME_RECVMMSG_SYSCALL
+# undef __NR_recvmmsg
+#endif
 
 #ifdef __NR_recvmmsg
 int
@@ -41,7 +49,7 @@ recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
   return result;
 }
 #elif defined __NR_socketcall
-# ifndef __ASSUME_RECVMMSG
+# ifndef __ASSUME_RECVMMSG_SOCKETCALL
 extern int __internal_recvmmsg (int fd, struct mmsghdr *vmessages,
 				unsigned int vlen, int flags,
 				const struct timespec *tmo)
@@ -85,7 +93,8 @@ recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
   return -1;
 }
 # else
-/* When __ASSUME_RECVMMSG recvmmsg is defined in internal_recvmmsg.S.  */
+/* When __ASSUME_RECVMMSG_SOCKETCALL recvmmsg is defined in
+   internal_recvmmsg.S.  */
 # endif
 #else
 # include <socket/recvmmsg.c>
diff --git a/sysdeps/unix/sysv/linux/tile/kernel-features.h b/sysdeps/unix/sysv/linux/tile/kernel-features.h
index e339e7a..b415d8f 100644
--- a/sysdeps/unix/sysv/linux/tile/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/tile/kernel-features.h
@@ -27,6 +27,7 @@
 #define __ASSUME_SIGNALFD4		1
 #define __ASSUME_ACCEPT4_SYSCALL	1
 #define __ASSUME_DUP3			1
+#define __ASSUME_RECVMMSG_SYSCALL	1
 
 #include_next <kernel-features.h>
 

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   43 ++++++++++++++++++++
 NEWS                                               |    2 +-
 ports/ChangeLog.hppa                               |    5 ++
 .../sysdeps/unix/sysv/linux/hppa/kernel-features.h |    3 +-
 sysdeps/unix/sysv/linux/aarch64/kernel-features.h  |    1 +
 sysdeps/unix/sysv/linux/alpha/kernel-features.h    |    5 ++
 sysdeps/unix/sysv/linux/arm/kernel-features.h      |    5 ++
 sysdeps/unix/sysv/linux/ia64/kernel-features.h     |    5 ++
 sysdeps/unix/sysv/linux/internal_recvmmsg.S        |   12 +++++-
 sysdeps/unix/sysv/linux/kernel-features.h          |   21 +++++++++-
 .../unix/sysv/linux/microblaze/kernel-features.h   |    4 +-
 sysdeps/unix/sysv/linux/mips/kernel-features.h     |    5 ++
 sysdeps/unix/sysv/linux/recvmmsg.c                 |   13 +++++-
 sysdeps/unix/sysv/linux/tile/kernel-features.h     |    1 +
 14 files changed, 117 insertions(+), 8 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]