diff options
author | Joseph Myers <joseph@codesourcery.com> | 2014-02-20 17:55:35 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2014-02-20 17:55:35 +0000 |
commit | bc688c10296cb416c082e44aa8bf881505aec64a (patch) | |
tree | 2de804af0d0c54687a7c002c8e049f3180c1b535 /sysdeps/unix/sysv/linux/internal_sendmmsg.S | |
parent | 0e31b18ca280c6056d41d0235b85d6890367ff46 (diff) | |
download | glibc-bc688c10296cb416c082e44aa8bf881505aec64a.zip glibc-bc688c10296cb416c082e44aa8bf881505aec64a.tar.gz glibc-bc688c10296cb416c082e44aa8bf881505aec64a.tar.bz2 |
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/internal_sendmmsg.S')
-rw-r--r-- | sysdeps/unix/sysv/linux/internal_sendmmsg.S | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/sysdeps/unix/sysv/linux/internal_sendmmsg.S b/sysdeps/unix/sysv/linux/internal_sendmmsg.S index e6681f0..4d903ea 100644 --- a/sysdeps/unix/sysv/linux/internal_sendmmsg.S +++ b/sysdeps/unix/sysv/linux/internal_sendmmsg.S @@ -1,15 +1,25 @@ #include <kernel-features.h> #include <sys/syscall.h> + +/* Do not use the sendmmsg syscall on socketcall architectures unless + it was added at the same time as the socketcall support or can be + assumed to be present. */ +#if defined __ASSUME_SOCKETCALL \ + && !defined __ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL \ + && !defined __ASSUME_SENDMMSG_SYSCALL +# undef __NR_sendmmsg +#endif + #if !defined __NR_sendmmsg && defined __NR_socketcall # define socket sendmmsg -# ifndef __ASSUME_SENDMMSG +# ifndef __ASSUME_SENDMMSG_SOCKETCALL # define __socket __internal_sendmmsg # define NO_WEAK_ALIAS # endif # define NARGS 4 # define NEED_CANCELLATION # include <socket.S> -# ifdef __ASSUME_SENDMMSG +# ifdef __ASSUME_SENDMMSG_SOCKETCALL libc_hidden_def (__sendmmsg) # endif #endif |