diff options
| author | Ken Brown | 2014-08-28 10:48:02 -0400 |
|---|---|---|
| committer | Ken Brown | 2014-08-28 10:48:02 -0400 |
| commit | ea652500776aacbb8cb64f9ecca16a2d2c7add80 (patch) | |
| tree | c759fc62dfa422e8fb636aef6dbb04df2c68cc7e /src/alloc.c | |
| parent | a7ef7a0e53ae1f391f4bda207bb5e9b9d833d354 (diff) | |
| download | emacs-ea652500776aacbb8cb64f9ecca16a2d2c7add80.tar.gz emacs-ea652500776aacbb8cb64f9ecca16a2d2c7add80.zip | |
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 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/alloc.c b/src/alloc.c index ac154b587e6..9c81ae2eedf 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -80,7 +80,7 @@ static bool valgrind_p; | |||
| 80 | marked objects. */ | 80 | marked objects. */ |
| 81 | 81 | ||
| 82 | #if (defined SYSTEM_MALLOC || defined DOUG_LEA_MALLOC \ | 82 | #if (defined SYSTEM_MALLOC || defined DOUG_LEA_MALLOC \ |
| 83 | || defined GC_CHECK_MARKED_OBJECTS) | 83 | || defined HYBRID_MALLOC || defined GC_CHECK_MARKED_OBJECTS) |
| 84 | #undef GC_MALLOC_CHECK | 84 | #undef GC_MALLOC_CHECK |
| 85 | #endif | 85 | #endif |
| 86 | 86 | ||
| @@ -285,7 +285,7 @@ static void gc_sweep (void); | |||
| 285 | static Lisp_Object make_pure_vector (ptrdiff_t); | 285 | static Lisp_Object make_pure_vector (ptrdiff_t); |
| 286 | static void mark_buffer (struct buffer *); | 286 | static void mark_buffer (struct buffer *); |
| 287 | 287 | ||
| 288 | #if !defined REL_ALLOC || defined SYSTEM_MALLOC | 288 | #if !defined REL_ALLOC || defined SYSTEM_MALLOC || defined HYBRID_MALLOC |
| 289 | static void refill_memory_reserve (void); | 289 | static void refill_memory_reserve (void); |
| 290 | #endif | 290 | #endif |
| 291 | static void compact_small_strings (void); | 291 | static void compact_small_strings (void); |
| @@ -1014,10 +1014,17 @@ lisp_free (void *block) | |||
| 1014 | clang 3.3 anyway. */ | 1014 | clang 3.3 anyway. */ |
| 1015 | 1015 | ||
| 1016 | #if ! ADDRESS_SANITIZER | 1016 | #if ! ADDRESS_SANITIZER |
| 1017 | # if !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC | 1017 | # if !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC && !defined HYBRID_MALLOC |
| 1018 | # define USE_ALIGNED_ALLOC 1 | 1018 | # define USE_ALIGNED_ALLOC 1 |
| 1019 | /* Defined in gmalloc.c. */ | 1019 | /* Defined in gmalloc.c. */ |
| 1020 | void *aligned_alloc (size_t, size_t); | 1020 | void *aligned_alloc (size_t, size_t); |
| 1021 | # elif defined HYBRID_MALLOC | ||
| 1022 | # if defined ALIGNED_ALLOC || defined HAVE_POSIX_MEMALIGN | ||
| 1023 | # define USE_ALIGNED_ALLOC 1 | ||
| 1024 | # define aligned_alloc hybrid_aligned_alloc | ||
| 1025 | /* Defined in gmalloc.c. */ | ||
| 1026 | void *aligned_alloc (size_t, size_t); | ||
| 1027 | # endif | ||
| 1021 | # elif defined HAVE_ALIGNED_ALLOC | 1028 | # elif defined HAVE_ALIGNED_ALLOC |
| 1022 | # define USE_ALIGNED_ALLOC 1 | 1029 | # define USE_ALIGNED_ALLOC 1 |
| 1023 | # elif defined HAVE_POSIX_MEMALIGN | 1030 | # elif defined HAVE_POSIX_MEMALIGN |
| @@ -3829,7 +3836,7 @@ memory_full (size_t nbytes) | |||
| 3829 | void | 3836 | void |
| 3830 | refill_memory_reserve (void) | 3837 | refill_memory_reserve (void) |
| 3831 | { | 3838 | { |
| 3832 | #ifndef SYSTEM_MALLOC | 3839 | #if !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC |
| 3833 | if (spare_memory[0] == 0) | 3840 | if (spare_memory[0] == 0) |
| 3834 | spare_memory[0] = malloc (SPARE_MEMORY); | 3841 | spare_memory[0] = malloc (SPARE_MEMORY); |
| 3835 | if (spare_memory[1] == 0) | 3842 | if (spare_memory[1] == 0) |