mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	Linux: Assume and consolidate shutdown wire-up syscall
And disable if kernel does not support it. Checked on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
		
				
					committed by
					
						
						Adhemerval Zanella
					
				
			
			
				
	
			
			
			
						parent
						
							377a14a22a
						
					
				
				
					commit
					127945c561
				
			@@ -3,4 +3,3 @@
 | 
				
			|||||||
# Socket APIs
 | 
					# Socket APIs
 | 
				
			||||||
getsockname	-	getsockname	i:ipp	__getsockname	getsockname
 | 
					getsockname	-	getsockname	i:ipp	__getsockname	getsockname
 | 
				
			||||||
getpeername	-	getpeername	i:ipp	__getpeername	getpeername
 | 
					getpeername	-	getpeername	i:ipp	__getpeername	getpeername
 | 
				
			||||||
shutdown	-	shutdown	i:ii	__shutdown	shutdown
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,13 +21,13 @@
 | 
				
			|||||||
#if __LINUX_KERNEL_VERSION >= 0x040300
 | 
					#if __LINUX_KERNEL_VERSION >= 0x040300
 | 
				
			||||||
# define __ASSUME_GETSOCKNAME_SYSCALL        1
 | 
					# define __ASSUME_GETSOCKNAME_SYSCALL        1
 | 
				
			||||||
# define __ASSUME_GETPEERNAME_SYSCALL        1
 | 
					# define __ASSUME_GETPEERNAME_SYSCALL        1
 | 
				
			||||||
# define __ASSUME_SHUTDOWN_SYSCALL           1
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include_next <kernel-features.h>
 | 
					#include_next <kernel-features.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef __ASSUME_ACCEPT_SYSCALL
 | 
					#undef __ASSUME_ACCEPT_SYSCALL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Direct socketcalls available with kernel 4.3.  */
 | 
				
			||||||
#if __LINUX_KERNEL_VERSION < 0x040300
 | 
					#if __LINUX_KERNEL_VERSION < 0x040300
 | 
				
			||||||
# undef __ASSUME_ACCEPT4_SYSCALL
 | 
					# undef __ASSUME_ACCEPT4_SYSCALL
 | 
				
			||||||
# undef __ASSUME_SENDMSG_SYSCALL
 | 
					# undef __ASSUME_SENDMSG_SYSCALL
 | 
				
			||||||
@@ -41,6 +41,7 @@
 | 
				
			|||||||
# undef __ASSUME_SOCKET_SYSCALL
 | 
					# undef __ASSUME_SOCKET_SYSCALL
 | 
				
			||||||
# undef __ASSUME_SOCKETPAIR_SYSCALL
 | 
					# undef __ASSUME_SOCKETPAIR_SYSCALL
 | 
				
			||||||
# undef __ASSUME_LISTEN_SYSCALL
 | 
					# undef __ASSUME_LISTEN_SYSCALL
 | 
				
			||||||
 | 
					# undef __ASSUME_SHUTDOWN_SYSCALL
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* i686 only supports ipc syscall before 5.1.  */
 | 
					/* i686 only supports ipc syscall before 5.1.  */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -83,6 +83,7 @@
 | 
				
			|||||||
#define __ASSUME_SOCKET_SYSCALL		1
 | 
					#define __ASSUME_SOCKET_SYSCALL		1
 | 
				
			||||||
#define __ASSUME_SOCKETPAIR_SYSCALL	1
 | 
					#define __ASSUME_SOCKETPAIR_SYSCALL	1
 | 
				
			||||||
#define __ASSUME_LISTEN_SYSCALL		1
 | 
					#define __ASSUME_LISTEN_SYSCALL		1
 | 
				
			||||||
 | 
					#define __ASSUME_SHUTDOWN_SYSCALL	1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Support for SysV IPC through wired syscalls.  All supported architectures
 | 
					/* Support for SysV IPC through wired syscalls.  All supported architectures
 | 
				
			||||||
   either support ipc syscall and/or all the ipc correspondent syscalls.  */
 | 
					   either support ipc syscall and/or all the ipc correspondent syscalls.  */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,13 +21,13 @@
 | 
				
			|||||||
#if __LINUX_KERNEL_VERSION >= 0x040300
 | 
					#if __LINUX_KERNEL_VERSION >= 0x040300
 | 
				
			||||||
