From: Paul Eggert Date: Sat, 30 Jan 2016 22:20:57 +0000 (-0800) Subject: * src/alloc.c: Include "sheap.h". X-Git-Tag: emacs-26.0.90~2780 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=e4cd4a76a621927bc155a18353ef7fd09133887d;p=emacs.git * src/alloc.c: Include "sheap.h". (alloc_unexec_pre, alloc_unexec_post) [HYBRID_MALLOC]: Set and clear bss_sbrk_did_unexec, on all platforms not just Cygwin. * src/lisp.h (alloc_unexec_pre, alloc_unexec_post) [!DOUG_LEA_MALLOC]: Declare unconditionally. * src/unexcw.c, src/unexelf.c (bss_sbrk_did_unexec): Remove decl. (unexec): Don’t set or clear bss_sbrk_did_unexec; the caller now does this. (Bug#22086) --- diff --git a/src/alloc.c b/src/alloc.c index d379761c168..617148e85e5 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -35,6 +35,7 @@ along with GNU Emacs. If not, see . */ #include "dispextern.h" #include "intervals.h" #include "puresize.h" +#include "sheap.h" #include "systime.h" #include "character.h" #include "buffer.h" @@ -117,18 +118,6 @@ my_heap_start (void) inside glibc's malloc. */ static void *malloc_state_ptr; -/* Get and free this pointer; useful around unexec. */ -void -alloc_unexec_pre (void) -{ - malloc_state_ptr = malloc_get_state (); -} -void -alloc_unexec_post (void) -{ - free (malloc_state_ptr); -} - /* Restore the dumped malloc state. Because malloc can be invoked even before main (e.g. by the dynamic linker), the dumped malloc state must be restored as early as possible using this special hook. */ @@ -177,6 +166,30 @@ voidfuncptr __MALLOC_HOOK_VOLATILE __malloc_initialize_hook #endif +/* Allocator-related actions to do just before and after unexec. */ + +void +alloc_unexec_pre (void) +{ +#ifdef DOUG_LEA_MALLOC + malloc_state_ptr = malloc_get_state (); +#endif +#ifdef HYBRID_MALLOC + bss_sbrk_did_unexec = true; +#endif +} + +void +alloc_unexec_post (void) +{ +#ifdef DOUG_LEA_MALLOC + free (malloc_state_ptr); +#endif +#ifdef HYBRID_MALLOC + bss_sbrk_did_unexec = false; +#endif +} + /* Mark, unmark, query mark bit of a Lisp string. S must be a pointer to a struct Lisp_String. */ diff --git a/src/lisp.h b/src/lisp.h index 53f123df973..3c8e3ddb137 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -3602,13 +3602,8 @@ extern void mark_object (Lisp_Object); #if defined REL_ALLOC && !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC extern void refill_memory_reserve (void); #endif -#ifdef DOUG_LEA_MALLOC extern void alloc_unexec_pre (void); extern void alloc_unexec_post (void); -#else -INLINE void alloc_unexec_pre (void) {} -INLINE void alloc_unexec_post (void) {} -#endif extern const char *pending_malloc_warning; extern Lisp_Object zero_vector; extern Lisp_Object *stack_base; diff --git a/src/unexcw.c b/src/unexcw.c index e4aa3565688..6ebd8c6f83b 100644 --- a/src/unexcw.c +++ b/src/unexcw.c @@ -30,8 +30,6 @@ along with GNU Emacs. If not, see . */ #define DOTEXE ".exe" -extern int bss_sbrk_did_unexec; - /* ** header for Windows executable files */ @@ -298,9 +296,7 @@ unexec (const char *outfile, const char *infile) ret = emacs_close (fd_in); assert (ret == 0); - bss_sbrk_did_unexec = 1; fixup_executable (fd_out); - bss_sbrk_did_unexec = 0; ret = emacs_close (fd_out); assert (ret == 0); diff --git a/src/unexelf.c b/src/unexelf.c index 3dc0456d9b6..e90199472ed 100644 --- a/src/unexelf.c +++ b/src/unexelf.c @@ -211,10 +211,6 @@ entry_address (void *section_h, ptrdiff_t idx, ptrdiff_t entsize) typedef unsigned char byte; -#ifdef HYBRID_MALLOC -extern int bss_sbrk_did_unexec; -#endif - /* **************************************************************** * unexec * @@ -231,10 +227,6 @@ unexec (const char *new_name, const char *old_name) off_t new_file_size; void *new_break; -#ifdef HYBRID_MALLOC - bss_sbrk_did_unexec = 1; -#endif - /* Pointers to the base of the image of the two files. */ caddr_t old_base, new_base;