GNU C Library master sources branch master updated. glibc-2.22-383-g83c01ab

hjl@sourceware.org hjl@sourceware.org
Thu Oct 15 12:04:00 GMT 2015


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  83c01ab32b9aa7b27e4e88ed2969d14549e33c5c (commit)
      from  a014cecd82b71b70a6a843e250e06b541ad524f7 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=83c01ab32b9aa7b27e4e88ed2969d14549e33c5c

commit 83c01ab32b9aa7b27e4e88ed2969d14549e33c5c
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Oct 15 04:33:15 2015 -0700

    i386: Remove syscall assembly codes with 6 arguments
    
    This patch removes i386 assembly implementation for mmap, mmap64,
    semtimeop now that i386 have 6 argument syscall support from C code
    and GCC 5 can inline syscalls with 6 arguments.  We also compile mmap.c,
    mmap64.c and semtimedop.c with -fomit-frame-pointer since %ebp may be
    used to pass the 6th argument to syscall.
    
    Fo sysdeps/unix/sysv/linux/i386/mmap.c, with -O2 -march=i686
    -mtune=generic, GCC 5.2 now generates:
    
    <__mmap>:
       0:	sub    $0x10,%esp
       3:	mov    0x28(%esp),%eax
       7:	mov    %ebx,(%esp)
       a:	mov    0x18(%esp),%ecx
       e:	mov    %esi,0x4(%esp)
      12:	mov    0x14(%esp),%ebx
      16:	mov    %edi,0x8(%esp)
      1a:	mov    0x1c(%esp),%edx
      1e:	test   $0xfff,%eax
      23:	mov    0x20(%esp),%esi
      27:	mov    %ebp,0xc(%esp)
      2b:	mov    0x24(%esp),%edi
      2f:	jne    60 <__mmap+0x60>
      31:	shr    $0xc,%eax
      34:	mov    %eax,%ebp
      36:	mov    $0xc0,%eax
      3b:	call   *%gs:0x10
      42:	cmp    $0xfffff000,%eax
      47:	ja     65 <__mmap+0x65>
      49:	mov    (%esp),%ebx
      4c:	mov    0x4(%esp),%esi
      50:	mov    0x8(%esp),%edi
      54:	mov    0xc(%esp),%ebp
      58:	add    $0x10,%esp
      5b:	ret
      5c:	lea    0x0(%esi,%eiz,1),%esi
      60:	mov    $0xffffffea,%eax
      65:	mov    (%esp),%ebx
      68:	mov    0x4(%esp),%esi
      6c:	mov    0x8(%esp),%edi
      70:	mov    0xc(%esp),%ebp
      74:	add    $0x10,%esp
      77:	jmp    78 <__mmap+0x78>
    
    vs sysdeps/unix/sysv/linux/i386/mmap.S:
    
    <__mmap>:
       0:	push   %ebp
       1:	push   %ebx
       2:	push   %esi
       3:	push   %edi
       4:	mov    0x14(%esp),%ebx
       8:	mov    0x18(%esp),%ecx
       c:	mov    0x1c(%esp),%edx
      10:	mov    0x20(%esp),%esi
      14:	mov    0x24(%esp),%edi
      18:	mov    0x28(%esp),%ebp
      1c:	test   $0xfff,%ebp
      22:	mov    $0xffffffea,%eax
      27:	jne    38 <__mmap+0x38>
      29:	shr    $0xc,%ebp
      2c:	mov    $0xc0,%eax
      31:	call   *%gs:0x10
      38:	pop    %edi
      39:	pop    %esi
      3a:	pop    %ebx
      3b:	pop    %ebp
      3c:	cmp    $0xfffff000,%eax
      41:	ja     44 <__mmap+0x44>
      43:	ret
      44:	call   45 <__mmap+0x45>	45: R_386_PC32	__x86.get_pc_thunk.cx
      49:	add    $0x2,%ecx	4b: R_386_GOTPC	_GLOBAL_OFFSET_TABLE_
      4f:	mov    0x0(%ecx),%ecx	51: R_386_TLS_GOTIE	__libc_errno
      55:	neg    %eax
      57:	mov    %eax,%gs:(%ecx)
      5a:	or     $0xffffffff,%eax
      5d:	ret
    
    The C version has:
    
       3:	mov    0x28(%esp),%eax
    ...
      1e:	test   $0xfff,%eax
    ...
      31:	sar    $0xc,%eax
      34:	mov    %eax,%ebp
    
    is due to missing $ebx register constraint for inline asm.  We have
    to use "r" constraint with
    
    register unsigned int _a6 asm ("ebp") = (unsigned int) (arg6);
    
    and compiler chose %eax for offset (arg6) in
    
      if (offset & (MMAP_PAGE_UNIT - 1))
    
    	* sysdeps/unix/sysv/linux/i386/Makefile (CFLAGS-epoll_pwait.c):
    	Add -fomit-frame-pointer.
    	(CFLAGS-mmap.c): Likewise.
    	(CFLAGS-mmap64.c): Likewise.
    	(CFLAGS-semtimedop.c): Likewise.
    	* sysdeps/unix/sysv/linux/i386/mmap.c: New file.
    	* sysdeps/unix/sysv/linux/i386/mmap.S: Remove file.
    	* sysdeps/unix/sysv/linux/i386/mmap64.S: Likewise.
    	* sysdeps/unix/sysv/linux/i386/semtimedop.S: Likewise.

