From patchwork Wed May 20 14:10:33 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 6815 X-Patchwork-Delegate: azanella@linux.vnet.ibm.com Received: (qmail 55397 invoked by alias); 20 May 2015 14:10:40 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 55340 invoked by uid 89); 20 May 2015 14:10:40 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.3 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-qk0-f180.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to :subject:content-type:content-transfer-encoding; bh=pPjXg1K0Co9QUYorRkJnZAsSGQU9RKf4EeJP6CfwRkw=; b=Yscc4UbpH3AbaFxtd5tGWhYj3247WnEzSw7NSB7Bh2bUiMD7JgxsxOEwJNyqxqEQDG Utwriz/hM9Q8rE05DU2GdbFdxB6n8tYvLfOABov4FWhWi1RzSV/H1w9I5hwvuuU0JFrT bLDeR0GO0Imw1yVDJOLU9DE49iiLHk84ufOc2jCLMcOJihsdzN8xPbJtlpMPVmLC4SMz H4CQEmtszSTy9+UIWqy3YwhrFPtJ9NavF9UdHVckT500JmwsqGY62F3PhRFqzeAWPIc1 gMf96wsqZ14lnQAESc2NhoSGai/2EiApxUgDjZ1ifwsHV10mXYA0ZNqTp86wT0gv0bMs aH0Q== X-Gm-Message-State: ALoCoQlnh1rPPH5GiH3UvX0BYKMMcYwBaYX0NHb+Uy8VolAuOdIJffqH0Vc/2Va0e7NPhsy9JsLZ X-Received: by 10.55.41.166 with SMTP id p38mr24230713qkp.93.1432131035995; Wed, 20 May 2015 07:10:35 -0700 (PDT) Message-ID: <555C95D9.4060900@linaro.org> Date: Wed, 20 May 2015 11:10:33 -0300 From: Adhemerval Zanella User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: GNU C Library Subject: [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 , 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 - . */ - -#include - -#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 - . */ - -#include -#define _ERRNO_H 1 -#include - - - .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 - -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 - . */ - -#include -#include -#include - - -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; -}