Subject: 26.1.50; temacs bootstrap execs itself forever on alpha-unknown-linux-gnu

From: Ulrich Mueller <[email-masked]>
Date: Sat, 7 Jul 2018 17:28:22 +0200

Forwarding Gentoo bug https://bugs.gentoo.org/660448:

Tobias Klausmann has reported a problem with building Emacs 26.1 on an
Alpha machine under GNU/Linux:

make -C ../lisp update-subdirs
make[2]: Entering directory '/space/portage-tmp/portage/app-editors/emacs-26.1/work/emacs-26.1/lisp'
for file in . ./calc ./calendar ./emacs-lisp ./emulation ./erc ./eshell ./gnus ./image ./international ./language ./mail ./mh-e ./net ./nxml ./obsolete ./org ./play ./progmodes ./term ./textmodes ./url ./vc; do \
   ./../build-aux/update-subdirs $file; \
done;
make[2]: Leaving directory '/space/portage-tmp/portage/app-editors/emacs-26.1/work/emacs-26.1/lisp'
./temacs --batch  --load loadup bootstrap
[Build aborted with C-c after waiting for a long time.]

Seemingly temacs hangs there indefinitely, but gdb shows that it is
executing itself forever:

(gdb) run
Starting program: /space/homedirs/ulm/emacs/src/temacs --batch --load loadup bootstrap
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
process 859 is executing new program: /space/homedirs/ulm/emacs/src/temacs
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
process 859 is executing new program: /space/homedirs/ulm/emacs/src/temacs
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
process 859 is executing new program: /space/homedirs/ulm/emacs/src/temacs
^C
Program received signal SIGINT, Interrupt.
0x00000200000010f0 in ?? () from /lib/ld-linux.so.2

Setting a breakpoint in disable_address_randomization() shows the
following values:

   pers = 0
   desired_pers = 262144
   personality(desired_pers) = 0
   personality(0xffffffff) = 262144

So apparently, setting the persona to ADDR_NO_RANDOMIZE succeeds?
However, after the execvp, the above values are the same as before
again (especially pers = 0).

Git bisecting shows that the problem was introduced by this commit:

commit e95b023163e96538b15f030b7176b7ec59cf86f5
Author: Paul Eggert <[email-masked]>
Date:   Fri Jul 15 13:07:09 2016 +0200

    Port to glibc 2.24 (pre-release) + ppc64

    Inspired by a suggestion by Florian Weimer in:
    https://sourceware.org/ml/libc-alpha/2016-07/msg00425.html
    * configure.ac (HAVE_PERSONALITY_ADDR_NO_RANDOMIZE):
    Rename from HAVE_PERSONALITY_LINUX32, and check for
    ADDR_NO_RANDOMIZE (the crucial thing) instead of for LINUX32.
    All uses changed.
    * src/emacs.c (main) [HAVE_PERSONALITY_ADDR_NO_RANDOMIZE]:
    Use ADDR_NO_RANDOMIZE from personality.h rather than inventing the
    flag ourselves.  Just set that flag, rather than also setting the
    persona.  When doing it, avoid functions like putenv that may
    allocate memory.

In GNU Emacs 26.1.50 (build 1, alpha-unknown-linux-gnu)
 of 2018-07-07 built on monolith
Repository revision: b73cde5e2815c531df7f5fd13e214a7d92f78239

Configured using:
 'configure --prefix=/usr --build=alpha-unknown-linux-gnu
 --host=alpha-unknown-linux-gnu --mandir=/usr/share/man
 --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc
 --localstatedir=/var/lib --disable-silent-rules
 --docdir=/usr/share/doc/emacs-26.1
 --htmldir=/usr/share/doc/emacs-26.1/html --libdir=/usr/lib
 --program-suffix=-emacs-26 --infodir=/usr/share/info/emacs-26
 --localstatedir=/var
 --enable-locallisppath=/etc/emacs:/usr/share/emacs/site-lisp
 --without-compress-install --without-hesiod --without-pop
 --with-file-notification=inotify --enable-acl --without-dbus
 --without-modules --without-gameuser --without-gpm --without-kerberos
 --without-kerberos5 --without-lcms2 --without-xml2 --without-mailutils
 --without-selinux --with-gnutls --without-libsystemd --with-threads
 --without-wide-int --with-zlib --with-sound=no --without-x
 --without-ns'

Configured features:
NOTIFY ACL GNUTLS ZLIB THREADS