http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49833
--- Comment #19 from H.J. Lu <hjl.tools at gmail dot com> 2011-07-25 20:13:13 UTC --- (In reply to comment #18) > (In reply to comment #14) > > Another problem: > > > > [hjl@gnu-6 gcc]$ cat /tmp/bar.c > > typedef unsigned int Elf32_Addr; > > extern void _start (void); > > int > > dl_main ( Elf32_Addr *user_entry) > > { > > if (*user_entry == (Elf32_Addr) _start) > > return 0; > > else > > return 1; > > } > > [hjl@gnu-6 gcc]$ ./xgcc -B./ -S -O2 -fPIC /tmp/bar.c -mx32 -std=gnu99 -dp > > /tmp/bar.c: In function ‘dl_main’: > > /tmp/bar.c:10:1: error: unrecognizable insn: > > (insn 6 5 7 3 (set (reg:SI 67) > > (symbol_ref:SI ("_start") [flags 0x41] <function_decl 0x7faad972ff00 > > _start>)) /tmp/bar.c:6 -1 > > (nil)) > > /tmp/bar.c:10:1: internal compiler error: in extract_insn, at recog.c:2115 > > Please submit a full bug report, > > with preprocessed source if appropriate. > > See <http://gcc.gnu.org/bugs.html> for instructions. > > [hjl@gnu-6 gcc]$ > > On x32 branch, I got > > .file "bar.c" > .text > .p2align 4,,15 > .globl dl_main > .type dl_main, @function > dl_main: > .LFB0: > .cfi_startproc > movl _start@GOTPCREL(%rip), %eax # 22 *movsi_internal/1 > [length > = 6] > cmpl %eax, (%rdi) # 8 *cmpsi_1/1 [length = 2] > setne %al # 23 *setcc_qi [length = 3] > movzbl %al, %eax # 24 *zero_extendqisi2_movzbl [length = 3] > ret # 27 return_internal [length = 1] > .cfi_endproc > .LFE0: > .size dl_main, .-dl_main > .ident "GCC: (GNU) 4.7.0 20110723 (experimental)" > .section .note.GNU-stack,"",@progbits I have a patch for this.