Fix broken memory allocation on 32-bit OS X.
authorChris Hanson <org/chris-hanson/cph>
Thu, 16 Aug 2012 05:16:37 +0000 (22:16 -0700)
committerChris Hanson <org/chris-hanson/cph>
Thu, 16 Aug 2012 05:16:37 +0000 (22:16 -0700)
src/microcode/ux.c
src/microcode/ux.h

index 513c008db72006bab136b0e4afdf82592777f3a5..417e45a62bffa330140aaa392b38588679909f5e 100644 (file)
@@ -765,6 +765,20 @@ mmap_heap_malloc_try (unsigned long address, unsigned long request, int flags)
 /* Try to use our low addresses even if the OS has a tendency to choose
    high ones.  (What if we're on a 64-bit system?  Why do we care?)  */
 
+#ifdef __x86_64__
+#  define MMAP_EXTRA_FLAGS 0
+#else
+#ifdef MAP_TRYFIXED
+#  define MMAP_EXTRA_FLAGS MAP_TRYFIXED
+#else
+#if defined(USE_MAP_FIXED) && defined(MAP_FIXED)
+#  define MMAP_EXTRA_FLAGS MAP_FIXED
+#else
+#  define MMAP_EXTRA_FLAGS 0
+#endif
+#endif
+#endif
+
 static void *
 mmap_heap_malloc_search (unsigned long request,
                          unsigned long min_result,
@@ -772,9 +786,9 @@ mmap_heap_malloc_search (unsigned long request,
 {
   (void)max_result;             /* ignore */
 
-#ifdef MAP_TRYFIXED
+#if MMAP_EXTRA_FLAGS != 0
   {
-    void * addr = (mmap_heap_malloc_try (min_result, request, MAP_TRYFIXED));
+    void * addr = (mmap_heap_malloc_try (min_result, request, MMAP_EXTRA_FLAGS));
     return (addr ? addr : (mmap_heap_malloc_try (0, request, 0)));
   }
 #else
index 5356b93cffc643fda6f979b72d906759e9bd2ce3..5c875454ce43069130e992ab468e6443cf941b0e 100644 (file)
@@ -129,6 +129,9 @@ USA.
 #ifdef HAVE_SYS_MMAN_H
 #  include <sys/mman.h>
 #endif
+#ifdef __APPLE__
+#  define USE_MAP_FIXED 1
+#endif
 
 /* GNU C library defines environ if __USE_GNU is defined.  */
 #ifndef __USE_GNU