Fix ld segfault for microblaze when --gc-sections is used
Upstream: pending
https://sourceware.org/bugzilla/show_bug.cgi?id=21180

Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>

diff -Nur a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c
--- a/bfd/elf32-microblaze.c	2016-08-03 09:36:50.000000000 +0200
+++ b/bfd/elf32-microblaze.c	2017-02-23 19:43:12.612313590 +0100
@@ -3233,13 +3233,20 @@
 	      || h->dynindx == -1))
         {
           asection *sec = h->root.u.def.section;
+	  bfd_vma value;
+
+	  value = h->root.u.def.value;
+	  if (sec->output_section != NULL)
+	    /* PR 21180: If the output section is NULL, then the symbol is no
+	       longer needed, and in theory the GOT entry is redundant.  But
+	       it is too late to change our minds now...  */
+	    value += sec->output_section->vma + sec->output_offset;
+
           microblaze_elf_output_dynamic_relocation (output_bfd,
                                                     srela, srela->reloc_count++,
                                                     /* symindex= */ 0,
                                                     R_MICROBLAZE_REL, offset,
-                                                    h->root.u.def.value
-                                                    + sec->output_section->vma
-                                                    + sec->output_offset);
+                                                    value);
         }
       else
         {
