http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56533



Matthijs Kooijman <matthijs at stdin dot nl> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

             Status|RESOLVED                    |UNCONFIRMED

         Resolution|INVALID                     |



--- Comment #5 from Matthijs Kooijman <matthijs at stdin dot nl> 2013-03-05 
14:38:36 UTC ---

Just for future reference, the problem here seems to be that I'm using

-fwhole-program, but the GCC LTO cannot actually look at the whole program. In

particular, .a archives and .o object files that were compiled without -flto,

are passed directly to the linker and not included in LTO. Since

-fwhole-program makes the compiler assume that all files that are included in

LTO compose the whole program, the compiler removes symbols that look unused,

but then turn up missing in the final link.



So, I shouldn't have been using -fwhole-program, or I should be aware of the

above and set externally_visible attributes as needed if I insist on using

-fwhole-program.



Ideally, the compiler would ask the linker about which symbols are used in

these "non-LTO" objects, which is done by -fuse-linker-plugin (which is implied

by -flto). However, on the AVR target, it seems there is no linker plugin (at

least not in this particular case), which means that without -fwhole-program,

the compiler cannot optimize as much (since it has to assume that all symbols

are externally visible).

Reply via email to