Line 1787... |
Line 1787... |
_bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
|
_bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
|
eh->dynstr_index);
|
eh->dynstr_index);
|
}
|
}
|
}
|
}
|
|
|
if (! hppa_elf_hash_entry (eh)->plabel)
|
/* STT_GNU_IFUNC symbol must go through PLT. */
|
|
if (! hppa_elf_hash_entry (eh)->plabel
|
|
&& eh->type != STT_GNU_IFUNC)
|
{
|
{
|
eh->needs_plt = 0;
|
eh->needs_plt = 0;
|
eh->plt = elf_hash_table (info)->init_plt_refcount;
|
eh->plt = elf_hash_table (info)->init_plt_offset;
|
}
|
}
|
}
|
}
|
|
|
/* Adjust a symbol defined by a dynamic object and referenced by a
|
/* Adjust a symbol defined by a dynamic object and referenced by a
|
regular object. The current definition is in some section of the
|
regular object. The current definition is in some section of the
|
Line 1812... |
Line 1814... |
/* If this is a function, put it in the procedure linkage table. We
|
/* If this is a function, put it in the procedure linkage table. We
|
will fill in the contents of the procedure linkage table later. */
|
will fill in the contents of the procedure linkage table later. */
|
if (eh->type == STT_FUNC
|
if (eh->type == STT_FUNC
|
|| eh->needs_plt)
|
|| eh->needs_plt)
|
{
|
{
|
|
/* If the symbol is used by a plabel, we must allocate a PLT slot.
|
|
The refcounts are not reliable when it has been hidden since
|
|
hide_symbol can be called before the plabel flag is set. */
|
|
if (hppa_elf_hash_entry (eh)->plabel
|
|
&& eh->plt.refcount <= 0)
|
|
eh->plt.refcount = 1;
|
|
|
if (eh->plt.refcount <= 0
|
if (eh->plt.refcount <= 0
|
|| (eh->def_regular
|
|| (eh->def_regular
|
&& eh->root.type != bfd_link_hash_defweak
|
&& eh->root.type != bfd_link_hash_defweak
|
&& ! hppa_elf_hash_entry (eh)->plabel
|
&& ! hppa_elf_hash_entry (eh)->plabel
|
&& (!info->shared || info->symbolic)))
|
&& (!info->shared || info->symbolic)))
|