X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/a0b5606ec769968b10c765f8ff50f312d691ef62..refs/heads/wip:/src/unexcoff.c diff --git a/src/unexcoff.c b/src/unexcoff.c index 5ac8ea8c9b..0e47bdd865 100644 --- a/src/unexcoff.c +++ b/src/unexcoff.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1985-1988, 1992-1994, 2001-2013 Free Software +/* Copyright (C) 1985-1988, 1992-1994, 2001-2014 Free Software * Foundation, Inc. This file is part of GNU Emacs. @@ -65,6 +65,8 @@ along with GNU Emacs. If not, see . */ #include /* for _crt0_startup_flags and its bits */ #include static int save_djgpp_startup_flags; +#include +static struct __atexit *save_atexit_ptr; #define filehdr external_filehdr #define scnhdr external_scnhdr #define syment external_syment @@ -82,7 +84,7 @@ struct aouthdr unsigned long text_start;/* base of text used for this file */ unsigned long data_start;/* base of data used for this file */ }; -#endif /* not MSDOS */ +#endif /* MSDOS */ #else /* not HAVE_COFF_H */ #include #endif /* not HAVE_COFF_H */ @@ -120,7 +122,7 @@ static int pagemask; into an int which is the number of a byte. This is a no-op on ordinary machines, but not on all. */ -#define ADDR_CORRECT(x) ((char *)(x) - (char*)0) +#define ADDR_CORRECT(x) ((char *) (x) - (char *) 0) #include "lisp.h" @@ -368,6 +370,12 @@ copy_text_and_data (int new, int a_out) and which might change the way that dumped Emacs works. */ save_djgpp_startup_flags = _crt0_startup_flags; _crt0_startup_flags &= ~(_CRT0_FLAG_NO_LFN | _CRT0_FLAG_NEARPTR); + + /* Zero out the 'atexit' chain in the dumped executable, to avoid + calling the atexit functions twice. (emacs.c:main installs an + atexit function.) */ + save_atexit_ptr = __atexit_ptr; + __atexit_ptr = NULL; #endif lseek (new, (long) text_scnptr, 0); @@ -386,6 +394,9 @@ copy_text_and_data (int new, int a_out) /* Restore the startup flags. */ _crt0_startup_flags = save_djgpp_startup_flags; + + /* Restore the atexit chain. */ + __atexit_ptr = save_atexit_ptr; #endif