This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] i386: Assembly Implementation cleanup
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Cc: "H.J. Lu" <hjl dot tools at gmail dot com>
- Date: Tue, 11 Aug 2015 15:49:23 -0300
- Subject: Re: [PATCH] i386: Assembly Implementation cleanup
- Authentication-results: sourceware.org; auth=none
- References: <5596AD3B dot 1060903 at linaro dot org> <559EC455 dot 7040709 at linaro dot org>
Ping.
On 09-07-2015 15:58, Adhemerval Zanella wrote:
> Ping.
>
> On 03-07-2015 12:41, Adhemerval Zanella wrote:
>> This patch removes i386 assembly implementation for epoll_wait, mmap,
>> mmap64, semtimeop now that i386 have 6 argument syscall support from
>> C code.
>>
>> The mmap implementation used is the wordsize-32 generic linux one.
>>
>> Tested in i386.
>>
>> ---
>>
>> * sysdeps/unix/sysv/linux/i386/mmap.c: New file.
>> * sysdeps/unix/sysv/linux/i386/epoll_pwait.S: Remove file.
>> * sysdeps/unix/sysv/linux/i386/mmap.S: Likewise.
>> * sysdeps/unix/sysv/linux/i386/mmap64.S: Likewise.
>> * sysdeps/unix/sysv/linux/i386/semtimedop.S: Likewise.
>>
>> --
>>
>> diff --git a/sysdeps/unix/sysv/linux/i386/epoll_pwait.S b/sysdeps/unix/sysv/linux/i386/epoll_pwait.S
>> deleted file mode 100644
>> index 65cfb98..0000000
>> --- a/sysdeps/unix/sysv/linux/i386/epoll_pwait.S
>> +++ /dev/null
>> @@ -1,78 +0,0 @@
>> -/* Copyright (C) 2007-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
>> -#include <bits/errno.h>
>> -#define _SIGNAL_H
>> -#include <bits/signum.h>
>> -
>> -
>> - .text
>> -ENTRY (epoll_pwait)
>> -
>> -#ifdef __NR_epoll_pwait
>> -
>> - /* Save registers. */
>> - pushl %ebp
>> - cfi_adjust_cfa_offset (4)
>> - pushl %ebx
>> - cfi_adjust_cfa_offset (4)
>> - pushl %esi
>> - cfi_adjust_cfa_offset (4)
>> - pushl %edi
>> - cfi_adjust_cfa_offset (4)
>> - cfi_rel_offset (edi, 0)
>> - cfi_rel_offset (esi, 4)
>> - cfi_rel_offset (ebx, 8)
>> - cfi_rel_offset (ebp, 12)
>> -
>> - movl 20(%esp), %ebx
>> - movl 24(%esp), %ecx
>> - movl 28(%esp), %edx
>> - movl 32(%esp), %esi
>> - movl 36(%esp), %edi
>> - movl $_NSIG/8, %ebp
>> - movl $__NR_epoll_pwait, %eax
>> -
>> - ENTER_KERNEL
>> -
>> - /* Restore registers. */
>> - 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)
>> - popl %ebp
>> - cfi_adjust_cfa_offset (-4)
>> - cfi_restore (ebp)
>> -
>> - /* If 0 > %eax > -4096 there was an error. */
>> - cmpl $-4096, %eax
>> - ja SYSCALL_ERROR_LABEL
>> -
>> - /* Successful; return the syscall's value. */
>> -#else
>> - movl $-ENOSYS, %eax
>> - jmp SYSCALL_ERROR_LABEL
>> -#endif
>> - ret
>> -PSEUDO_END (epoll_pwait)
>> diff --git a/sysdeps/unix/sysv/linux/i386/mmap.S b/sysdeps/unix/sysv/linux/i386/mmap.S
>> deleted file mode 100644
>> index daf807a..0000000
>> --- a/sysdeps/unix/sysv/linux/i386/mmap.S
>> +++ /dev/null
>> @@ -1,79 +0,0 @@
>> -/* Copyright (C) 1995-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 EINVAL 22
>> -
>> - .text
>> -
>> -ENTRY (__mmap)
>> -
>> - /* Save registers. */
>> - pushl %ebp
>> - cfi_adjust_cfa_offset (4)
>> - pushl %ebx
>> - cfi_adjust_cfa_offset (4)
>> - pushl %esi
>> - cfi_adjust_cfa_offset (4)
>> - pushl %edi
>> - cfi_adjust_cfa_offset (4)
>> -
>> - movl 20(%esp), %ebx
>> - cfi_rel_offset (ebx, 8)
>> - movl 24(%esp), %ecx
>> - movl 28(%esp), %edx
>> - movl 32(%esp), %esi
>> - cfi_rel_offset (esi, 4)
>> - movl 36(%esp), %edi
>> - cfi_rel_offset (edi, 0)
>> - movl 40(%esp), %ebp
>> - cfi_rel_offset (ebp, 12)
>> - testl $0xfff, %ebp
>> - movl $-EINVAL, %eax
>> - jne L(skip)
>> - shrl $12, %ebp /* mmap2 takes the offset in pages. */
>> -
>> - movl $SYS_ify(mmap2), %eax /* System call number in %eax. */
>> -
>> - /* Do the system call trap. */
>> - ENTER_KERNEL
>> -L(skip):
>> - /* Restore registers. */
>> - 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)
>> - popl %ebp
>> - cfi_adjust_cfa_offset (-4)
>> - cfi_restore (ebp)
>> -
>> - /* If 0 > %eax > -4096 there was an error. */
>> - cmpl $-4096, %eax
>> - ja SYSCALL_ERROR_LABEL
>> -
>> - /* Successful; return the syscall's value. */
>> - ret
>> -
>> -PSEUDO_END (__mmap)
>> -
>> -weak_alias (__mmap, mmap)
>> diff --git a/sysdeps/unix/sysv/linux/i386/mmap.c b/sysdeps/unix/sysv/linux/i386/mmap.c
>> new file mode 100644
>> index 0000000..2cb4907
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/i386/mmap.c
>> @@ -0,0 +1,18 @@
>> +/* Copyright (C) 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 <sysdeps/unix/sysv/linux/generic/wordsize-32/mmap.c>
>> diff --git a/sysdeps/unix/sysv/linux/i386/mmap64.S b/sysdeps/unix/sysv/linux/i386/mmap64.S
>> deleted file mode 100644
>> index 3cf6eb9..0000000
>> --- a/sysdeps/unix/sysv/linux/i386/mmap64.S
>> +++ /dev/null
>> @@ -1,116 +0,0 @@
>> -/* Copyright (C) 1995-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 EINVAL 22
>> -#define ENOSYS 38
>> -
>> -#define SVRSP 16 /* saved register space */
>> -#define PARMS 4+SVRSP /* space for 4 saved regs */
>> -#define ADDR PARMS
>> -#define LEN ADDR+4
>> -#define PROT LEN+4
>> -#define FLAGS PROT+4
>> -#define FD FLAGS+4
>> -#define OFFLO FD+4
>> -#define OFFHI OFFLO+4
>> -
>> - .text
>> -ENTRY (__mmap64)
>> -
>> - /* Save registers. */
>> - pushl %ebp
>> - cfi_adjust_cfa_offset (4)
>> - pushl %ebx
>> - cfi_adjust_cfa_offset (4)
>> - pushl %esi
>> - cfi_adjust_cfa_offset (4)
>> - pushl %edi
>> - cfi_adjust_cfa_offset (4)
>> -
>> - movl OFFLO(%esp), %edx
>> - movl OFFHI(%esp), %ecx
>> - testl $0xfff, %edx
>> - jne L(einval)
>> - shrdl $12, %ecx, %edx /* mmap2 takes the offset in pages. */
>> - shrl $12, %ecx
>> - jne L(einval)
>> - movl %edx, %ebp
>> - cfi_rel_offset (ebp, 12)
>> -
>> - movl ADDR(%esp), %ebx
>> - cfi_rel_offset (ebx, 8)
>> - movl LEN(%esp), %ecx
>> - movl PROT(%esp), %edx
>> - movl FLAGS(%esp), %esi
>> - cfi_rel_offset (esi, 4)
>> - movl FD(%esp), %edi
>> - cfi_rel_offset (edi, 0)
>> -
>> - movl $SYS_ify(mmap2), %eax /* System call number in %eax. */
>> -
>> - /* Do the system call trap. */
>> -L(do_syscall):
>> - ENTER_KERNEL
>> -
>> - /* Restore registers. */
>> - 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)
>> - popl %ebp
>> - cfi_adjust_cfa_offset (-4)
>> - cfi_restore (ebp)
>> -
>> - /* If 0 > %eax > -4096 there was an error. */
>> - cmpl $-4096, %eax
>> - ja SYSCALL_ERROR_LABEL
>> -
>> - /* Successful; return the syscall's value. */
>> - ret
>> -
>> - cfi_adjust_cfa_offset (16)
>> - cfi_rel_offset (ebp, 12)
>> - cfi_rel_offset (ebx, 8)
>> - cfi_rel_offset (esi, 4)
>> - cfi_rel_offset (edi, 0)
>> - /* This means the offset value is too large. */
>> -L(einval):
>> - 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)
>> - popl %ebp
>> - cfi_adjust_cfa_offset (-4)
>> - cfi_restore (ebp)
>> - movl $-EINVAL, %eax
>> - jmp SYSCALL_ERROR_LABEL
>> -
>> -PSEUDO_END (__mmap64)
>> -
>> -weak_alias (__mmap64, mmap64)
>> diff --git a/sysdeps/unix/sysv/linux/i386/semtimedop.S b/sysdeps/unix/sysv/linux/i386/semtimedop.S
>> deleted file mode 100644
>> index 80477b7..0000000
>> --- a/sysdeps/unix/sysv/linux/i386/semtimedop.S
>> +++ /dev/null
>> @@ -1,73 +0,0 @@
>> -/* Copyright (C) 2003-2015 Free Software Foundation, Inc.
>> - This file is part of the GNU C Library.
>> - Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
>> -
>> - 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 SYSOP_semtimedop 4
>> -
>> -#define SVRSP 12 /* saved register space */
>> -#define PARMS 4+SVRSP /* space for 3 saved regs */
>> -#define SEMID PARMS
>> -#define SOPS SEMID+4
>> -#define NSOPS SOPS+4
>> -#define TIMEOUT NSOPS+4
>> -
>> - .text
>> -ENTRY (semtimedop)
>> -
>> - pushl %ebp
>> - cfi_adjust_cfa_offset (4)
>> - pushl %ebx
>> - cfi_adjust_cfa_offset (4)
>> - pushl %edi
>> - cfi_adjust_cfa_offset (4)
>> -
>> - movl $SYSOP_semtimedop, %ebx
>> - cfi_rel_offset (ebx, 4)
>> - movl SEMID(%esp), %ecx
>> - movl NSOPS(%esp), %edx
>> - movl SOPS(%esp), %edi
>> - cfi_rel_offset (edi, 0)
>> - movl TIMEOUT(%esp), %ebp
>> - cfi_rel_offset (ebp, 8)
>> - movl $__NR_ipc, %eax
>> -
>> - ENTER_KERNEL
>> -
>> - /* Restore registers. */
>> - popl %edi
>> - cfi_adjust_cfa_offset (-4)
>> - cfi_restore (edi)
>> - popl %ebx
>> - cfi_adjust_cfa_offset (-4)
>> - cfi_restore (ebx)
>> - popl %ebp
>> - cfi_adjust_cfa_offset (-4)
>> - cfi_restore (ebp)
>> -
>> - /* If 0 > %eax > -4096 there was an error. */
>> - cmpl $-4096, %eax
>> - ja SYSCALL_ERROR_LABEL
>> -
>> - /* Successful; return the syscall's value. */
>> - ret
>> -
>> -#ifdef PIC
>> - .align 4
>> -#endif
>> -PSEUDO_END (semtimedop)
>>