[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Emacs-diffs] master 0c94b84: * nt/inc/ms-w32.h (execve) [MINGW_W64]

From: Angelo Graziosi
Subject: Re: [Emacs-diffs] master 0c94b84: * nt/inc/ms-w32.h (execve) [MINGW_W64]: Make commentary more accurate.
Date: Sun, 4 Sep 2016 12:34:20 +0200
User-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0

Hi Paul,

Il 02/09/2016 08:53, Eli Zaretskii ha scritto:
From: Ken Brown <address@hidden>
Cc: Angelo Graziosi <address@hidden>
Date: Thu, 1 Sep 2016 15:57:00 -0400

On 9/1/2016 1:16 PM, Eli Zaretskii wrote:
+   However, using the prototype with intptr_t causes GCC to emit
+   warnings.  Fortunately, execve is not used in the MinGW build, but
+   the code that references it is still compiled.  */

Wouldn't it be easier to prevent that code from being compiled?

It would for the Windows build, but it would add one (actually more,
see below) #ifdef WINDOWSNT into the mainline code.  AFAIR, Paul
(CC'ed) wanted to keep those to a minimum, so I preferred not to ifdef
away the code.

if I understand (in short) there is code compiled but not used.. Would it better to exclude that code as Ken suggests, then?

May you comment?


I think the following would suffice:

--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -146,6 +146,7 @@ disable_address_randomization (void)

+#ifndef WINDOWSNT
  /* Execute the program in FILE, with argument vector ARGV and environ
     ENVP.  Return an error number if unsuccessful.  This is like execve
     except it reenables ASLR in the executed program if necessary, and
@@ -170,6 +171,7 @@ emacs_exec_file (char const *file, char *const
*argv, char *const *envp)

    return err;
+#endif /* not WINDOWSNT */

That whole function is not used on Windows, so if we are to do this,
the following fragment of main in emacs.c should also be ifdefed away:

    /* True if address randomization interferes with memory allocation.  */
  # ifdef __PPC64__
    bool disable_aslr = true;
  # else
    bool disable_aslr = dumping;
  # endif

    if (disable_aslr && disable_address_randomization ())
        /* Set this so the personality will be reverted before execs
           after this one.  */
        xputenv ("EMACS_HEAP_EXEC=true");

        /* Address randomization was enabled, but is now disabled.
           Re-execute Emacs to get a clean slate.  */
        execvp (argv[0], argv);

        /* If the exec fails, warn and then try anyway.  */
        perror (argv[0]);

If Paul doesn't mind (nor anyone else), we can certainly do that.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]