GNU_MALLOC_reason=" (only before dumping)"
GMALLOC_OBJ=gmalloc.o
VMLIMIT_OBJ=
- # FIXME: This is to prevent Gnulib from redirecting 'free' to its
- # replacement, instead of 'hybrid_free' in gmalloc.c.
- gl_cv_func_free_preserves_errno=yes
else
test "$doug_lea_malloc" != "yes" && GMALLOC_OBJ=gmalloc.o
VMLIMIT_OBJ=vm-limit.o
# define ADDRESS_SANITIZER false
#endif
+#ifdef emacs
+/* We include stdlib.h here, because Gnulib's stdlib.h might redirect
+ 'free' to its replacement, and we want to avoid that in unexec
+ builds. Inclduing it here will render its inclusion after config.h
+ a no-op. */
+# if (defined DARWIN_OS && defined HAVE_UNEXEC) || defined HYBRID_MALLOC
+# include <stdlib.h>
+# endif
+#endif
+
#if defined DARWIN_OS && defined emacs && defined HAVE_UNEXEC
+# undef malloc
# define malloc unexec_malloc
+# undef realloc
# define realloc unexec_realloc
+# undef free
# define free unexec_free
+
+extern void *unexec_malloc (size_t);
+extern void *unexec_realloc (void *, size_t);
+extern void unexec_free (void *);
+
#endif
/* If HYBRID_MALLOC is defined (e.g., on Cygwin), emacs will use
accomplish this. */
#ifdef HYBRID_MALLOC
#ifdef emacs
+#undef malloc
#define malloc hybrid_malloc
+#undef realloc
#define realloc hybrid_realloc
+#undef aligned_alloc
#define aligned_alloc hybrid_aligned_alloc
+#undef calloc
#define calloc hybrid_calloc
+#undef free
#define free hybrid_free
-#endif
+
+extern void *hybrid_malloc (size_t);
+extern void *hybrid_calloc (size_t, size_t);
+extern void hybrid_free (void *);
+extern void *hybrid_aligned_alloc (size_t, size_t);
+extern void *hybrid_realloc (void *, size_t);
+#endif /* emacs */
#endif /* HYBRID_MALLOC */
/* We have to go this route, rather than the old hpux9 approach of
#undef free
#ifdef HYBRID_MALLOC
-/* Declare system malloc and friends. */
-extern void *malloc (size_t size);
-extern void *realloc (void *ptr, size_t size);
-extern void *calloc (size_t nmemb, size_t size);
-extern void free (void *ptr);
-#ifdef HAVE_ALIGNED_ALLOC
-extern void *aligned_alloc (size_t alignment, size_t size);
-#elif defined HAVE_POSIX_MEMALIGN
-extern int posix_memalign (void **memptr, size_t alignment, size_t size);
-#endif
/* Assuming PTR was allocated via the hybrid malloc, return true if
PTR was allocated via gmalloc, not the system malloc. Also, return