# define __ASSUME_GETSOCKNAME_SYSCALL        1
 | 
					# define __ASSUME_GETSOCKNAME_SYSCALL        1
 | 
				
			||||||
# define __ASSUME_GETPEERNAME_SYSCALL        1
 | 
					# define __ASSUME_GETPEERNAME_SYSCALL        1
 | 
				
			||||||
# define __ASSUME_SHUTDOWN_SYSCALL           1
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include_next <kernel-features.h>
 | 
					#include_next <kernel-features.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef __ASSUME_ACCEPT_SYSCALL
 | 
					#undef __ASSUME_ACCEPT_SYSCALL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Direct socketcalls available with kernel 4.3.  */
 | 
				
			||||||
#if __LINUX_KERNEL_VERSION < 0x040300
 | 
					#if __LINUX_KERNEL_VERSION < 0x040300
 | 
				
			||||||
# undef __ASSUME_ACCEPT4_SYSCALL
 | 
					# undef __ASSUME_ACCEPT4_SYSCALL
 | 
				
			||||||
# undef __ASSUME_RECVMMSG_SYSCALL
 | 
					# undef __ASSUME_RECVMMSG_SYSCALL
 | 
				
			||||||
@@ -43,6 +43,7 @@
 | 
				
			|||||||
# undef __ASSUME_SOCKET_SYSCALL
 | 
					# undef __ASSUME_SOCKET_SYSCALL
 | 
				
			||||||
# undef __ASSUME_SOCKETPAIR_SYSCALL
 | 
					# undef __ASSUME_SOCKETPAIR_SYSCALL
 | 
				
			||||||
# undef __ASSUME_LISTEN_SYSCALL
 | 
					# undef __ASSUME_LISTEN_SYSCALL
 | 
				
			||||||
 | 
					# undef __ASSUME_SHUTDOWN_SYSCALL
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* No support for PI futexes or robust mutexes before 3.10 for m68k.  */
 | 
					/* No support for PI futexes or robust mutexes before 3.10 for m68k.  */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,6 @@
 | 
				
			|||||||
#define __ASSUME_GETPEERNAME_SYSCALL	1
 | 
					#define __ASSUME_GETPEERNAME_SYSCALL	1
 | 
				
			||||||
#define __ASSUME_SEND_SYSCALL		1
 | 
					#define __ASSUME_SEND_SYSCALL		1
 | 
				
			||||||
#define __ASSUME_RECV_SYSCALL		1
 | 
					#define __ASSUME_RECV_SYSCALL		1
 | 
				
			||||||
#define __ASSUME_SHUTDOWN_SYSCALL	1
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include_next <kernel-features.h>
 | 
					#include_next <kernel-features.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,6 @@
 | 
				
			|||||||
#define __ASSUME_GETPEERNAME_SYSCALL	1
 | 
					#define __ASSUME_GETPEERNAME_SYSCALL	1
 | 
				
			||||||
#define __ASSUME_SEND_SYSCALL		1
 | 
					#define __ASSUME_SEND_SYSCALL		1
 | 
				
			||||||
#define __ASSUME_RECV_SYSCALL		1
 | 
					#define __ASSUME_RECV_SYSCALL		1
 | 
				
			||||||
#define __ASSUME_SHUTDOWN_SYSCALL	1
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Define this if your 32-bit syscall API requires 64-bit register
 | 
					/* Define this if your 32-bit syscall API requires 64-bit register
 | 
				
			||||||
   pairs to start with an even-number register.  */
 | 
					   pairs to start with an even-number register.  */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,13 +21,13 @@
 | 
				
			|||||||
#if __LINUX_KERNEL_VERSION >= 0x040300
 | 
					#if __LINUX_KERNEL_VERSION >= 0x040300
 | 
				
			||||||
# define __ASSUME_GETSOCKNAME_SYSCALL        1
 | 
					# define __ASSUME_GETSOCKNAME_SYSCALL        1
 | 
				
			||||||
# define __ASSUME_GETPEERNAME_SYSCALL        1
 | 
					# define __ASSUME_GETPEERNAME_SYSCALL        1
 | 
				
			||||||
