[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master ebd174e: Improve documentation of pdumper; minor co
From: |
Eli Zaretskii |
Subject: |
[Emacs-diffs] master ebd174e: Improve documentation of pdumper; minor code cleanup |
Date: |
Wed, 16 Jan 2019 10:57:08 -0500 (EST) |
branch: master
commit ebd174e218f46e2d3e30646a8426f6ec1ae9e8d1
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>
Improve documentation of pdumper; minor code cleanup
* src/emacs.c (usage_message): Add the --dump-file option.
(string_starts_with_p, find_argument): Functions removed; use
'argmatch' instead.
(PDUMP_FILE_ARG): Macro removed; use literal strings instead,
as with other command-line options. Use HAVE_PDUMPER for cpp
conditionals which used PDUMP_FILE_ARG.
(load_pdump, main): Use 'argmatch' for "--dump-file" and
"--temacs" arguments, thus supporting the "-dump-file" and
"-temacs" variants, for consistency with other options.
(main): Remove the extra fatal error for using --dump-file in
unexec'ed Emacs: load_pdump does that anyway.
(standard_args): Add --dump-file and --temacs, with
appropriate priorities.
* etc/NEWS: Expand on the pdumper support.
* doc/emacs/cmdargs.texi (Initial Options): Document the
'--dump-file' command-line option.
---
doc/emacs/cmdargs.texi | 11 +++++++
etc/NEWS | 22 +++++++++++---
src/emacs.c | 82 ++++++++++++++++++++------------------------------
3 files changed, 61 insertions(+), 54 deletions(-)
diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi
index d51d97b..b491267 100644
--- a/doc/emacs/cmdargs.texi
+++ b/doc/emacs/cmdargs.texi
@@ -383,6 +383,17 @@ verify that their module conforms to the module API
requirements. The
option makes Emacs abort if a module-related assertion triggers.
@xref{Writing Dynamic Modules,, Writing Dynamically-Loaded Modules,
elisp, The GNU Emacs Lisp Reference Manual}.
+
address@hidden address@hidden
address@hidden --dump-file
address@hidden specify dump file
+Load the dumped Emacs state from the named @var{file}. By default,
+Emacs will look for its dump state in a file named
address@hidden@var{emacs}.pdmp} in the directory of the executable, where
address@hidden is the name of the Emacs executable file, normally just
address@hidden However, if you rename or move the dump file to a
+different place, you can use this option to tell Emacs where to find
+that file.
@end table
@node Command Example
diff --git a/etc/NEWS b/etc/NEWS
index 5af0c1f..0250307 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -59,10 +59,24 @@ option '--enable-check-lisp-object-type' is therefore no
longer as
useful and so is no longer enabled by default in developer builds,
to reduce differences between developer and production builds.
-** Emacs by default uses a "portable dumper" instead of unexec,
-improving compatibility with modern systems and supporting ASLR.
-Emacs now needs an "emacs.pdmp" file, generated during the built, in
-its data directory at runtime.
++++
+** Emacs now uses a "portable dumper" instead of unexec.
+This improves compatibility with memory allocation on modern systems,
+and in particular better supports the Address Space Layout
+Randomization (ASLR) feature, a security technique used by most modern
+operating systems.
+
+Portable dumping can be disabled at configure time via the configure
+option '--with-pdumper=no' (but we don't recommend that, unless the
+portable dumping doesn't work on your system for some reason---please
+report such systems to the Emacs developers as bugs).
+
+When built with the portable dumping support (which is the default),
+Emacs looks for the 'emacs.pdmp' file, generated during the build, in
+its data directory at startup, and loads the dumped state from there.
+The new command-line argument '--dump-file=FILE' allows to specify a
+non-default '.pdmp' file to load the state from; see the node "Initial
+Options" in the Emacs manual for more information.
** Ibuffer
diff --git a/src/emacs.c b/src/emacs.c
index 9c88b6e..c1133f2 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -231,6 +231,11 @@ Initialization options:\n\
--module-assertions assert behavior of dynamic modules\n\
",
#endif
+#ifdef HAVE_PDUMPER
+ "\
+--dump-file FILE read dumped state from FILE\n\
+",
+#endif
"\
--no-build-details do not add build details such as time stamps\n\
--no-desktop do not load a saved desktop\n\
@@ -650,43 +655,6 @@ argmatch (char **argv, int argc, const char *sstr, const
char *lstr,
}
}
-static bool
-string_starts_with_p (const char* string, const char* prefix)
-{
- return strncmp (string, prefix, strlen (prefix)) == 0;
-}
-
-/* Return the value of GNU-style long argument ARGUMENT if given on
- command line. ARGUMENT must begin with "-". If ARGUMENT is not
- given, return NULL. */
-static char *
-find_argument (const char *argument, int argc, char **argv)
-{
- char *found = NULL;
- int i;
-
- eassert (argument[0] == '-');
-
- for (i = 1; i < argc; ++i)
- if (string_starts_with_p (argv[i], argument) &&
- ((argv[i] + strlen (argument))[0] == '=' ||
- (argv[i] + strlen (argument))[0] == '\0'))
- {
- int j = i;
- found = argv[j++] + strlen (argument);
- if (*found == '=')
- ++found;
- else if (i < argc)
- found = argv[j++];
- else
- fatal ("no argument given for %s", argument);
- break;
- }
- else if (strcmp (argv[i], "--") == 0)
- break;
- return found;
-}
-
/* Close standard output and standard error, reporting any write
errors as best we can. This is intended for use with atexit. */
static void
@@ -731,8 +699,6 @@ dump_error_to_string (enum pdumper_load_result result)
}
}
-#define PDUMP_FILE_ARG "--dump-file"
-
static enum pdumper_load_result
load_pdump (int argc, char **argv)
{
@@ -753,7 +719,16 @@ load_pdump (int argc, char **argv)
/* Look for an explicitly-specified dump file. */
const char *path_exec = PATH_EXEC;
- char *dump_file = find_argument (PDUMP_FILE_ARG, argc, argv);
+ char *dump_file = NULL;
+ int skip_args = 0;
+ while (skip_args < argc - 1)
+ {
+ if (argmatch (argv, argc, "-dump-file", "--dump-file", 6,
+ &dump_file, &skip_args)
+ || argmatch (argv, argc, "--", NULL, 2, NULL, &skip_args))
+ break;
+ skip_args++;
+ }
result = PDUMPER_NOT_LOADED;
if (dump_file)
@@ -822,7 +797,6 @@ main (int argc, char **argv)
void *stack_bottom_variable;
bool do_initial_setlocale;
- int skip_args = 0;
bool no_loadup = false;
char *junk = 0;
char *dname_arg = 0;
@@ -838,7 +812,15 @@ main (int argc, char **argv)
stack_bottom = (char *) &stack_bottom_variable;
const char *dump_mode = NULL;
- const char *temacs = find_argument ("--temacs", argc, argv);
+ int skip_args = 0;
+ char *temacs = NULL;
+ while (skip_args < argc - 1)
+ {
+ if (argmatch (argv, argc, "-temacs", "--temacs", 8, &temacs, &skip_args)
+ || argmatch (argv, argc, "--", NULL, 2, NULL, &skip_args))
+ break;
+ skip_args++;
+ }
#ifdef HAVE_PDUMPER
bool attempt_load_pdump = false;
#endif
@@ -874,18 +856,11 @@ main (int argc, char **argv)
{
fatal ("--temacs not supported for unexeced emacs");
}
- else if (initialized)
- {
-#ifdef HAVE_PDUMPER
- if (find_argument (PDUMP_FILE_ARG, argc, argv))
- fatal ("%s not supported in unexeced emacs", PDUMP_FILE_ARG);
-#endif
- }
else
{
eassert (!initialized);
eassert (!temacs);
-#ifdef PDUMP_FILE_ARG
+#ifdef HAVE_PDUMPER
attempt_load_pdump = true;
#endif
}
@@ -948,6 +923,7 @@ main (int argc, char **argv)
argc = 0;
while (argv[argc]) argc++;
+ skip_args = 0;
if (argmatch (argv, argc, "-version", "--version", 3, NULL, &skip_args))
{
const char *version, *copyright;
@@ -1992,6 +1968,12 @@ static const struct standard_args standard_args[] =
{ "-color", "--color", 5, 0},
{ "-no-splash", "--no-splash", 3, 0 },
{ "-no-desktop", "--no-desktop", 3, 0 },
+ /* The following two must be just above the file-name args, to get
+ them out of our way, but without mixing them with file names. */
+ { "-temacs", "--temacs", 1, 1 },
+#ifdef HAVE_PDUMPER
+ { "-dump-file", "--dump-file", 1, 1 },
+#endif
#ifdef HAVE_NS
{ "-NSAutoLaunch", 0, 5, 1 },
{ "-NXAutoLaunch", 0, 5, 1 },
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master ebd174e: Improve documentation of pdumper; minor code cleanup,
Eli Zaretskii <=