I'm cross-compiling eglibc for new processor using llvm tool chain (llcm-gcc, see
www.llvm.org).
Build passes, but creates miscompiled crt* files due to lack of -fno-toplevel-reorder support in llvm-gcc.
This option might become deprecated in gcc (~v 4.6), and seems never will be supported by llvm.
Particular affected file is libc/sysdeps/generic/initfini.c. It contains inlined asm with special markup of prologue/epilogue. LLVM outputs all top level inlined asm as first bleck, and only after that outputs functions. As result sed strips wrong parts into crt*.s.
I've got advice on llvm-dev maillist (see below) to split files or avoid these tricks.
Could you please share your point of view regarding issues with -fno-toplevel-reorder?
Regards,
Sergey Yakoushkin
2010/2/22 Török Edwin <edwintorok@xxxxxxxxx>
On 2010-02-21 23:36, Sergey Yakoushkin wrote:
> Hi, Rafael
>
> Inlined asm markup inside functions and on the top level is used to
> split asm prologue/epilogue parts in very fine-grained manner.
> So, splitting source c won't give the same result.
You could have 2 files:
- 1 which contains the function, and a marker where prolog ends
(beginning of file is implicit marker of where it begins)
- 1 which contains the function, and a marker where epilog begins
(end of file is implicit marker of where it ends)
Or just look at ./sysdeps/x86_64/elf/initfini.c, its a single asm()
block containing all relevant markers, and no C code.
I think thats better than all these hacks to get the asm you want out of
C code.
Best regards,
--Edwin