aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2012-08-20 14:37:27 +0000
committerJoseph Myers <joseph@codesourcery.com>2012-08-20 14:37:27 +0000
commit348363b2c3ee93252a971ead851085739d8d04fb (patch)
treeb3fbc181c228ad71cbbb0a21e98a9fd6e6966d78 /sysdeps/unix/sysv
parentbc5bc0e51096cff719eaad4d227ce450a87ee79c (diff)
downloadglibc-348363b2c3ee93252a971ead851085739d8d04fb.tar
glibc-348363b2c3ee93252a971ead851085739d8d04fb.tar.gz
glibc-348363b2c3ee93252a971ead851085739d8d04fb.tar.bz2
glibc-348363b2c3ee93252a971ead851085739d8d04fb.zip
Remove __ASSUME_MMAP2_SYSCALL.
Diffstat (limited to 'sysdeps/unix/sysv')
-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. */