Fix segfault in microblaze linker when garbage collection removes a symbol scheduled...
[deliverable/binutils-gdb.git] / bfd / elf32-microblaze.c
index 70613284cd95433ca735c68df4b6b601117b7f4a..27118c1ef070a76114b7c37dfc98836baf625cca 100644 (file)
@@ -3234,13 +3234,20 @@ microblaze_elf_finish_dynamic_symbol (bfd *output_bfd,
              || 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
         {
This page took 0.041382 seconds and 4 git commands to generate.