This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] i386: Remove six-argument specialized implementations


Hi

This patch is another of the required adjustments for the fix for bz12683
(Race conditions in pthread cancellation) and the idea is to remove the
i386 assembly implementation for 6 arguments syscall now that GLIBC has
internal support to allow it through default C code.

This patch removes the specialized i386 assembly implementations for
fallocate{64}, pselect, and sync_file_range now that i386 have
support for 6 argument syscalls.

Tested on i386.

--

	* sysdeps/unix/sysv/linux/i386/Makefile [$(subdir) = misc)]: Remove
	call_pselect6 object.
	[$(subdir) = io]: Remove call_sync_file_range object.
	* sysdeps/unix/sysv/linux/i386/call_pselect6.S: Remove file.
	* sysdeps/unix/sysv/linux/i386/call_sync_file_range.S: Remove file.
	* sysdeps/unix/sysv/linux/i386/pselect.c: Remove file.
	* sysdeps/unix/sysv/linux/i386/sync_file_range.c: Remove file.

---

diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile
index e0fb1ed..80da593 100644
--- a/sysdeps/unix/sysv/linux/i386/Makefile
+++ b/sysdeps/unix/sysv/linux/i386/Makefile
@@ -2,7 +2,7 @@
 default-abi := 32
 
 ifeq ($(subdir),misc)
-sysdep_routines += ioperm iopl vm86 call_pselect6
+sysdep_routines += ioperm iopl vm86
 endif
 
 ifeq ($(subdir),elf)
@@ -12,7 +12,7 @@ endif
 
 # fallocate, posix_fallocate use six-argument inline syscalls.
 ifeq ($(subdir),io)
-sysdep_routines += call_sync_file_range libc-do-syscall
+sysdep_routines += libc-do-syscall
 endif
 
 # libpthread uses six-argument inline syscalls.
