• Ken Brown's avatar
    Add support for HYBRID_MALLOC, allowing the use of gmalloc before · ea652500
    Ken Brown authored
    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.
    ea652500
conf_post.h 10.3 KB