X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/5df4f04cd32af723742c81095b38ae83b3c2b462..6bee44d6400c47201de3abfef17b63ce9acfb8c9:/src/unexcw.c diff --git a/src/unexcw.c b/src/unexcw.c index 70ee24f83f..eae534cf4d 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,6 +19,8 @@ You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ #include +#include "unexec.h" + #include #include #include @@ -31,6 +33,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 +212,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,9 +254,8 @@ add_exe_suffix_if_necessary (const char *name, char *modified) return (modified); } -int -unexec (char *outfile, char *infile, unsigned start_data, unsigned d1, - unsigned d2) +void +unexec (const char *outfile, const char *infile) { char infile_buffer[FILENAME_MAX]; char outfile_buffer[FILENAME_MAX]; @@ -262,7 +268,7 @@ unexec (char *outfile, char *infile, unsigned start_data, unsigned d1, { /* can only dump once */ printf ("You can only dump Emacs once on this platform.\n"); - return (1); + return; } report_sheap_usage (1); @@ -297,9 +303,4 @@ unexec (char *outfile, char *infile, unsigned start_data, unsigned d1, ret = close (fd_out); assert (ret == 0); - - return (0); } - -/* arch-tag: fc44f6c3-ca0a-45e0-a5a2-58b6101b1e65 - (do not change this comment) */