PATCH: PR ld/12761: .gnu.warning.* doesn't work when building shared library

Ian Lance Taylor iant@google.com
Tue May 17 14:30:00 GMT 2011


"H.J. Lu" <hjl.tools@gmail.com> writes:

> On Mon, May 16, 2011 at 11:03 PM, Ian Lance Taylor <iant@google.com> wrote:
>> "H.J. Lu" <hongjiu.lu@intel.com> writes:
>>
>>> We should issure a gnu warning when building shared library.  This patch
>>> implements it.  OK for trunk?
>>
>> No, this is not how warning symbols are supposed to work.  We only want
>> to issue the warning for a warning symbol if there is some reference to
>> the symbol in the main program.  If we issue the warnings for a shared
>> library, then we will wind up issuing the warnings even if the program
>> does not ever refer to the symbol.  That is undesirable and will almost
>> certainly break some uses of warning symbols.
>
> We aren't consistent:
>
> 1. Gold always issues a warning when building a shared library.
> 2. Ld sometimes issues a warning when building a shared library:

Hmmm, that's interesting.  Sounds like an oversight on my part, but
perhaps it doesn't matter.


>> I think it would be reasonable to issue a warning when building a shared
>> library for a reference to a symbol defined in some other shared
>> library, but it is necessary to not give a warning for references to
>> symbols defined in the library being created.
>>
>
> What is the difference between defined inside vs outside of DSO?
> They both reference a function with a warning.

The difference is that the author of a shared library can call a
function with a warning safely from another externally visible function
which does not require a warning.

But I'm willing to let other people decide this issue.

Ian



More information about the Binutils mailing list