> -----Original Message-----
> From: Cary Coutant [mailto:ccout...@google.com]
> Sent: 09 June 2010 18:43
> To: Richard Guenther
> Cc: Bingfeng Mei; Jan Hubicka; gcc@gcc.gnu.org
> Subject: Re: externally_visible and resoultion file
> 
> >> Yes, this is also what I saw without plugin. I just wonder why
> "vvvvv"
> >> is linked with plugin if resolution file is not used to eliminate
> need
> >> of externally_visible attribute here.
> >
> > Probably because of the same linker-plugin bug that causes bar
> > to be resolved.
> 
> Just to make sure I understand the problem:
> 
> - The IR file for a.c contains definitions for vvvvv and bar.
> - The linker identifies that both symbols are referenced from outside
> the LTO world (PREVAILING_DEF rather than PREVAILING_DEF_IRONLY), but
> gcc isn't (yet) reading that info from the resolution file.

> - WPA eliminates bar() and makes vvvvv static in the replacement object
> file.
> - There are still references to those symbols in b.o, which was
> compiled outside LTO.
> - The linker should be complaining about undefined symbols in both
> cases, but isn't (perhaps because it's still seeing defs left over
> from the IR files). The symbol bar has a value of 0, while the
> reference to vvvvv seems to have the right address.
> 
> Is that about right? What you're expecting is a link-time error
> reporting both bar and vvvvv as undefined, right?
> 
> -cary

Yes, I expect link-time errors of undefined reference for both
bar and vvvvvv. Instead, bar is linked to a bogus one (address 0)
and vvvvvv is linked correctly. 




Reply via email to