[Bug target/56533] Linker problem on avr with lto and main function inside archive

matthijs at stdin dot nl gcc-bugzilla@gcc.gnu.org
Tue Mar 5 14:38:00 GMT 2013


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

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).

More information about the Gcc-bugs mailing list