X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/a9faac5c6333bcbfb30a00debf3de7a44e430e49..fb39b937b0628f4592b07d0aa61a41cf696abd30:/src/unexcw.c diff --git a/src/unexcw.c b/src/unexcw.c index 54ffcf216e..96c4b4a9ae 100644 --- a/src/unexcw.c +++ b/src/unexcw.c @@ -1,7 +1,7 @@ /* unexec() support for Cygwin; complete rewrite of xemacs Cygwin unexec() code - Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 2004-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -19,7 +19,8 @@ You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ #include -#include +#include "unexec.h" + #include #include #include @@ -31,6 +32,8 @@ along with GNU Emacs. If not, see . */ extern int bss_sbrk_did_unexec; +extern int __malloc_initialized; + /* emacs symbols that indicate where bss and data end for emacs internals */ extern char my_endbss[]; extern char my_edata[]; @@ -208,9 +211,12 @@ fixup_executable (int fd) lseek (fd, (long) (exe_header->section_header[i].s_scnptr), SEEK_SET); assert (ret != -1); + /* force the dumped emacs to reinitialize malloc */ + __malloc_initialized = 0; ret = write (fd, (char *) start_address, my_endbss - (char *) start_address); + __malloc_initialized = 1; assert (ret == (my_endbss - (char *) start_address)); if (debug_unexcw) printf (" .bss, mem start 0x%08x mem length %d\n", @@ -247,7 +253,7 @@ add_exe_suffix_if_necessary (const char *name, char *modified) return (modified); } -int +void unexec (const char *outfile, const char *infile) { char infile_buffer[FILENAME_MAX]; @@ -261,7 +267,7 @@ unexec (const char *outfile, const char *infile) { /* can only dump once */ printf ("You can only dump Emacs once on this platform.\n"); - return (1); + return; } report_sheap_usage (1); @@ -296,7 +302,4 @@ unexec (const char *outfile, const char *infile) ret = close (fd_out); assert (ret == 0); - - return (0); } -