about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/unix/sysv/linux/i386/mmap.S23
-rw-r--r--sysdeps/unix/sysv/linux/i386/mmap64.S44
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h19
-rw-r--r--sysdeps/unix/sysv/linux/mmap64.c68
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/mmap.S15
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S37
6 files changed, 26 insertions, 180 deletions
diff --git a/sysdeps/unix/sysv/linux/i386/mmap.S b/sysdeps/unix/sysv/linux/i386/mmap.S
index c8bf3e1087..1f79bde285 100644
--- a/sysdeps/unix/sysv/linux/i386/mmap.S
+++ b/sysdeps/unix/sysv/linux/i386/mmap.S
@@ -25,10 +25,6 @@
 
 ENTRY (__mmap)
 
-/* I don't think it is worthwhile trying to use mmap2 whenever it
-   is available.  Only use it when we are sure the syscall exists.  */
-#ifdef __ASSUME_MMAP2_SYSCALL
-
 	/* Save registers.  */
 	pushl %ebp
 	cfi_adjust_cfa_offset (4)
@@ -73,25 +69,6 @@ L(skip):
 	cfi_adjust_cfa_offset (-4)
 	cfi_restore (ebp)
 
-#else
-
-	/* Save registers.  */
-	movl %ebx, %edx
-	cfi_register (ebx, edx)
-
-	movl $SYS_ify(mmap), %eax	/* System call number in %eax.  */
-
-	lea 4(%esp), %ebx		/* Address of args is 1st arg.  */
-
-	/* Do the system call trap.  */
-	int $0x80
-
-	/* Restore registers.  */
-	movl %edx, %ebx
-	cfi_restore (ebx)
-
-#endif
-
 	/* If 0 > %eax > -4096 there was an error.  */
 	cmpl $-4096, %eax
 	ja SYSCALL_ERROR_LABEL
diff --git a/sysdeps/unix/sysv/linux/i386/mmap64.S b/sysdeps/unix/sysv/linux/i386/mmap64.S
index 7599b85443..8855109ff9 100644
--- a/sysdeps/unix/sysv/linux/i386/mmap64.S
+++ b/sysdeps/unix/sysv/linux/i386/mmap64.S
@@ -37,8 +37,6 @@
 	.text
 ENTRY (BP_SYM (__mmap64))
 
-#ifdef __NR_mmap2
-
 	/* Save registers.  */
 	pushl %ebp
 	cfi_adjust_cfa_offset (4)
@@ -88,12 +86,6 @@ L(do_syscall):
 	cfi_adjust_cfa_offset (-4)
 	cfi_restore (ebp)
 
-#ifndef __ASSUME_MMAP2_SYSCALL
-2:
-	cmp $-ENOSYS, %eax
-	je 3f
-#endif
-
 	/* If 0 > %eax > -4096 there was an error.  */
 	cmpl $-4096, %eax
 	ja SYSCALL_ERROR_LABEL
@@ -122,42 +114,6 @@ L(einval):
 	cfi_restore (ebp)
 	movl $-EINVAL, %eax
 	jmp SYSCALL_ERROR_LABEL
-#endif
-
-#if !defined __ASSUME_MMAP2_SYSCALL || !defined __NR_mmap2
-3:
-	/* Save registers.  */
-	movl %ebx, %edx
-	cfi_register (ebx, edx)
-
-	cmpl $0, OFFHI-SVRSP(%esp)
-	jne L(einval2)
-
-	movl $SYS_ify(mmap), %eax	/* System call number in %eax.  */
-
-	lea ADDR-SVRSP(%esp), %ebx	/* Address of args is 1st arg.  */
-
-	/* Do the system call trap.  */
-	ENTER_KERNEL
-
-	/* Restore registers.  */
-	movl %edx, %ebx
-	cfi_restore (ebx)
-
-	/* If 0 > %eax > -4096 there was an error.  */
-	cmpl $-4096, %eax
-	ja SYSCALL_ERROR_LABEL
-
-	/* Successful; return the syscall's value.  */
-	ret
-
-	cfi_register (ebx, edx)
-L(einval2):
-	movl %edx, %ebx
-	cfi_restore (ebx)
-	movl $-EINVAL, %eax
-	jmp SYSCALL_ERROR_LABEL
-#endif
 
 PSEUDO_END (BP_SYM (__mmap64))
 
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 6b0eb95c52..06e15111aa 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -40,20 +40,14 @@
 /* The sendfile syscall was introduced in 2.2.0.  */
 #define __ASSUME_SENDFILE		1
 
-/* On x86 the mmap2 syscall was introduced in 2.3.31.  */
-#ifdef __i386__
-# define __ASSUME_MMAP2_SYSCALL	1
-#endif
-
 /* On x86 the stat64/lstat64/fstat64 syscalls were introduced in 2.3.34.  */
 #ifdef __i386__
 # define __ASSUME_STAT64_SYSCALL	1
 #endif
 
-/* On sparc the mmap2/stat64/lstat64/fstat64 syscalls were introduced
-   in 2.3.35.  */
+/* On sparc the stat64/lstat64/fstat64 syscalls were introduced in
+   2.3.35.  */
 #if defined __sparc__ && !defined __arch64__
