http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49833
--- Comment #18 from H.J. Lu <hjl.tools at gmail dot com> 2011-07-25 20:10:27 UTC --- (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