about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/kernel-features.h
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-02-20 17:55:35 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-02-20 17:55:35 +0000
commitbc688c10296cb416c082e44aa8bf881505aec64a (patch)
tree2de804af0d0c54687a7c002c8e049f3180c1b535 /sysdeps/unix/sysv/linux/kernel-features.h
parent0e31b18ca280c6056d41d0235b85d6890367ff46 (diff)
downloadglibc-bc688c10296cb416c082e44aa8bf881505aec64a.tar.gz
glibc-bc688c10296cb416c082e44aa8bf881505aec64a.tar.xz
glibc-bc688c10296cb416c082e44aa8bf881505aec64a.zip
Fix __ASSUME_SENDMMSG issues (bug 16611).
Similar to the issues for accept4 and recvmmsg, __ASSUME_SENDMMSG is
also confused about whether it relates to function availability or
socketcall operation availability, and the conditions for the
definition are always wrong (sendmmsg appeared in Linux kernel 3.0,
not 2.6.39); this is now bug 16611.

This patch splits the macro into separate macros like those for
accept4 and recvmmsg, defining them for appropriate kernel versions.

Tested x86_64, including that disassembly of the installed shared
libraries is unchanged by this patch.

	[BZ #16611]
	* sysdeps/unix/sysv/linux/kernel-features.h
	[__LINUX_KERNEL_VERSION >= 0x030000 && __ASSUME_SOCKETCALL]
	(__ASSUME_SENDMMSG_SOCKETCALL): Define.
	[__LINUX_KERNEL_VERSION >= 0x030000 && (__i386__ || __x86_64__ ||
	__powerpc__ || __sh__ || __sparc__)] (__ASSUME_SENDMMSG_SYSCALL):
	Likewise.
	[__i386__ || __powerpc__ || __sh__ || __sparc__]
	(__ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL): Likewise.
	[__ASSUME_SENDMMSG_SOCKETCALL || __ASSUME_SENDMMSG_SYSCALL]
	(__ASSUME_SENDMMSG): Define instead of using previous
	[__LINUX_KERNEL_VERSION >= 0x020627] condition.
	* sysdeps/unix/sysv/linux/aarch64/kernel-features.h
	(__ASSUME_SENDMMSG_SYSCALL): Define.
	* sysdeps/unix/sysv/linux/alpha/kernel-features.h
	[__LINUX_KERNEL_VERSION >= 0x030200] (__ASSUME_SENDMMSG_SYSCALL):
	Likewise.
	* sysdeps/unix/sysv/linux/arm/kernel-features.h
	[__LINUX_KERNEL_VERSION >= 0x030000] (__ASSUME_SENDMMSG_SYSCALL):
	Likewise.
	* sysdeps/unix/sysv/linux/ia64/kernel-features.h
	[__LINUX_KERNEL_VERSION >= 0x030000] (__ASSUME_SENDMMSG_SYSCALL):
	Likewise.
	* sysdeps/unix/sysv/linux/internal_sendmmsg.S [__ASSUME_SOCKETCALL
	&& !__ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL &&
	!__ASSUME_SENDMMSG_SYSCALL] (__NR_sendmmsg): Undefine.
	[__ASSUME_SENDMMSG]: Change conditionals to
	[__ASSUME_SENDMMSG_SOCKETCALL].
	* sysdeps/unix/sysv/linux/microblaze/kernel-features.h
	[__LINUX_KERNEL_VERSION >= 0x030300] (__ASSUME_SENDMMSG_SYSCALL):
	Define.
	* sysdeps/unix/sysv/linux/mips/kernel-features.h
	[__LINUX_KERNEL_VERSION >= 0x030100] (__ASSUME_SENDMMSG_SYSCALL):
	Likewise.
	* sysdeps/unix/sysv/linux/sendmmsg.c [__ASSUME_SOCKETCALL &&
	!__ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL &&
	!__ASSUME_SENDMMSG_SYSCALL] (__NR_sendmmsg): Undefine.
	[!__ASSUME_SENDMMSG]: Change conditional to
	[!__ASSUME_SENDMMSG_SOCKETCALL].
	* sysdeps/unix/sysv/linux/tile/kernel-features.h
	[__LINUX_KERNEL_VERSION >= 0x030000] (__ASSUME_SENDMMSG_SYSCALL):
	Define.

	* sysdeps/unix/sysv/linux/hppa/kernel-features.h
	[__LINUX_KERNEL_VERSION >= 0x030100] (__ASSUME_SENDMMSG_SYSCALL):
	Define.
Diffstat (limited to 'sysdeps/unix/sysv/linux/kernel-features.h')
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h21
1 files changed, 19 insertions, 2 deletions
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 034257edfa..555b82cf05 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -271,8 +271,25 @@
 # define __ASSUME_PRLIMIT64	1
 #endif
 
-/* sendmmsg is available in 2.6.39.  */
-#if __LINUX_KERNEL_VERSION >= 0x020627
+/* Support for sendmmsg functionality was added in 3.0.  The macros
+   defined correspond to those for accept4 and recvmmsg.  */
+#if __LINUX_KERNEL_VERSION >= 0x030000 && defined __ASSUME_SOCKETCALL
+# define __ASSUME_SENDMMSG_SOCKETCALL	1
+#endif
+
+/* The sendmmsg syscall was added for i386, x86_64, PowerPC, SH and
+   SPARC in 3.0.  */
+#if __LINUX_KERNEL_VERSION >= 0x030000					\
+    && (defined __i386__ || defined __x86_64__ || defined __powerpc__	\
+	|| defined __sh__ || defined __sparc__)
+# define __ASSUME_SENDMMSG_SYSCALL	1
+#endif
+#if defined __i386__ || defined __powerpc__ || defined __sh__ \
+    || defined __sparc__
+# define __ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL	1
+#endif
+
+#if defined __ASSUME_SENDMMSG_SOCKETCALL || defined __ASSUME_SENDMMSG_SYSCALL
 # define __ASSUME_SENDMMSG	1
 #endif