h->def_regular, set h->ref_regular.
(allocate_dynrelocs): Only force output of STT_GNU_IFUNC plt entries
and dynamic relocations if h->ref_regular.
+2010-03-01 David S. Miller <davem@davemloft.net>
+
+ * elfxx-sparc.c (_bfd_sparc_elf_check_relocs): When STT_GNU_IFUNC and
+ h->def_regular, set h->ref_regular.
+ (allocate_dynrelocs): Only force output of STT_GNU_IFUNC plt entries
+ and dynamic relocations if h->ref_regular.
+
2010-02-25 Alan Modra <amodra@gmail.com>
PR ld/11304
if (h && h->type == STT_GNU_IFUNC)
{
if (h->def_regular)
- h->plt.refcount += 1;
+ {
+ h->ref_regular = 1;
+ h->plt.refcount += 1;
+ }
}
/* Compatibility with old R_SPARC_REV32 reloc conflicting
if ((htab->elf.dynamic_sections_created
&& h->plt.refcount > 0)
|| (h->type == STT_GNU_IFUNC
- && h->def_regular))
+ && h->def_regular
+ && h->ref_regular))
{
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
}
if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)
- || h->type == STT_GNU_IFUNC)
+ || (h->type == STT_GNU_IFUNC
+ && h->def_regular))
{
asection *s = htab->elf.splt;