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]

Re: [PATCH] i386: Assembly Implementation cleanup


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)
>>


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