This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Use direct socket syscalls for new kernels on i386, m68k, microblaze, sh
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: libc-alpha at sourceware dot org
- Date: Wed, 9 Dec 2015 17:01:10 -0200
- Subject: Re: Use direct socket syscalls for new kernels on i386, m68k, microblaze, sh
- Authentication-results: sourceware.org; auth=none
- References: <alpine dot DEB dot 2 dot 10 dot 1512091654140 dot 27205 at digraph dot polyomino dot org dot uk>
LGTM.
On 09-12-2015 14:56, Joseph Myers wrote:
> Now that we have __ASSUME_* macros for direct socket syscalls to use
> them instead of socketcall when they can be assumed to be available on
> socketcall architectures, this patch defines those macros when
> appropriate for i386, m68k, microblaze and sh (for 4.3, 4.3, all
> supported kernels and 2.6.37, respectively; the only use of socketcall
> support on microblaze is it allows accept4 and sendmmsg to be
> supported on a wider range of kernel versions).
>
> David, it seems that 32-bit SPARC is the only architecture supported
> by glibc that still lacks these direct syscalls. It would be good to
> get them added to the SPARC kernel so we can eventually eliminate
> socketcall support in glibc (and thereby just use entries in
> sysdeps/unix/syscalls.list for most of these functions) when we can
> assume new-enough kernels.
>
> Tested for i386 (testsuite, and that installed shared libraries are
> unchanged by this patch - not using a new enough kernel, so this
> doesn't actually test much, but the i386 and m68k code is essentially
> the same as that already in use for s390).
>
> 2015-12-09 Joseph Myers <joseph@codesourcery.com>
>
> * sysdeps/unix/sysv/linux/i386/kernel-features.h
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_SOCKET_SYSCALL):
> New macro.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_SOCKETPAIR_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_BIND_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_CONNECT_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_LISTEN_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_ACCEPT4_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_GETSOCKOPT_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_SETSOCKOPT_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_GETSOCKNAME_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_GETPEERNAME_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_SENDTO_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_SENDTO_FOR_SEND_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_SENDMSG_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_RECVFROM_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_RECVFROM_FOR_RECV_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_RECVMSG_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_SHUTDOWN_SYSCALL):
> Likewise.
> * sysdeps/unix/sysv/linux/m68k/kernel-features.h
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_RECVMMSG_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_SENDMMSG_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_SOCKET_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_SOCKETPAIR_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_BIND_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_CONNECT_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_LISTEN_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_ACCEPT4_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_GETSOCKOPT_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_SETSOCKOPT_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_GETSOCKNAME_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_GETPEERNAME_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_SENDTO_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_SENDTO_FOR_SEND_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_SENDMSG_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_RECVFROM_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300]
> (__ASSUME_RECVFROM_FOR_RECV_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_RECVMSG_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x040300] (__ASSUME_SHUTDOWN_SYSCALL):
> Likewise.
> * sysdeps/unix/sysv/linux/microblaze/kernel-features.h
> (__ASSUME_SOCKET_SYSCALL): Likewise.
> (__ASSUME_BIND_SYSCALL): Likewise.
> (__ASSUME_CONNECT_SYSCALL): Likewise.
> (__ASSUME_LISTEN_SYSCALL): Likewise.
> (__ASSUME_ACCEPT_SYSCALL): Likewise.
> (__ASSUME_GETSOCKNAME_SYSCALL): Likewise.
> (__ASSUME_GETPEERNAME_SYSCALL): Likewise.
> (__ASSUME_SOCKETPAIR_SYSCALL): Likewise.
> (__ASSUME_SEND_SYSCALL): Likewise.
> (__ASSUME_SENDTO_SYSCALL): Likewise.
> (__ASSUME_RECV_SYSCALL): Likewise.
> (__ASSUME_RECVFROM_SYSCALL): Likewise.
> (__ASSUME_SHUTDOWN_SYSCALL): Likewise.
> (__ASSUME_GETSOCKOPT_SYSCALL): Likewise.
> (__ASSUME_SETSOCKOPT_SYSCALL): Likewise.
> (__ASSUME_SENDMSG_SYSCALL): Likewise.
> (__ASSUME_RECVMSG_SYSCALL): Likewise.
> * sysdeps/unix/sysv/linux/sh/kernel-features.h
> [__LINUX_KERNEL_VERSION >= 0x020625] (__ASSUME_SOCKET_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625] (__ASSUME_BIND_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625] (__ASSUME_CONNECT_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625] (__ASSUME_LISTEN_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625] (__ASSUME_ACCEPT_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625]
> (__ASSUME_GETSOCKNAME_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625]
> (__ASSUME_GETPEERNAME_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625]
> (__ASSUME_SOCKETPAIR_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625] (__ASSUME_SEND_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625] (__ASSUME_SENDTO_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625] (__ASSUME_RECV_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625] (__ASSUME_RECVFROM_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625] (__ASSUME_SHUTDOWN_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625]
> (__ASSUME_GETSOCKOPT_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625]
> (__ASSUME_SETSOCKOPT_SYSCALL): Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625] (__ASSUME_SENDMSG_SYSCALL):
> Likewise.
> [__LINUX_KERNEL_VERSION >= 0x020625] (__ASSUME_RECVMSG_SYSCALL):
> Likewise.
>
> diff --git a/sysdeps/unix/sysv/linux/i386/kernel-features.h b/sysdeps/unix/sysv/linux/i386/kernel-features.h
> index ee240a7..826fcc3 100644
> --- a/sysdeps/unix/sysv/linux/i386/kernel-features.h
> +++ b/sysdeps/unix/sysv/linux/i386/kernel-features.h
> @@ -32,4 +32,26 @@
> #endif
> #define __ASSUME_SENDMMSG_SYSCALL_WITH_SOCKETCALL 1
>
> +/* Direct socketcalls available with kernel 4.3. */
> +#if __LINUX_KERNEL_VERSION >= 0x040300
> +# define __ASSUME_SOCKET_SYSCALL 1
> +# define __ASSUME_SOCKETPAIR_SYSCALL 1
> +# define __ASSUME_BIND_SYSCALL 1
> +# define __ASSUME_CONNECT_SYSCALL 1
> +# define __ASSUME_LISTEN_SYSCALL 1
> +# define __ASSUME_ACCEPT4_SYSCALL 1
> +# define __ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL 1
> +# define __ASSUME_GETSOCKOPT_SYSCALL 1
> +# define __ASSUME_SETSOCKOPT_SYSCALL 1
> +# define __ASSUME_GETSOCKNAME_SYSCALL 1
> +# define __ASSUME_GETPEERNAME_SYSCALL 1
> +# define __ASSUME_SENDTO_SYSCALL 1
> +# define __ASSUME_SENDTO_FOR_SEND_SYSCALL 1
> +# define __ASSUME_SENDMSG_SYSCALL 1
> +# define __ASSUME_RECVFROM_SYSCALL 1
> +# define __ASSUME_RECVFROM_FOR_RECV_SYSCALL 1
> +# define __ASSUME_RECVMSG_SYSCALL 1
> +# define __ASSUME_SHUTDOWN_SYSCALL 1
> +#endif
> +
> #include_next <kernel-features.h>
> diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
> index ae1a11f..d373d4a 100644
> --- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h
> +++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
> @@ -20,6 +20,30 @@
> /* m68k uses socketcall. */
> #define __ASSUME_SOCKETCALL 1
>
> +/* Direct socketcalls available with kernel 4.3. */
> +#if __LINUX_KERNEL_VERSION >= 0x040300
> +# define __ASSUME_RECVMMSG_SYSCALL 1
> +# define __ASSUME_SENDMMSG_SYSCALL 1
> +# define __ASSUME_SOCKET_SYSCALL 1
> +# define __ASSUME_SOCKETPAIR_SYSCALL 1
> +# define __ASSUME_BIND_SYSCALL 1
> +# define __ASSUME_CONNECT_SYSCALL 1
> +# define __ASSUME_LISTEN_SYSCALL 1
> +# define __ASSUME_ACCEPT4_SYSCALL 1
> +# define __ASSUME_ACCEPT4_FOR_ACCEPT_SYSCALL 1
> +# define __ASSUME_GETSOCKOPT_SYSCALL 1
> +# define __ASSUME_SETSOCKOPT_SYSCALL 1
> +# define __ASSUME_GETSOCKNAME_SYSCALL 1
> +# define __ASSUME_GETPEERNAME_SYSCALL 1
> +# define __ASSUME_SENDTO_SYSCALL 1
> +# define __ASSUME_SENDTO_FOR_SEND_SYSCALL 1
> +# define __ASSUME_SENDMSG_SYSCALL 1
> +# define __ASSUME_RECVFROM_SYSCALL 1
> +# define __ASSUME_RECVFROM_FOR_RECV_SYSCALL 1
> +# define __ASSUME_RECVMSG_SYSCALL 1
> +# define __ASSUME_SHUTDOWN_SYSCALL 1
> +#endif
> +
> #include_next <kernel-features.h>
>
> /* These syscalls were added only in 3.0 for m68k. */
> diff --git a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
> index f2c580d3..241f1f3 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
> +++ b/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
> @@ -19,6 +19,25 @@
> /* MicroBlaze uses socketcall. */
> #define __ASSUME_SOCKETCALL 1
>
> +/* All supported kernel versions for MicroBlaze have these syscalls. */
> +#define __ASSUME_SOCKET_SYSCALL 1
> +#define __ASSUME_BIND_SYSCALL 1
> +#define __ASSUME_CONNECT_SYSCALL 1
> +#define __ASSUME_LISTEN_SYSCALL 1
> +#define __ASSUME_ACCEPT_SYSCALL 1
> +#define __ASSUME_GETSOCKNAME_SYSCALL 1
> +#define __ASSUME_GETPEERNAME_SYSCALL 1
> +#define __ASSUME_SOCKETPAIR_SYSCALL 1
> +#define __ASSUME_SEND_SYSCALL 1
> +#define __ASSUME_SENDTO_SYSCALL 1
> +#define __ASSUME_RECV_SYSCALL 1
> +#define __ASSUME_RECVFROM_SYSCALL 1
> +#define __ASSUME_SHUTDOWN_SYSCALL 1
> +#define __ASSUME_GETSOCKOPT_SYSCALL 1
> +#define __ASSUME_SETSOCKOPT_SYSCALL 1
> +#define __ASSUME_SENDMSG_SYSCALL 1
> +#define __ASSUME_RECVMSG_SYSCALL 1
> +
> /* Support for the accept4 and recvmmsg syscalls was added in 2.6.33. */
> #if __LINUX_KERNEL_VERSION >= 0x020621
> # define __ASSUME_ACCEPT4_SYSCALL 1
> diff --git a/sysdeps/unix/sysv/linux/sh/kernel-features.h b/sysdeps/unix/sysv/linux/sh/kernel-features.h
> index 5e3487c..17fbdd1 100644
> --- a/sysdeps/unix/sysv/linux/sh/kernel-features.h
> +++ b/sysdeps/unix/sysv/linux/sh/kernel-features.h
> @@ -20,6 +20,27 @@
> /* SH uses socketcall. */
> #define __ASSUME_SOCKETCALL 1
>
> +/* These syscalls were added for SH in 2.6.37. */
> +#if __LINUX_KERNEL_VERSION >= 0x020625
> +# define __ASSUME_SOCKET_SYSCALL 1
> +# define __ASSUME_BIND_SYSCALL 1
> +# define __ASSUME_CONNECT_SYSCALL 1
> +# define __ASSUME_LISTEN_SYSCALL 1
> +# define __ASSUME_ACCEPT_SYSCALL 1
> +# define __ASSUME_GETSOCKNAME_SYSCALL 1
> +# define __ASSUME_GETPEERNAME_SYSCALL 1
> +# define __ASSUME_SOCKETPAIR_SYSCALL 1
> +# define __ASSUME_SEND_SYSCALL 1
> +# define __ASSUME_SENDTO_SYSCALL 1
> +# define __ASSUME_RECV_SYSCALL 1
> +# define __ASSUME_RECVFROM_SYSCALL 1
> +# define __ASSUME_SHUTDOWN_SYSCALL 1
> +# define __ASSUME_GETSOCKOPT_SYSCALL 1
> +# define __ASSUME_SETSOCKOPT_SYSCALL 1
> +# define __ASSUME_SENDMSG_SYSCALL 1
> +# define __ASSUME_RECVMSG_SYSCALL 1
> +#endif
> +
> /* The accept4 syscall was added for SH in 2.6.37. */
> #if __LINUX_KERNEL_VERSION >= 0x020625
> # define __ASSUME_ACCEPT4_SYSCALL 1
>