diff options
Diffstat (limited to 'sysdeps/unix')
-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 |
10 files changed, 70 insertions, 7 deletions
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 |