Do not allow a dumped Emacs to be dumped

This commit is contained in:
Daniel Colascione 2014-03-21 00:27:26 -07:00
commit f58269c4b2
4 changed files with 20 additions and 7 deletions

View file

@ -1,3 +1,12 @@
2014-03-21 Daniel Colascione <dancol@dancol.org>
Always prohibit dumping a dumped Emacs.
* emacs.c (might_dump): New variable.
(Fdump_emacs): Always prohibit dumping of dumped Emacs.
* lisp.h (might_dump): Declare.
* unexcw.c (unexec): Remove now-redundant multiple-dump detection code.
2014-03-20 Paul Eggert <eggert@cs.ucla.edu>
* doc.c (store_function_docstring): Fix pointer signedness mismatch.

View file

@ -121,6 +121,9 @@ Lisp_Object Vlibrary_cache;
on subsequent starts. */
bool initialized;
/* Set to true if this instance of Emacs might dump. */
bool might_dump;
#ifdef DARWIN_OS
extern void unexec_init_emacs_zone (void);
#endif
@ -1631,6 +1634,10 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
#endif
#endif
#ifndef CANNOT_DUMP
might_dump = !initialized;
#endif
initialized = 1;
#ifdef LOCALTIME_CACHE
@ -2082,6 +2089,9 @@ You must run Emacs in batch mode in order to dump it. */)
if (! noninteractive)
error ("Dumping Emacs works only in batch mode");
if (!might_dump)
error ("Emacs can be dumped only once");
#ifdef GNU_LINUX
/* Warn if the gap between BSS end and heap start is larger than this. */

View file

@ -800,6 +800,7 @@ extern _Noreturn Lisp_Object wrong_type_argument (Lisp_Object, Lisp_Object);
/* Defined in emacs.c. */
extern bool initialized;
extern bool might_dump;
/* Defined in eval.c. */
extern Lisp_Object Qautoload;

View file

@ -286,13 +286,6 @@ unexec (const char *outfile, const char *infile)
int ret;
int ret2;
if (bss_sbrk_did_unexec)
{
/* can only dump once */
printf ("You can only dump Emacs once on this platform.\n");
return;
}
report_sheap_usage (1);
infile = add_exe_suffix_if_necessary (infile, infile_buffer);