http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49833
--- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> 2011-07-25 13:59:10
UTC ---
X32 dynamic linker is miscompiled:
Program received signal SIGSEGV, Segmentation fault.
0x00114821 in elf_machine_rela_relative (reloc_addr_arg=<optimized out>,
l_addr=1114112, reloc=<optimized out>)
at ../sysdeps/x86_64/dl-machine.h:483
483 *reloc_addr = l_addr + reloc->r_addend;
(gdb) disass 0x00114808, 0x0011482c
Dump of assembler code from 0x114808 to 0x11482c:
0x00114808 <_dl_start+968>: lea (%rsi,%rdx,1),%edx
0x0011480b <_dl_start+971>: mov -0xc(%rdx),%edx
0x0011480e <_dl_start+974>: add %r13d,%edx
0x00114811 <_dl_start+977>: cmpb $0x8,0x4(%rax)
0x00114815 <_dl_start+981>: jne 0x114901 <_dl_start+1217>
0x0011481b <_dl_start+987>: mov 0x8(%rax),%ecx
0x0011481e <_dl_start+990>: add %r13d,%ecx
=> 0x00114821 <_dl_start+993>: mov %ecx,(%rdx)
0x00114823 <_dl_start+995>: lea 0xc(%rax),%edx
0x00114826 <_dl_start+998>: cmp %edx,%ebx
0x00114828 <_dl_start+1000>: mov %edx,%eax
0x0011482a <_dl_start+1002>: ja 0x114808 <_dl_start+968>
End of assembler dump.
(gdb) p/x $rdx
$1 = 0x111724
(gdb)
Working one:
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /export/build/gnu/glibc-x32/build-x86_64-linux/sunrpc/rpcgen
Breakpoint 1, elf_machine_rela_relative (reloc_addr_arg=<optimized out>,
l_addr=1114112, reloc=<optimized out>)
at ../sysdeps/x86_64/dl-machine.h:483
483 *reloc_addr = l_addr + reloc->r_addend;
(gdb) disass 0x00114768, 0x00114789
Dump of assembler code from 0x114768 to 0x114789:
0x00114768 <_dl_start+968>: add %esi,%edx
0x0011476a <_dl_start+970>: mov -0xc(%rdx),%edx
0x0011476d <_dl_start+973>: add %r13d,%edx
0x00114770 <_dl_start+976>: cmpb $0x8,0x4(%rax)
0x00114774 <_dl_start+980>: jne 0x114859 <_dl_start+1209>
=> 0x0011477a <_dl_start+986>: mov 0x8(%rax),%ecx
0x0011477d <_dl_start+989>: add %r13d,%ecx
0x00114780 <_dl_start+992>: mov %ecx,(%rdx)
0x00114782 <_dl_start+994>: lea 0xc(%rax),%edx
0x00114785 <_dl_start+997>: cmp %edx,%ebx
0x00114787 <_dl_start+999>: mov %edx,%eax
End of assembler dump.
(gdb) p/x $rdx
$3 = 0x32ed40
(gdb)