diff --git a/sysdeps/unix/sysv/linux/i386/call_pselect6.S b/sysdeps/unix/sysv/linux/i386/call_pselect6.S
deleted file mode 100644
index 610c263..0000000
--- a/sysdeps/unix/sysv/linux/i386/call_pselect6.S
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (C) 2006-2015 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2006.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-#ifdef __NR_pselect6
-	.text
-ENTRY(__call_pselect6)
-	.hidden __call_pselect6
-	pushl	%ebx
-	cfi_adjust_cfa_offset (4)
-	pushl	%esi
-	cfi_adjust_cfa_offset (4)
-	pushl	%edi
-	cfi_adjust_cfa_offset (4)
-	pushl	%ebp
-	cfi_adjust_cfa_offset (4)
-	cfi_rel_offset (ebp, 0)
-	cfi_rel_offset (edi, 4)
-	cfi_rel_offset (esi, 8)
-	cfi_rel_offset (ebx, 12)
-
-	movl	$__NR_pselect6, %eax
-	movl	20(%esp), %ebx
-	movl	24(%esp), %ecx
-	movl	28(%esp), %edx
-	movl	32(%esp), %esi
-	movl	36(%esp), %edi
-	movl	40(%esp), %ebp
-
-	/* The syscall handling cannot handle 6 parameters.  Yet.  */
-	int	$0x80
-
-	popl	%ebp
-	cfi_adjust_cfa_offset (-4)
-	cfi_restore (ebp)
-	popl	%edi
-	cfi_adjust_cfa_offset (-4)
-	cfi_restore (edi)
-	popl	%esi
-	cfi_adjust_cfa_offset (-4)
-	cfi_restore (esi)
-	popl	%ebx
-	cfi_adjust_cfa_offset (-4)
-	cfi_restore (ebx)
-
-	ret
-END(__call_pselect6)
-#endif
diff --git a/sysdeps/unix/sysv/linux/i386/call_sync_file_range.S b/sysdeps/unix/sysv/linux/i386/call_sync_file_range.S
deleted file mode 100644
index 02c2048..0000000
--- a/sysdeps/unix/sysv/linux/i386/call_sync_file_range.S
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Selective file content synch'ing.
-   Copyright (C) 2006-2015 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#define _ERRNO_H        1
-#include <bits/errno.h>
-
-
-	.text
-ENTRY (__call_sync_file_range)
-#ifdef __NR_sync_file_range
-	pushl	%ebx
-	cfi_adjust_cfa_offset (4)
-	pushl	%esi
-	cfi_adjust_cfa_offset (4)
-	pushl	%edi
-	cfi_adjust_cfa_offset (4)
-	pushl	%ebp
-	cfi_adjust_cfa_offset (4)
-
-	movl	20(%esp), %ebx
-	cfi_rel_offset (ebx, 12)
-	movl	24(%esp), %ecx
-	movl	28(%esp), %edx
-	movl	32(%esp), %esi
-	cfi_rel_offset (esi, 8)
-	movl	36(%esp), %edi
-	cfi_rel_offset (edi, 4)
-	movl	40(%esp), %ebp
-	cfi_rel_offset (ebp, 0)
-
-	movl	$SYS_ify(sync_file_range), %eax
-	ENTER_KERNEL
-
-	popl	%ebp
-	cfi_adjust_cfa_offset (-4)
-	cfi_restore (ebp)
-	popl	%edi
-	cfi_adjust_cfa_offset (-4)
-	cfi_restore (edi)
-	popl	%esi
-	cfi_adjust_cfa_offset (-4)
-	cfi_restore (esi)
-	popl	%ebx
-	cfi_adjust_cfa_offset (-4)
-	cfi_restore (ebx)
-
-	cmpl	$-4095, %eax
-	jae	SYSCALL_ERROR_LABEL
-#else
-	movl	$-ENOSYS, %eax
-	jmp	SYSCALL_ERROR_LABEL
-#endif
-	ret
-PSEUDO_END (__call_sync_file_range)
diff --git a/sysdeps/unix/sysv/linux/i386/pselect.c b/sysdeps/unix/sysv/linux/i386/pselect.c
deleted file mode 100644
index 2646608..0000000
--- a/sysdeps/unix/sysv/linux/i386/pselect.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <sys/select.h>
-
-extern int __call_pselect6 (int nfds, fd_set *readfds, fd_set *writefds,
-			    fd_set *exceptfds, const struct timespec *timeout,
-			    void *data) attribute_hidden;
-
-
-#define CALL_PSELECT6(nfds, readfds, writefds, exceptfds, timeout, data) \
-  ({ int r = __call_pselect6 (nfds, readfds, writefds, exceptfds, timeout,    \
-			      data);					      \
-     if (r < 0 && r > -4096)						      \
-       {								      \
-	 __set_errno (-r);						      \
-	 r = -1;							      \
-       }								      \
-     r; })
-
-#include "../pselect.c"
diff --git a/sysdeps/unix/sysv/linux/i386/sync_file_range.c b/sysdeps/unix/sysv/linux/i386/sync_file_range.c
deleted file mode 100644
index 8ce0287..0000000
--- a/sysdeps/unix/sysv/linux/i386/sync_file_range.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Selective file content synch'ing.
-   Copyright (C) 2006-2015 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <sysdep-cancel.h>
-
-
-extern int __call_sync_file_range (int fd, off64_t offset, off64_t nbytes,
-				   unsigned int flags)
-     attribute_hidden;
-
-
-int
-sync_file_range (int fd, __off64_t from, __off64_t to, unsigned int flags)
-{
-  if (SINGLE_THREAD_P)
-    return __call_sync_file_range (fd, from, to, flags);
-
-  int result;
-  int oldtype = LIBC_CANCEL_ASYNC ();
-
-  result = __call_sync_file_range (fd, from, to, flags);
-
-  LIBC_CANCEL_RESET (oldtype);
-
-  return result;
-}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]