https://sourceware.org/bugzilla/show_bug.cgi?id=29998
--- Comment #20 from Nick Clifton <nickc at redhat dot com> --- (In reply to Jan Janssen from comment #18) Hi Jan, There appear to be a few issues with this second test case: > $ cat test1.c > void test1() {} > $ cat test2.c > void test1(); static void test2() { test1(); } These files appear to be redundant - their code is never called. > $ cat test3.c > int run(void) { > volatile unsigned i = 4278190080; > return __builtin_popcount(i); > } Shouldn't this function be called main() rather than run() ? > $ x86_64-w64-mingw32-gcc -o test.exe -flto -nostdlib test2.o test3.o > libtest.a -lgcc If you are linking without the standard libraries, can you really expect the program to run ? > When I run the above build steps (with your path applied), they produce the > same assembly for run(), except for this line: > > 14000102b: e8 00 00 00 00 call 140001030 <run+0x1c> > > vs this without -flto: > > 140001037: e8 24 00 00 00 call 140001060 <__popcountdi2> > > The lto build doesn't even include popcount and the EFI binary either > produces a page fault or division error. True - but as far as I can see this code will never be called. So having LTO eliminate the call to __popcountdi2 is understandable. At the moment it looks to me like you are trying to do something unusual - ie creating a binary without the usual start up files or libraries - and this is not working as expected. But I am currently unconvinced that the linker is really to blame for the problems... Cheers Nick -- You are receiving this mail because: You are on the CC list for the bug.