diff options
author | Ken Brown <kbrown@cornell.edu> | 2014-08-28 10:48:02 -0400 |
---|---|---|
committer | Ken Brown <kbrown@cornell.edu> | 2014-08-28 10:48:02 -0400 |
commit | ea652500776aacbb8cb64f9ecca16a2d2c7add80 (patch) | |
tree | c759fc62dfa422e8fb636aef6dbb04df2c68cc7e /configure.ac | |
parent | a7ef7a0e53ae1f391f4bda207bb5e9b9d833d354 (diff) | |
download | emacs-ea652500776aacbb8cb64f9ecca16a2d2c7add80.tar.gz |
Add support for HYBRID_MALLOC, allowing the use of gmalloc before
dumping and the system malloc after dumping. (Bug#18222)
* configure.ac (HYBRID_MALLOC): New macro; define to use gmalloc
before dumping and the system malloc after dumping. Define on Cygwin.
* src/conf_post.h (malloc, realloc, calloc, free) [HYBRID_MALLOC]:
Define as macros, expanding to hybrid_malloc, etc.
(HYBRID_GET_CURRENT_DIR_NAME): New macro.
(get_current_dir_name) [HYBRID_GET_CURRENT_DIR_NAME]: Define as
macro.
* src/gmalloc.c: Set up the infrastructure for HYBRID_MALLOC, with a
full implementation on Cygwin. Remove Cygwin-specific code that
is no longer needed.
(malloc, realloc, calloc, free, aligned_alloc) [HYBRID_MALLOC]:
Redefine as macros expanding to gmalloc, grealloc, etc.
(DUMPED, ALLOCATED_BEFORE_DUMPING) [CYGWIN]: New macros.
(get_current_dir_name) [HYBRID_GET_CURRENT_DIR_NAME]: Undefine.
(USE_PTHREAD, posix_memalign) [HYBRID_MALLOC]: Don't define.
(hybrid_malloc, hybrid_calloc, hybrid_free, hybrid_realloc)
[HYBRID_MALLOC]:
(hybrid_get_current_dir_name) [HYBRID_GET_CURRENT_DIR_NAME]:
(hybrid_aligned_alloc) [HYBRID_MALLOC && (HAVE_ALIGNED_ALLOC ||
HAVE_POSIX_MEMALIGN)]: New functions.
* src/alloc.c (aligned_alloc) [HYBRID_MALLOC && (ALIGNED_ALLOC ||
HAVE_POSIX_MEMALIGN)]: Define as macro expanding to
hybrid_aligned_alloc; declare.
(USE_ALIGNED_ALLOC) [HYBRID_MALLOC && (ALIGNED_ALLOC ||
HAVE_POSIX_MEMALIGN)]: Define.
(refill_memory_reserve) [HYBRID_MALLOC]: Do nothing.
* src/sysdep.c (get_current_dir_name) [HYBRID_GET_CURRENT_DIR_NAME]:
Define as macro, expanding to gget_current_dir_name, and define
the latter.
* src/emacs.c (main) [HYBRID_MALLOC]: Don't call memory_warnings() or
malloc_enable_thread(). Don't initialize malloc.
* src/lisp.h (NONPOINTER_BITS) [CYGWIN]: Define (because GNU_MALLOC is
no longer defined on Cygwin).
(refill_memory_reserve) [HYBRID_MALLOC]: Don't declare.
* src/sheap.c (bss_sbrk_buffer_end): New variable.
* src/unexcw.c (__malloc_initialized): Remove variable.
* src/ralloc.c: Throughout, treat HYBRID_MALLOC the same as
SYSTEM_MALLOC.
* src/xdisp.c (decode_mode_spec) [HYBRID_MALLOC]: Don't check
Vmemory_full.
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac index 4617942409a..4f17a55895e 100644 --- a/configure.ac +++ b/configure.ac @@ -2033,9 +2033,13 @@ AC_CACHE_CHECK( doug_lea_malloc=$emacs_cv_var_doug_lea_malloc system_malloc=$emacs_cv_sanitize_address + +hybrid_malloc= + case "$opsys" in ## darwin ld insists on the use of malloc routines in the System framework. darwin|mingw32|sol2-10) system_malloc=yes ;; + cygwin) hybrid_malloc=yes;; esac GMALLOC_OBJ= @@ -2047,6 +2051,13 @@ if test "${system_malloc}" = "yes"; then GNU_MALLOC_reason=" (The GNU allocators don't work with this system configuration.)" VMLIMIT_OBJ= +elif test "$hybrid_malloc" = yes; then + AC_DEFINE(HYBRID_MALLOC, 1, + [Define to use gmalloc before dumping and the system malloc after.]) + GNU_MALLOC= + GNU_MALLOC_reason="only before dumping" + GMALLOC_OBJ=gmalloc.o + VMLIMIT_OBJ= else test "$doug_lea_malloc" != "yes" && GMALLOC_OBJ=gmalloc.o VMLIMIT_OBJ=vm-limit.o @@ -3568,9 +3579,11 @@ cfmakeraw cfsetspeed copysign __executable_start log2) LIBS=$OLD_LIBS dnl No need to check for aligned_alloc and posix_memalign if using -dnl gmalloc.o, as it supplies them. Don't use these functions on -dnl Darwin as they are incompatible with unexmacosx.c. -if test -z "$GMALLOC_OBJ" && test "$opsys" != darwin; then +dnl gmalloc.o, as it supplies them, unless we're using hybrid_malloc. +dnl Don't use these functions on Darwin as they are incompatible with +dnl unexmacosx.c. +if (test -z "$GMALLOC_OBJ" || test "$hybrid_malloc" = yes) \ + && test "$opsys" != darwin; then AC_CHECK_FUNCS([aligned_alloc posix_memalign], [break]) fi |