&& (h->root.type == bfd_link_hash_defined
|| h->root.type == bfd_link_hash_defweak));
- if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
+ if (h->root.u.def.section == htab->root.sdynrelro)
s = htab->root.sreldynrelro;
else
s = htab->root.srelbss;
struct bfd_link_info *info = (struct bfd_link_info *) p;
/* A GOTPLT reloc, when activated, is supposed to be included into
- the PLT refcount. */
+ the PLT refcount, when the symbol isn't set-or-forced local. */
BFD_ASSERT (h->gotplt_refcount == 0
+ || h->root.plt.refcount == -1
|| h->gotplt_refcount <= h->root.plt.refcount);
/* If nobody wanted a GOTPLT with this symbol, we're done. */
srelgot = elf_hash_table (info)->srelgot;
/* Put accurate refcounts there. */
+ BFD_ASSERT (h->root.got.refcount >= 0);
h->root.got.refcount += h->gotplt_refcount;
h->reg_got_refcount = h->gotplt_refcount;
/* PR15323, ref flags aren't set for references in the same
object. */
- h->root.non_ir_ref = 1;
+ h->root.non_ir_ref_regular = 1;
}
r_type = ELF32_R_TYPE (rel->r_info);
continue;
h->needs_plt = 1;
- h->plt.refcount++;
+
+ /* If the symbol is forced local, the refcount is unavailable. */
+ if (h->plt.refcount != -1)
+ h->plt.refcount++;
break;
case R_CRIS_8: