Manuel López-Ibáñez <lopeziba...@gmail.com> writes:

> On 11 June 2010 15:04, Bingfeng Mei <b...@broadcom.com> wrote:
>> Well, mixed LTO/non-LTO is quite useful. For example, we have mixed 
>> C/assembly
>> Application. Gold support for our target is still far away. I found 
>> -fwhole-program
>> is very important for our size optimization.
>
> But if I understand correctly, mixed LTO/non-LTO + whole-program is
> almost never correct. So we should really emit a warning for this
> specific combination. I think making this mistake would be quite easy
> but hard to debug.

As I understand it, that combination often can be correct.  In this
particular case it failed because there a common symbol appeared in
one file compiled with -flto and in one file compiled without -flto.
But mixing -flto/-fno-lto and common symbols in that way is not going
to be typical.  In general your program should be fine as long as you
don't try to define the same symbol with both -flto and -fno-lto,
which is exactly the case you will be in if statically linking with a
typical C library which was not compiled with -flto.

So while clearly we should diagnose this case, it's going to be
difficult to implement without giving up something useful.  It's going
to require linker support.  It works already with gold, so this means
adding something to the GNU linker.  Frankly I think the most
straightforward approach would be to add plugin support to the GNU
linker.  There is nothing gold specific about the LTO linker plugin.
Of course that approach wouldn't help on systems which can not use the
GNU linker, but we're kind of stuck on those systems anyhow.

Ian

Reply via email to