diff options
-rw-r--r-- | ChangeLog | 43 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ports/ChangeLog.hppa | 5 | ||||
-rw-r--r-- | ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/aarch64/kernel-features.h | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/kernel-features.h | 3 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/kernel-features.h | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/kernel-features.h | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/internal_sendmmsg.S | 14 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/kernel-features.h | 21 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/microblaze/kernel-features.h | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mips/kernel-features.h | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sendmmsg.c | 13 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/tile/kernel-features.h | 5 |
14 files changed, 124 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog index 73f614b64a..4ad0fe6594 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,48 @@ 2014-02-20 Joseph Myers <joseph@codesourcery.com> + [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. + [BZ #16610] * sysdeps/unix/sysv/linux/kernel-features.h [__LINUX_KERNEL_VERSION >= 0x020621 && __ASSUME_SOCKETCALL] diff --git a/NEWS b/NEWS index 35da791fd6..5a7aa73a93 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, 16610. + 15894, 16447, 16545, 16574, 16609, 16610, 16611. * 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 5829e55c71..c8eb0728b9 100644 --- a/ports/ChangeLog.hppa +++ b/ports/ChangeLog.hppa @@ -1,5 +1,10 @@ 2014-02-20 Joseph Myers <joseph@codesourcery.com> + [BZ #16611] + * sysdeps/unix/sysv/linux/hppa/kernel-features.h + [__LINUX_KERNEL_VERSION >= 0x030100] (__ASSUME_SENDMMSG_SYSCALL): + Define. + [BZ #16610] * sysdeps/unix/sysv/linux/hppa/kernel-features.h [__LINUX_KERNEL_VERSION >= 0x020622] (__ASSUME_RECVMMSG_SYSCALL): diff --git a/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h b/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h index 75e1999d81..e869c14bdd 100644 --- a/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h +++ b/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h @@ -36,4 +36,9 @@ # define __ASSUME_RECVMMSG_SYSCALL 1 #endif +/* Support for the sendmmsg syscall was added in 3.1. */ +#if __LINUX_KERNEL_VERSION >= 0x030100 +# define __ASSUME_SENDMMSG_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 3f9cd049e9..417f89b2d9 100644 --- a/sysdeps/unix/sysv/linux/aarch64/kernel-features.h +++ b/sysdeps/unix/sysv/linux/aarch64/kernel-features.h @@ -31,6 +31,7 @@ #define __ASSUME_O_CLOEXEC 1 #define __ASSUME_PIPE2 1 #define __ASSUME_RECVMMSG_SYSCALL 1 +#define __ASSUME_SENDMMSG_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 6e4a515749..e691bb0e1e 100644 --- a/sysdeps/unix/sysv/linux/alpha/kernel-features.h +++ b/sysdeps/unix/sysv/linux/alpha/kernel-features.h @@ -47,9 +47,10 @@ # define __ASSUME_RECVMMSG_SYSCALL 1 #endif -/* Support for accept4 was added for alpha in 3.2. */ +/* Support for accept4 and sendmmsg was added for alpha in 3.2. */ #if __LINUX_KERNEL_VERSION >= 0x030200 # define __ASSUME_ACCEPT4_SYSCALL 1 +# define __ASSUME_SENDMMSG_SYSCALL 1 #endif #include_next <kernel-features.h> diff --git a/sysdeps/unix/sysv/linux/arm/kernel-features.h b/sysdeps/unix/sysv/linux/arm/kernel-features.h index 7b43e365e6..401343be8d 100644 --- a/sysdeps/unix/sysv/linux/arm/kernel-features.h +++ b/sysdeps/unix/sysv/linux/arm/kernel-features.h @@ -41,6 +41,11 @@ # define __ASSUME_ACCEPT4_SYSCALL 1 #endif +/* Support for the sendmmsg syscall was added in 3.0. */ +#if __LINUX_KERNEL_VERSION >= 0x030000 +# define __ASSUME_SENDMMSG_SYSCALL 1 +#endif + #include_next <kernel-features.h> /* Support for pselect6, ppoll and epoll_pwait was added in 2.6.32. */ diff --git a/sysdeps/unix/sysv/linux/ia64/kernel-features.h b/sysdeps/unix/sysv/linux/ia64/kernel-features.h index b4955d9b1d..dd4de39fc7 100644 --- a/sysdeps/unix/sysv/linux/ia64/kernel-features.h +++ b/sysdeps/unix/sysv/linux/ia64/kernel-features.h @@ -52,6 +52,11 @@ # define __ASSUME_RECVMMSG_SYSCALL 1 #endif +/* Support for the sendmmsg syscall was added in 3.0. */ +#if __LINUX_KERNEL_VERSION >= 0x030000 +# define __ASSUME_SENDMMSG_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_sendmmsg.S b/sysdeps/unix/sysv/linux/internal_sendmmsg.S index e6681f099d..4d903ea729 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 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 diff --git a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h index 7266e96495..1e9aba5f42 100644 --- a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h +++ b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h @@ -36,4 +36,9 @@ #endif #define __ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL 1 +/* Support for the sendmmsg syscall was added in 3.3. */ +#if __LINUX_KERNEL_VERSION >= 0x030300 +# define __ASSUME_SENDMMSG_SYSCALL 1 +#endif + #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 22064d9bd3..52cbf3a5ba 100644 --- a/sysdeps/unix/sysv/linux/mips/kernel-features.h +++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h @@ -41,6 +41,11 @@ # define __ASSUME_RECVMMSG_SYSCALL 1 #endif +/* Support for the sendmmsg syscall was added in 3.1. */ +#if __LINUX_KERNEL_VERSION >= 0x030100 +# define __ASSUME_SENDMMSG_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/sendmmsg.c b/sysdeps/unix/sysv/linux/sendmmsg.c index f8494be044..30740664d0 100644 --- a/sysdeps/unix/sysv/linux/sendmmsg.c +++ b/sysdeps/unix/sysv/linux/sendmmsg.c @@ -23,6 +23,14 @@ #include <sys/syscall.h> #include <kernel-features.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 #ifdef __NR_sendmmsg int @@ -42,7 +50,7 @@ __sendmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags) libc_hidden_def (__sendmmsg) weak_alias (__sendmmsg, sendmmsg) #elif defined __NR_socketcall -# ifndef __ASSUME_SENDMMSG +# ifndef __ASSUME_SENDMMSG_SOCKETCALL extern int __internal_sendmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags) attribute_hidden; @@ -86,7 +94,8 @@ __sendmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags) libc_hidden_def (__sendmmsg) weak_alias (__sendmmsg, sendmmsg) # else -/* When __ASSUME_SENDMMSG sendmmsg is defined in internal_sendmmsg.S. */ +/* When __ASSUME_SENDMMSG_SOCKETCALL sendmmsg is defined in + internal_sendmmsg.S. */ # endif #else # include <socket/sendmmsg.c> diff --git a/sysdeps/unix/sysv/linux/tile/kernel-features.h b/sysdeps/unix/sysv/linux/tile/kernel-features.h index b415d8f10f..bf7bddc47f 100644 --- a/sysdeps/unix/sysv/linux/tile/kernel-features.h +++ b/sysdeps/unix/sysv/linux/tile/kernel-features.h @@ -29,6 +29,11 @@ #define __ASSUME_DUP3 1 #define __ASSUME_RECVMMSG_SYSCALL 1 +/* Support for the sendmmsg syscall was added in 3.0. */ +#if __LINUX_KERNEL_VERSION >= 0x030000 +# define __ASSUME_SENDMMSG_SYSCALL 1 +#endif + #include_next <kernel-features.h> /* Define this if your 32-bit syscall API requires 64-bit register |