diff --git a/ChangeLog b/ChangeLog
index fa58b30..ab795fe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2015-10-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* sysdeps/unix/sysv/linux/i386/Makefile (CFLAGS-mmap.c): Add
+	-fomit-frame-pointer.
+	(CFLAGS-mmap64.c): Likewise.
+	(CFLAGS-semtimedop.c): Likewise.
+	* sysdeps/unix/sysv/linux/i386/mmap.c: New file.
+	* sysdeps/unix/sysv/linux/i386/mmap.S: Remove file.
+	* sysdeps/unix/sysv/linux/i386/mmap64.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/semtimedop.S: Likewise.
+
 2015-10-15  Florian Weimer  <fweimer@redhat.com>
 
 	[BZ #18928]
diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile
index e10d133..49ccf3e 100644
--- a/sysdeps/unix/sysv/linux/i386/Makefile
+++ b/sysdeps/unix/sysv/linux/i386/Makefile
@@ -3,6 +3,14 @@ default-abi := 32
 
 ifeq ($(subdir),misc)
 sysdep_routines += ioperm iopl vm86
+# %ebp may be used to pass the 6th argument to syscall.
+CFLAGS-mmap.c += -fomit-frame-pointer
+CFLAGS-mmap64.c += -fomit-frame-pointer
+endif
+
+ifeq ($(subdir),sysvipc)
+# %ebp may be used to pass the 6th argument to syscall.
+CFLAGS-semtimedop.c += -fomit-frame-pointer
 endif
 
 ifeq ($(subdir),elf)
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..6be8692
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/i386/mmap.c
@@ -0,0 +1,36 @@
+/* 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 <sys/types.h>
+#include <sys/mman.h>
+#include <errno.h>
+#include <sysdep.h>
+
+#ifndef MMAP_PAGE_UNIT
+# define MMAP_PAGE_UNIT 4096UL
+#endif
+
+__ptr_t
+__mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
+{
+  if (offset & (MMAP_PAGE_UNIT - 1))
+    return (__ptr_t) INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
+  return (__ptr_t) INLINE_SYSCALL (mmap2, 6, addr, len, prot, flags, fd,
+                                   offset / MMAP_PAGE_UNIT);
+}
+
+weak_alias (__mmap, mmap)
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)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   11 ++
 sysdeps/unix/sysv/linux/i386/Makefile              |    8 ++
 sysdeps/unix/sysv/linux/i386/mmap.S                |   79 -------------
 .../linux/{generic/wordsize-32 => i386}/mmap.c     |   10 +-
 sysdeps/unix/sysv/linux/i386/mmap64.S              |  116 --------------------
 sysdeps/unix/sysv/linux/i386/semtimedop.S          |   73 ------------
 6 files changed, 22 insertions(+), 275 deletions(-)
 delete mode 100644 sysdeps/unix/sysv/linux/i386/mmap.S
 copy sysdeps/unix/sysv/linux/{generic/wordsize-32 => i386}/mmap.c (82%)
 delete mode 100644 sysdeps/unix/sysv/linux/i386/mmap64.S
 delete mode 100644 sysdeps/unix/sysv/linux/i386/semtimedop.S


hooks/post-receive
-- 
GNU C Library master sources



More information about the Glibc-cvs mailing list