r5113 - in glibc-package/trunk/debian: . patches patches/hurd-i386
Author: sthibault
Date: 2011-12-27 15:18:38 +0000 (Tue, 27 Dec 2011)
New Revision: 5113
Added:
glibc-package/trunk/debian/patches/hurd-i386/submitted-mmap.diff
Modified:
glibc-package/trunk/debian/changelog
glibc-package/trunk/debian/patches/series
Log:
submitted-mmap.diff: new patch to fix iceweasel hang.
Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog 2011-12-26 10:52:38 UTC (rev 5112)
+++ glibc-package/trunk/debian/changelog 2011-12-27 15:18:38 UTC (rev 5113)
@@ -1,10 +1,14 @@
eglibc (2.13-25) UNRELEASED; urgency=low
+ [ Aurelien Jarno ]
* patches/s390/cvs-libm-ulps.diff: new patch to fix FTBFS on s390 with
gcc-4.6.
- -- Aurelien Jarno <aurel32@debian.org> Sun, 25 Dec 2011 18:10:46 +0100
+ [ Samuel Thibault ]
+ * patches/hurd-i386/submitted-mmap.diff: new patch to fix iceweasel hang.
+ -- Samuel Thibault <sthibault@debian.org> Tue, 27 Dec 2011 02:02:41 +0100
+
eglibc (2.13-24) unstable; urgency=low
* patches/m68k/cvs-byteswap.diff: fix m68k optimized version of
Added: glibc-package/trunk/debian/patches/hurd-i386/submitted-mmap.diff
===================================================================
--- glibc-package/trunk/debian/patches/hurd-i386/submitted-mmap.diff (rev 0)
+++ glibc-package/trunk/debian/patches/hurd-i386/submitted-mmap.diff 2011-12-27 15:18:38 UTC (rev 5113)
@@ -0,0 +1,83 @@
+Take addr parameter of mmap as suggestion even without MAP_FIXED.
+
+2011-12-26 Samuel Thibault <samuel.thibault@ens-lyon.org>
+
+ * sysdeps/mach/hurd/mmap.c (__mmap): When `mapaddr' is non zero, try
+ __vm_allocate and __vm_map with `anywhere' set to 0 first, and try with
+ `anywhere' set to 1 only on KERN_NO_SPACE error.
+
+---
+ mmap.c | 44 ++++++++++++++++++++++++++++++--------------
+ 1 file changed, 30 insertions(+), 14 deletions(-)
+diff --git a/sysdeps/mach/hurd/mmap.c b/sysdeps/mach/hurd/mmap.c
+index 1d1460c..96d7661 100644
+--- a/sysdeps/mach/hurd/mmap.c
++++ b/sysdeps/mach/hurd/mmap.c
+@@ -51,15 +51,20 @@ __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
+ {
+ /* vm_allocate has (a little) less overhead in the kernel too. */
+ err = __vm_allocate (__mach_task_self (), &mapaddr, len,
+- !(flags & MAP_FIXED));
++ !mapaddr);
+
+- if (err == KERN_NO_SPACE && (flags & MAP_FIXED))
++ if (err == KERN_NO_SPACE)
+ {
+- /* XXX this is not atomic as it is in unix! */
+- /* The region is already allocated; deallocate it first. */
+- err = __vm_deallocate (__mach_task_self (), mapaddr, len);
+- if (!err)
+- err = __vm_allocate (__mach_task_self (), &mapaddr, len, 0);
++ if (flags & MAP_FIXED)
++ {
++ /* XXX this is not atomic as it is in unix! */
++ /* The region is already allocated; deallocate it first. */
++ err = __vm_deallocate (__mach_task_self (), mapaddr, len);
++ if (!err)
++ err = __vm_allocate (__mach_task_self (), &mapaddr, len, 0);
++ }
++ else if (mapaddr)
++ err = __vm_allocate (__mach_task_self (), &mapaddr, len, 1);
+ }
+
+ return err ? (__ptr_t) (long int) __hurd_fail (err) : (__ptr_t) mapaddr;
+@@ -135,21 +140,32 @@ __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
+
+ err = __vm_map (__mach_task_self (),
+ &mapaddr, (vm_size_t) len, (vm_address_t) 0,
+- ! (flags & MAP_FIXED),
++ !mapaddr,
+ memobj, (vm_offset_t) offset,
+ ! (flags & MAP_SHARED),
+ vmprot, VM_PROT_ALL,
+ (flags & MAP_SHARED) ? VM_INHERIT_SHARE : VM_INHERIT_COPY);
+
+- if (err == KERN_NO_SPACE && (flags & MAP_FIXED))
++ if (err == KERN_NO_SPACE)
+ {
+- /* XXX this is not atomic as it is in unix! */
+- /* The region is already allocated; deallocate it first. */
+- err = __vm_deallocate (__mach_task_self (), mapaddr, len);
+- if (! err)
++ if (flags & MAP_FIXED)
++ {
++ /* XXX this is not atomic as it is in unix! */
++ /* The region is already allocated; deallocate it first. */
++ err = __vm_deallocate (__mach_task_self (), mapaddr, len);
++ if (! err)
++ err = __vm_map (__mach_task_self (),
++ &mapaddr, (vm_size_t) len, (vm_address_t) 0,
++ 0, memobj, (vm_offset_t) offset,
++ ! (flags & MAP_SHARED),
++ vmprot, VM_PROT_ALL,
++ (flags & MAP_SHARED) ? VM_INHERIT_SHARE
++ : VM_INHERIT_COPY);
++ }
++ else if (mapaddr)
+ err = __vm_map (__mach_task_self (),
+ &mapaddr, (vm_size_t) len, (vm_address_t) 0,
+- 0, memobj, (vm_offset_t) offset,
++ 1, memobj, (vm_offset_t) offset,
+ ! (flags & MAP_SHARED),
+ vmprot, VM_PROT_ALL,
+ (flags & MAP_SHARED) ? VM_INHERIT_SHARE
Modified: glibc-package/trunk/debian/patches/series
===================================================================
--- glibc-package/trunk/debian/patches/series 2011-12-26 10:52:38 UTC (rev 5112)
+++ glibc-package/trunk/debian/patches/series 2011-12-27 15:18:38 UTC (rev 5113)
@@ -172,6 +172,7 @@
hurd-i386/local-select.diff
hurd-i386/submitted-posix2008.diff
hurd-i386/submitted-mach-nanosleep.diff
+hurd-i386/submitted-mmap.diff
kfreebsd/submitted-libc_once.diff
Reply to: