PR12760 plugin vs. warning syms

Alan Modra amodra@gmail.com
Mon May 16 14:12:00 GMT 2011


On Mon, May 16, 2011 at 05:48:42AM -0700, H.J. Lu wrote:
> On Mon, May 16, 2011 at 1:29 AM, Alan Modra <amodra@gmail.com> wrote:
> > On Sun, May 15, 2011 at 06:37:58PM -0700, H.J. Lu wrote:
> >> We must call bfd_link_repair_undef_list when we change symbol
> >> type to bfd_link_hash_undefweak.  Otherwise, assert may fail in:
> >>
> >> void
> >> bfd_link_add_undef (struct bfd_link_hash_table *table,
> >>                     struct bfd_link_hash_entry *h)
> >> {
> >>   BFD_ASSERT (h->u.undef.next == NULL);
> >
> > How could that happen?  We know the new symbol is a definition.
> >
> 
> After we turned a definition into an undefweak, we may see a reference in
> LTO output, which will call bfd_link_add_undef.

No, because the undefweak doesn't last.  When plugin_notice returns to
_bfd_generic_link_add_one_symbol we'll turn it into a defined,
defweak, or common.

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Binutils mailing list