diff options
-rw-r--r-- | ChangeLog | 22 | ||||
-rw-r--r-- | ports/ChangeLog.arm | 5 | ||||
-rw-r--r-- | ports/ChangeLog.hppa | 5 | ||||
-rw-r--r-- | ports/ChangeLog.m68k | 5 | ||||
-rw-r--r-- | ports/ChangeLog.tile | 5 | ||||
-rw-r--r-- | ports/sysdeps/unix/sysv/linux/arm/kernel-features.h | 3 | ||||
-rw-r--r-- | ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h | 1 | ||||
-rw-r--r-- | ports/sysdeps/unix/sysv/linux/m68k/kernel-features.h | 1 | ||||
-rw-r--r-- | ports/sysdeps/unix/sysv/linux/tile/kernel-features.h | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/mmap.S | 23 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/mmap64.S | 44 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/kernel-features.h | 19 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mmap64.c | 68 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-32/mmap.S | 15 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S | 37 |
15 files changed, 69 insertions, 185 deletions
diff --git a/ChangeLog b/ChangeLog index 60a7a6d46a..ab7a87d7c8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,25 @@ +2012-08-20 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/kernel-features.h + (__ASSUME_MMAP2_SYSCALL): Remove all definitions. + * sysdeps/unix/sysv/linux/mmap64.c [__NR_mmap2]: Make code + unconditional. + [!__ASSUME_MMAP2_SYSCALL]: Remove conditional code. + * sysdeps/unix/sysv/linux/i386/mmap.S (__mmap) + [__ASSUME_MMAP2_SYSCALL]: Make code unconditional. + (__mmap) [!__ASSUME_MMAP2_SYSCALL]: Remove conditional code. + * sysdeps/unix/sysv/linux/i386/mmap64.S (__mmap64) [__NR_mmap2]: + Make code unconditional. + (__mmap64) [!__ASSUME_MMAP2_SYSCALL]: Remove conditional code. + (__mmap64) [!__NR_mmap2]: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/mmap.S (__mmap) + [__ASSUME_MMAP2_SYSCALL]: Make code unconditional. + (__mmap) [!__ASSUME_MMAP2_SYSCALL]: Remove conditional code. + * sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S (__mmap64) + [__NR_mmap2]: Make code unconditional. + (__mmap64) [!__ASSUME_MMAP2_SYSCALL]: Remove conditional code. + (__mmap64) [!__NR_mmap2]: Likewise. + 2012-08-20 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * sysdeps/unix/sysv/linux/s390/s390-32/getrlimit.c: Remove. diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm index 359bd0d68a..4acc473dec 100644 --- a/ports/ChangeLog.arm +++ b/ports/ChangeLog.arm @@ -1,3 +1,8 @@ +2012-08-20 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/arm/kernel-features.h + (__ASSUME_MMAP2_SYSCALL): Remove. + 2012-08-15 Maxim Kuvyrkov <maxim@codesourcery.com> * sysdeps/arm/nptl/pthread_spin_lock.c: Use generic code. diff --git a/ports/ChangeLog.hppa b/ports/ChangeLog.hppa index a28fbceb37..97b6c57329 100644 --- a/ports/ChangeLog.hppa +++ b/ports/ChangeLog.hppa @@ -1,3 +1,8 @@ +2012-08-20 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/hppa/kernel-features.h + (__ASSUME_MMAP2_SYSCALL): Remove. + 2012-08-15 Maxim Kuvyrkov <maxim@codesourcery.com> * sysdeps/hppa/nptl/pthread_spin_lock.c: Use generic code. diff --git a/ports/ChangeLog.m68k b/ports/ChangeLog.m68k index 62a8eb3bb6..5cdbe37a30 100644 --- a/ports/ChangeLog.m68k +++ b/ports/ChangeLog.m68k @@ -1,3 +1,8 @@ +2012-08-20 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/m68k/kernel-features.h + (__ASSUME_MMAP2_SYSCALL): Remove. + 2012-08-15 Maxim Kuvyrkov <maxim@codesourcery.com> * sysdeps/m68k/nptl/pthread_spin_lock.c: Use generic code. diff --git a/ports/ChangeLog.tile b/ports/ChangeLog.tile index 53afc6987f..7e5cc6f3e8 100644 --- a/ports/ChangeLog.tile +++ b/ports/ChangeLog.tile @@ -1,3 +1,8 @@ +2012-08-20 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/tile/kernel-features.h + (__ASSUME_MMAP2_SYSCALL): Remove. + 2012-08-14 Joseph Myers <joseph@codesourcery.com> * sysdeps/unix/sysv/linux/tile/kernel-features.h diff --git a/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h b/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h index b003b17b02..34ed474ca0 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h +++ b/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h @@ -20,9 +20,8 @@ /* The utimes syscall was added before 2.6.1. */ #define __ASSUME_UTIMES 1 -/* On ARM the mmap2/stat64/lstat64/fstat64 syscalls were introduced in +/* On ARM the stat64/lstat64/fstat64 syscalls were introduced in 2.3.35. */ -#define __ASSUME_MMAP2_SYSCALL 1 #define __ASSUME_STAT64_SYSCALL 1 /* The signal frame layout changed in 2.6.18. */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h b/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h index 49ba55f7c1..d5bec07373 100644 --- a/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h +++ b/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h @@ -23,7 +23,6 @@ and expect the final version here. */ #define __ASSUME_32BITUIDS 1 #define __ASSUME_TRUNCATE64_SYSCALL 1 -#define __ASSUME_MMAP2_SYSCALL 1 #define __ASSUME_STAT64_SYSCALL 1 #define __ASSUME_IPC64 1 #define __ASSUME_ST_INO_64_BIT 1 diff --git a/ports/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/ports/sysdeps/unix/sysv/linux/m68k/kernel-features.h index 4a8b5853b9..701600e8fd 100644 --- a/ports/sysdeps/unix/sysv/linux/m68k/kernel-features.h +++ b/ports/sysdeps/unix/sysv/linux/m68k/kernel-features.h @@ -18,7 +18,6 @@ <http://www.gnu.org/licenses/>. */ /* These features were surely available with 2.4.12. */ -#define __ASSUME_MMAP2_SYSCALL 1 #define __ASSUME_STAT64_SYSCALL 1 /* Many syscalls were added in 2.6.10 for m68k. */ diff --git a/ports/sysdeps/unix/sysv/linux/tile/kernel-features.h b/ports/sysdeps/unix/sysv/linux/tile/kernel-features.h index 956f14cb99..04634484e8 100644 --- a/ports/sysdeps/unix/sysv/linux/tile/kernel-features.h +++ b/ports/sysdeps/unix/sysv/linux/tile/kernel-features.h @@ -18,7 +18,6 @@ /* TILE glibc support starts with 2.6.36, guaranteeing many kernel features. */ -#define __ASSUME_MMAP2_SYSCALL 1 #define __ASSUME_STAT64_SYSCALL 1 #define __ASSUME_UTIMES 1 #define __ASSUME_FADVISE64_64_SYSCALL 1 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. */ |