-# define __ASSUME_MMAP2_SYSCALL		1
 # define __ASSUME_STAT64_SYSCALL	1
 #endif
 
@@ -70,9 +64,8 @@
 # define __ASSUME_IPC64		1
 #endif
 
-/* SH kernels got stat64 and mmap2 during 2.4.0-test.  */
+/* SH kernels got stat64 during 2.4.0-test.  */
 #ifdef __sh__
-# define __ASSUME_MMAP2_SYSCALL		1
 # define __ASSUME_STAT64_SYSCALL	1
 #endif
 
@@ -86,12 +79,6 @@
    MIPS n32).  */
 #define __ASSUME_GETDENTS64_SYSCALL	1
 
-/* Starting with 2.4.5 kernels the mmap2 syscall made it into the official
-   kernel.  But PowerPC64 does not support a separate MMAP2 call.  */
-#if defined __powerpc__ && !defined __powerpc64__
-# define __ASSUME_MMAP2_SYSCALL		1
-#endif
-
 /* Beginning with 2.6.12 the clock and timer supports CPU clocks.  */
 #define __ASSUME_POSIX_CPU_TIMERS	1
 
diff --git a/sysdeps/unix/sysv/linux/mmap64.c b/sysdeps/unix/sysv/linux/mmap64.c
index 495d77768e..bca15f9c5d 100644
--- a/sysdeps/unix/sysv/linux/mmap64.c
+++ b/sysdeps/unix/sysv/linux/mmap64.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999,2000,2001,2002,2006,2010 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 1999.
 
@@ -26,76 +26,42 @@
 
 #include <kernel-features.h>
 
-#ifdef __NR_mmap2
-
 /* This is always 12, even on architectures where PAGE_SHIFT != 12.  */
-# if MMAP2_PAGE_SHIFT == -1
+#if MMAP2_PAGE_SHIFT == -1
 static int page_shift;
-# else
-#  ifndef MMAP2_PAGE_SHIFT
-#   define MMAP2_PAGE_SHIFT 12
-#  endif
-# define page_shift MMAP2_PAGE_SHIFT
-# endif
-
-# ifndef __ASSUME_MMAP2_SYSCALL
-static int have_no_mmap2;
+#else
+# ifndef MMAP2_PAGE_SHIFT
+#  define MMAP2_PAGE_SHIFT 12
 # endif
+#define page_shift MMAP2_PAGE_SHIFT
 #endif
 
 
 void *
 __mmap64 (void *addr, size_t len, int prot, int flags, int fd, off64_t offset)
 {
-#ifdef __NR_mmap2
-# if MMAP2_PAGE_SHIFT == -1
+#if MMAP2_PAGE_SHIFT == -1
   if (page_shift == 0)
     {
       int page_size = getpagesize ();
       while ((1 << ++page_shift) != page_size)
 	;
     }
-# endif
-  if (offset & ((1 << page_shift) - 1))
-    {
-      __set_errno (EINVAL);
-      return MAP_FAILED;
-    }
-# ifndef __ASSUME_MMAP2_SYSCALL
-  if (! have_no_mmap2)
-# endif
-    {
-# ifndef __ASSUME_MMAP2_SYSCALL
-      int saved_errno = errno;
-# endif
-      void *result;
-      __ptrvalue (result) = (void *__unbounded)
-	INLINE_SYSCALL (mmap2, 6, __ptrvalue (addr),
-			len, prot, flags, fd,
-			(off_t) (offset >> MMAP2_PAGE_SHIFT));
-# if __BOUNDED_POINTERS__
-      __ptrlow (result) = __ptrvalue (result);
-      __ptrhigh (result) = __ptrvalue (result) + len;
-# endif
-# ifndef __ASSUME_MMAP2_SYSCALL
-      if (result != MAP_FAILED || errno != ENOSYS)
-# endif
-	return result;
-
-# ifndef __ASSUME_MMAP2_SYSCALL
-      __set_errno (saved_errno);
-      have_no_mmap2 = 1;
-# endif
-    }
 #endif
-#ifndef __ASSUME_MMAP2_SYSCALL
-  if (offset != (off_t) offset || (offset + len) != (off_t) (offset + len))
+  if (offset & ((1 << page_shift) - 1))
     {
       __set_errno (EINVAL);
       return MAP_FAILED;
     }
-
-  return __mmap (addr, len, prot, flags, fd, (off_t) offset);
+  void *result;
+  __ptrvalue (result) = (void *__unbounded)
+    INLINE_SYSCALL (mmap2, 6, __ptrvalue (addr),
+		    len, prot, flags, fd,
+		    (off_t) (offset >> MMAP2_PAGE_SHIFT));
+#if __BOUNDED_POINTERS__
+  __ptrlow (result) = __ptrvalue (result);
+  __ptrhigh (result) = __ptrvalue (result) + len;
 #endif
+  return result;
 }
 weak_alias (__mmap64, mmap64)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S b/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S
