X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/a971635315e259c076de020b3676c04d1dcc415e..fb39b937b0628f4592b07d0aa61a41cf696abd30:/src/unexcw.c diff --git a/src/unexcw.c b/src/unexcw.c index 04f108b1be..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 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 @@ -30,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[]; @@ -207,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", @@ -246,9 +253,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]; @@ -261,7 +267,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); @@ -296,9 +302,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) */