Browse Source

cris: backport binutils patch for pr16044

Waldemar Brodkorb 7 years ago
parent
commit
b73eafe9fc

+ 1 - 0
target/config/Config.in.binutils

@@ -41,6 +41,7 @@ config ADK_TOOLCHAIN_BINUTILS_2_26_1
 	depends on !ADK_TARGET_ARCH_NDS32
 	depends on !ADK_TARGET_ARCH_RISCV32
 	depends on !ADK_TARGET_ARCH_RISCV64
+	depends on !ADK_TARGET_CPU_CRIS_CRISV10
 	depends on !ADK_TARGET_SYSTEM_NUMATO_MIMASV2
 
 config ADK_TOOLCHAIN_BINUTILS_NDS32

+ 33 - 0
toolchain/binutils/patches/2.28/cris-pr16044.patch

@@ -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:

+ 0 - 15
toolchain/binutils/patches/2.28/crisv10-assertion-remove.patch

@@ -1,15 +0,0 @@
-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-05 09:38:18.895667626 +0100
-@@ -2713,11 +2713,6 @@
- {
-   struct bfd_link_info *info = (struct bfd_link_info *) p;
- 
--  /* A GOTPLT reloc, when activated, is supposed to be included into
--     the PLT refcount.  */
--  BFD_ASSERT (h->gotplt_refcount == 0
--	      || h->gotplt_refcount <= h->root.plt.refcount);
--
-   /* If nobody wanted a GOTPLT with this symbol, we're done.  */
-   if (h->gotplt_refcount <= 0)
-     return TRUE;