index 6e5ba94c1a..0357ab4617 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2001, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
@@ -40,8 +40,8 @@ ENTRY(__mmap)
 	cfi_adjust_cfa_offset (120)
 	st      %r1,0(%r15)             /* store back chain */
 
-	/* Store parameters on stack, because old_mmap/mmap2
-	 * take only one parameter: a pointer to the parameter area
+	/* Store parameters on stack, because mmap2
+	 * takes only one parameter: a pointer to the parameter area
 	 */
 	st      %r6,0x70(%r15)          /* Store 'fd'.      */
 	st      %r5,0x6C(%r15)          /* Store 'flags'.   */
@@ -50,10 +50,6 @@ ENTRY(__mmap)
 	st      %r2,0x60(%r15)          /* Store 'start'.   */
 	l       %r1,216(%r15)           /* Load offset.     */
 
-#ifdef __ASSUME_MMAP2_SYSCALL
-	/* I don't think it is worthwhile trying to use mmap2 whenever 
-	 * it is available.  Only use it when we are sure the syscall
-	 * exists.  */
 	tml     %r1,0x0fff              /* Offset page aligned ?  */
 	lhi     %r2,-EINVAL
 	jnz     1f                      /* No -> EINVAL.  */
@@ -61,11 +57,6 @@ ENTRY(__mmap)
 	st      %r1,0x74(%r15)          /* Store page offset.  */
 	la      %r2,0x60(%r15)          /* Load address of parameter list.  */
 	svc     SYS_ify(mmap2)          /* Do the system call trap.  */
-#else	
-	st      %r1,0x74(%r15)          /* Store offset unmodified.  */
-	la      %r2,0x60(%r15)          /* Load address of parameter list.  */
-	svc     SYS_ify(mmap)           /* Do the system call trap.  */
-#endif
 
 1:	l       %r15,0(%r15)            /* Load back chain.  */
 	cfi_adjust_cfa_offset (-120)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S b/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S
index ad6d254db1..8b4bd4556f 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2001, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2012 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
@@ -41,15 +41,14 @@ ENTRY(__mmap64)
 	cfi_adjust_cfa_offset (120)
 	st	%r1,0(%r15)		/* Store back chain.  */
 
-	/* Store parameters on stack, because mmap2 and old_mmap
-	 * take only one parameter: a pointer to the parameter area.  */
+	/* Store parameters on stack, because mmap2
+	 * takes only one parameter: a pointer to the parameter area.  */
 	st	%r6,0x70(%r15)		/* Store 'fd'.	    */
 	st	%r5,0x6C(%r15)		/* Store 'flags'.   */
 	st	%r4,0x68(%r15)		/* Store 'prot'.    */
 	st	%r3,0x64(%r15)		/* Store 'length'.  */
 	st	%r2,0x60(%r15)		/* Store 'start'.   */
 
-#ifdef __NR_mmap2
 	lm	%r0,%r1,216(%r15)	/* Load 64 bit offset.	*/
 	tml	%r1,0x0fff		/* Offset page aligned ?  */
 	jnz	2f			/* No -> EINVAL.  */
@@ -61,11 +60,6 @@ ENTRY(__mmap64)
 	la	%r2,0x60(%r15)		/* Load address of parameter list.  */
 	svc	SYS_ify(mmap2)		/* Do the system call trap.  */
 
-#ifndef __ASSUME_MMAP2_SYSCALL
-	chi	%r2,-ENOSYS
-	je	1f
-#endif
-
 	l	%r15,0(%r15)		/* Load back chain.  */
 	cfi_adjust_cfa_offset (-120)
 	lm	%r6,%r15,24(%r15)	/* Load registers.  */
@@ -78,31 +72,6 @@ ENTRY(__mmap64)
 	/* Successful; return the syscall's value.  */
 	br	%r14
 
-#endif
-
-#if !defined __ASSUME_MMAP2_SYSCALL || !defined __NR_mmap2
-1:	lm	%r0,%r1,216(%r15)	/* Load 64 bit offset.	*/
-	st	%r1,0x74(%r15)		/* Store lower word of offset.	*/
-	ltr	%r0,%r0			/* Offset > 2^32 ?  */
-	jnz	2f
-	alr	%r1,%r3			/* Add length to offset.  */
-	brc	3,2f			/* Carry -> EINVAL.  */
-
-	la	%r2,0x60(%r15)		/* Load address of parameter list.  */
-	svc	SYS_ify(mmap)	/* Do the system call trap.  */
-
-	l	%r15,0(%r15)		/* Load back chain.  */
-	lm	%r6,%r15,24(%r15)	/* Load registers.  */
-
-	/* Check gpr 2 for error.  */
-	lhi	%r0,-4096
-	clr	%r2,%r0
-	jnl	SYSCALL_ERROR_LABEL
-
-	/* Successful; return the syscall's value.  */
-	br	%r14
-#endif
-
 2:	lhi	%r2,-EINVAL
 	l	%r15,0(%r15)		/* Load back chain.  */
 	lm	%r6,%r15,24(%r15)	/* Load registers.  */