]> git.eshelyaron.com Git - emacs.git/commitdiff
Use hybrid malloc for FreeBSD (Bug#28308)
authorNoam Postavsky <npostavs@users.sourceforge.net>
Tue, 31 Oct 2017 17:31:46 +0000 (13:31 -0400)
committerNoam Postavsky <npostavs@gmail.com>
Sat, 4 Nov 2017 22:49:28 +0000 (18:49 -0400)
FreeBSD aarch64 does not provide sbrk, so gmalloc cannot be used; when
using system malloc dumping does not work correctly (allocated data is
invalid after dumping).
* configure.ac: Set hybrid_malloc for freebsd.
* src/gmalloc.c (gdefault_morecore) [!HAVE_SBRK]: Don't call sbrk.

configure.ac
src/gmalloc.c

index d397e8fa7e1ab975e9384ec99665e708a3429e67..5579342c4e55ef1f9a78f606e192bc5ae72915a4 100644 (file)
@@ -2218,7 +2218,7 @@ test "$CANNOT_DUMP" = yes ||
 case "$opsys" in
   ## darwin ld insists on the use of malloc routines in the System framework.
   darwin | mingw32 | nacl | sol2-10) ;;
-  cygwin | qnxto)
+  cygwin | qnxto | freebsd)
          hybrid_malloc=yes
           system_malloc= ;;
   *) test "$ac_cv_func_sbrk" = yes && system_malloc=$emacs_cv_sanitize_address;;
index 2bda95ebd3d6ac1989381b195fad251a8933e31e..a17d39c1eebd562724e06b4b2b28991183bb434c 100644 (file)
@@ -1502,17 +1502,18 @@ extern void *__sbrk (ptrdiff_t increment);
 static void *
 gdefault_morecore (ptrdiff_t increment)
 {
-  void *result;
 #ifdef HYBRID_MALLOC
   if (!DUMPED)
     {
       return bss_sbrk (increment);
     }
 #endif
-  result = (void *) __sbrk (increment);
-  if (result == (void *) -1)
-    return NULL;
-  return result;
+#ifdef HAVE_SBRK
+  void *result = (void *) __sbrk (increment);
+  if (result != (void *) -1)
+    return result;
+#endif
+  return NULL;
 }
 
 void *(*__morecore) (ptrdiff_t) = gdefault_morecore;