Subject: temacs crashes on invocation with new GLIBC 2.24

From: [email-masked]
Date: Thu, 11 Aug 2016 08:30:57 -0700

Using the new glibc, v2.24, and GCC 6.1

Any attempt to run 'temacs' fails with a segment fault. It appears that 
the call to 'malloc' inside the 'calloc' function in Emacs' gmalloc.c 
file starts to recurse, and eventually hits a segment fault after 
recursing 10,000+ times. Here is the stack trace at the beginning of 
this nested recursion hell.

I don't know why the call to malloc is turning into a call for the 
calloc in gmalloc.c, but I think whatever is doing that is causing this 
problem.

Any thoughts? Anything else needed?

commands to get this far:

./autogen.sh
./configure --prefix=/usr --libexecdir=/usr/lib --localstatedir=/var 
--with-x-t\
oolkit=no --without-x --without-gif
make bootstrap

src/config.h lines, that contain the word 'malloc':

4 matches in 12 lines for "malloc" in buffer: config.h
      26:   intended to work with other packages as well (like gmalloc.c)
     108:/* Define to 1 if the system memory allocator is Doug Lea style, 
with m\
alloc
     109:   hooks and malloc_set_state. */
     110:/* #undef DOUG_LEA_MALLOC */
     232:#define GNU_MALLOC 1
     234:/* Define to set the G_SLICE environment variable to 
"always-malloc" at
     236:/* #undef G_SLICE_ALWAYS_MALLOC */
     774:/* Define to 1 if you have the <malloc/malloc.h> header file. */
     775:/* #undef HAVE_MALLOC_MALLOC_H */
    1446:/* #undef SYSTEM_MALLOC */
    1599:/* Define this to check for malloc buffer overrun. */
    1600:/* #undef XMALLOC_OVERRUN_CHECK */

stack track of temacs at beginning of recursive loop:

#0  0x08133c63 in backtrace_top () at eval.c:206
#1  0xffffffff in <function called from gdb> ()
#2  0x08133c63 in backtrace_top () at eval.c:206
#3  0xffffffff in <function called from gdb> ()
#4  0x0818a4a0 in calloc (nmemb=508, size=1) at gmalloc.c:1519
#5  0x0818a4cb in calloc (nmemb=508, size=1) at gmalloc.c:1529
#6  0x0818a4cb in calloc (nmemb=1, size=508) at gmalloc.c:1529
#7  0xffffffff in g_malloc0 (n_bytes=508) at gmem.c:124
#8  0xffffffff in g_malloc0_n (n_blocks=127, n_block_bytes=4) at 
gmem.c:355
#9  0xffffffff in g_slice_init_nomessage () at gslice.c:440
#10 0xffffffff in g_slice_alloc () at gslice.c:515
#11 0xffffffff in g_slice_alloc (mem_size=56) at gslice.c:1003
#12 0xffffffff in g_hash_table_new_full (hash_func=0xb78c6320 
<g_str_hash>, key\
_equal_func=0xb78c62f0 <g_str_equal>, key_destroy_func=0x0, 
value_destroy_func=\
0x0) at ghash.c:711
#13 0xffffffff in g_hash_table_new (hash_func=0xb78c6320 <g_str_hash>, 
key_equa\
l_func=0xb78c62f0 <g_str_equal>) at ghash.c:674
#14 0xffffffff in g_quark_init () at gquark.c:61
#15 0xffffffff in glib_init_ctor () at glib-init.c:243
#16 0xffffffff in glib_init_ctor () at glib-init.c:301
#17 0xffffffff in call_init (l=<optimized out>, argc=argc@entry=1, 
argv=argv@en\
try=0xbffffd94, env=0xbffffd9c) at dl-init.c:72
#18 0xffffffff in _dl_init (env=0xbffffd9c, argv=0xbffffd94, argc=1, 
l=<optimiz\
ed out>) at dl-init.c:30
#19 0xffffffff in _dl_init (main_map=<optimized out>, argc=1, 
argv=0xbffffd94, \
env=0xbffffd9c) at dl-init.c:120
#20 0xffffffff in _dl_start_user () at /lib/ld-linux.so.2