|
@@ -0,0 +1,33 @@
|
|
|
+diff -Nur binutils-2.28.orig/bfd/elf32-cris.c binutils-2.28/bfd/elf32-cris.c
|
|
|
+--- binutils-2.28.orig/bfd/elf32-cris.c 2017-03-02 09:23:53.000000000 +0100
|
|
|
++++ binutils-2.28/bfd/elf32-cris.c 2017-03-29 04:09:00.227801746 +0200
|
|
|
+@@ -2714,8 +2714,9 @@
|
|
|
+ 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. */
|
|
|
+@@ -2741,6 +2742,7 @@
|
|
|
+ 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;
|
|
|
+
|
|
|
+@@ -3476,7 +3478,9 @@
|
|
|
+ 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:
|