# define __ASSUME_SHUTDOWN_SYSCALL           1
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include_next <kernel-features.h>
 | 
					#include_next <kernel-features.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef __ASSUME_ACCEPT_SYSCALL
 | 
					#undef __ASSUME_ACCEPT_SYSCALL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Direct socketcalls available with kernel 4.3.  */
 | 
				
			||||||
#if __LINUX_KERNEL_VERSION < 0x040300
 | 
					#if __LINUX_KERNEL_VERSION < 0x040300
 | 
				
			||||||
# undef __ASSUME_ACCEPT4_SYSCALL
 | 
					# undef __ASSUME_ACCEPT4_SYSCALL
 | 
				
			||||||
# undef __ASSUME_RECVMMSG_SYSCALL
 | 
					# undef __ASSUME_RECVMMSG_SYSCALL
 | 
				
			||||||
@@ -43,6 +43,7 @@
 | 
				
			|||||||
# undef __ASSUME_SOCKET_SYSCALL
 | 
					# undef __ASSUME_SOCKET_SYSCALL
 | 
				
			||||||
# undef __ASSUME_SOCKETPAIR_SYSCALL
 | 
					# undef __ASSUME_SOCKETPAIR_SYSCALL
 | 
				
			||||||
# undef __ASSUME_LISTEN_SYSCALL
 | 
					# undef __ASSUME_LISTEN_SYSCALL
 | 
				
			||||||
 | 
					# undef __ASSUME_SHUTDOWN_SYSCALL
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* s390 only supports ipc syscall before 5.1.  */
 | 
					/* s390 only supports ipc syscall before 5.1.  */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,6 @@
 | 
				
			|||||||
#define __ASSUME_GETPEERNAME_SYSCALL	1
 | 
					#define __ASSUME_GETPEERNAME_SYSCALL	1
 | 
				
			||||||
#define __ASSUME_SEND_SYSCALL		1
 | 
					#define __ASSUME_SEND_SYSCALL		1
 | 
				
			||||||
#define __ASSUME_RECV_SYSCALL		1
 | 
					#define __ASSUME_RECV_SYSCALL		1
 | 
				
			||||||
#define __ASSUME_SHUTDOWN_SYSCALL	1
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include_next <kernel-features.h>
 | 
					#include_next <kernel-features.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,19 +15,14 @@
 | 
				
			|||||||
   License along with the GNU C Library; if not, see
 | 
					   License along with the GNU C Library; if not, see
 | 
				
			||||||
   <https://www.gnu.org/licenses/>.  */
 | 
					   <https://www.gnu.org/licenses/>.  */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <errno.h>
 | 
					 | 
				
			||||||
#include <signal.h>
 | 
					 | 
				
			||||||
#include <sys/socket.h>
 | 
					#include <sys/socket.h>
 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <socketcall.h>
 | 
					#include <socketcall.h>
 | 
				
			||||||
#include <kernel-features.h>
 | 
					 | 
				
			||||||
#include <sys/syscall.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
__shutdown (int fd, int how)
 | 
					__shutdown (int fd, int how)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef __ASSUME_SHUTDOWN_SYSCALL
 | 
					#ifdef __ASSUME_SHUTDOWN_SYSCALL
 | 
				
			||||||
  return INLINE_SYSCALL (shutdown, 2, fd, how);
 | 
					  return INLINE_SYSCALL_CALL (shutdown, fd, how);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
  return SOCKETCALL (shutdown, fd, how);
 | 
					  return SOCKETCALL (shutdown, fd, how);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,8 +40,6 @@
 | 
				
			|||||||
# undef __ASSUME_SENDTO_SYSCALL
 | 
					# undef __ASSUME_SENDTO_SYSCALL
 | 
				
			||||||
# undef __ASSUME_GETSOCKOPT_SYSCALL
 | 
					# undef __ASSUME_GETSOCKOPT_SYSCALL
 | 
				
			||||||
# undef __ASSUME_SETSOCKOPT_SYSCALL
 | 
					# undef __ASSUME_SETSOCKOPT_SYSCALL
 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
# define __ASSUME_SHUTDOWN_SYSCALL           1
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* These syscalls were added for both 32-bit and 64-bit in 4.4.  */
 | 
					/* These syscalls were added for both 32-bit and 64-bit in 4.4.  */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user