emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master b2eed2a: Clean up the fix for unexec build on GNU/Linux


From: Eli Zaretskii
Subject: master b2eed2a: Clean up the fix for unexec build on GNU/Linux
Date: Thu, 20 May 2021 04:26:36 -0400 (EDT)

branch: master
commit b2eed2ae568b53ac910f4a3b8458eedf8d8c67ec
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>

    Clean up the fix for unexec build on GNU/Linux
    
    * src/conf_post.h [HYBRID_MALLOC || DARWIN_OS && HAVE_UNEXEC]:
    Include <stdlib.h> here, before redirecting 'malloc' and friends
    to their hybrid_* and unexec_* equivalents.  #undef malloc and
    friends before redefining.  Provide prototypes for the
    replacements.  Suggested by Paul Eggert <eggert@cs.ucla.edu>.
    * src/gmalloc.c [HYBRID_MALLOC]: Remove declarations of 'malloc'
    and friends, as they are now redundant: we include <stdlib.h> in
    conf_post.h before redefining 'malloc' etc., and that provides
    prototypes from system headers.
    
    * configure.ac (HYBRID_MALLOC): Remove kludge to avoid replacement
    of 'free' by Gnulib.  (Bug#36649)
---
 configure.ac    |  3 ---
 src/conf_post.h | 31 ++++++++++++++++++++++++++++++-
 src/gmalloc.c   | 10 ----------
 3 files changed, 30 insertions(+), 14 deletions(-)

diff --git a/configure.ac b/configure.ac
index d35ac6d..d99e539 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2309,9 +2309,6 @@ elif test "$hybrid_malloc" = yes; then
   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
diff --git a/src/conf_post.h b/src/conf_post.h
index 176ab28..8558dc4 100644
--- a/src/conf_post.h
+++ b/src/conf_post.h
@@ -99,10 +99,28 @@ typedef bool bool_bf;
 # 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
@@ -111,12 +129,23 @@ typedef bool bool_bf;
    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
diff --git a/src/gmalloc.c b/src/gmalloc.c
index 66008ea..dedd25f 100644
--- a/src/gmalloc.c
+++ b/src/gmalloc.c
@@ -1690,16 +1690,6 @@ valloc (size_t size)
 #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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]