http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55142
--- Comment #15 from H.J. Lu <hjl.tools at gmail dot com> 2012-11-01 22:30:16
UTC ---
All binaries die before main:
Starting program:
/export/build/gnu/glibc-x32-long/build-x86_64-linux/libio/bug-fclose1
Program received signal SIGSEGV, Segmentation fault.
0xf7dddc8d in elf_get_dynamic_info (temp=0x0, l=0xf7ffdc18)
at get-dynamic-info.h:61
61 + DT_VERSIONTAGNUM + DT_EXTRANUM + DT_VALNUM] = dyn;
(gdb) disass $pc -19, +30
Dump of assembler code from 0xf7dddc7a to 0xf7dddc98:
0xf7dddc7a <dl_main+5210>: mov %r8d,%esi
0xf7dddc7d <dl_main+5213>: sub %eax,%esi
0xf7dddc7f <dl_main+5215>: cmp $0xa,%esi
0xf7dddc82 <dl_main+5218>: ja 0xf7ddd431 <dl_main+3089>
0xf7dddc88 <dl_main+5224>: neg %eax
0xf7dddc8a <dl_main+5226>: lea (%rcx,%rax,4),%eax
=> 0xf7dddc8d <dl_main+5229>: mov %edx,-0x40000300(%rax)
0xf7dddc93 <dl_main+5235>: jmpq 0xf7ddd431 <dl_main+3089>
End of assembler dump.
(gdb) p/x $rcx
$1 = 0xf7ffdc38
(gdb) p/x $rax
$2 = 0x37ffe064
(gdb) list
56 else if ((d_tag_utype) DT_VALTAGIDX (dyn->d_tag) < DT_VALNUM)
57 info[DT_VALTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM
58 + DT_VERSIONTAGNUM + DT_EXTRANUM] = dyn;
59 else if ((d_tag_utype) DT_ADDRTAGIDX (dyn->d_tag) < DT_ADDRNUM)
60 info[DT_ADDRTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM
61 + DT_VERSIONTAGNUM + DT_EXTRANUM + DT_VALNUM] = dyn;
62 ++dyn;
63 }
64
65 #define DL_RO_DYN_TEMP_CNT 8
(gdb) p info
$3 = (Elf32_Dyn **) 0xf7ffdc38
(gdb) bt
#0 0xf7dddc8d in elf_get_dynamic_info (temp=0x0, l=0xf7ffdc18)
at get-dynamic-info.h:61
#1 dl_main (phdr=<optimized out>, phnum=9, user_entry=<optimized out>,
auxv=<optimized out>) at rtld.c:1311
#2 0xf7df12c0 in _dl_sysdep_start (
start_argptr=start_argptr@entry=0xffffd100, dl_main=<optimized out>)
at ../elf/dl-sysdep.c:241
#3 0xf7ddfaa8 in _dl_start_final (arg=0xffffd100) at rtld.c:331
#4 _dl_start (arg=<optimized out>) at rtld.c:557
#5 0xf7ddc057 in _start ()
from /export/build/gnu/glibc-x32-long/build-x86_64-linux/elf/ld.so
#6 0x00000001 in ?? ()
#7 0x00000000 in ?? ()
(gdb)