* elf64-ppc.c (dec_dynrel_count): Don't error when elf_gc_sweep_symbol
authorAlan Modra <amodra@gmail.com>
Fri, 1 Feb 2013 11:06:37 +0000 (11:06 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 1 Feb 2013 11:06:37 +0000 (11:06 +0000)
clears def_regular.

bfd/ChangeLog
bfd/elf64-ppc.c

index 470ecb9e2247d256e534bb53c55f66adc616f4fc..7614ca0b192f20f75a998701b524f3bb66e343e0 100644 (file)
@@ -1,3 +1,8 @@
+2013-02-01  Alan Modra  <amodra@gmail.com>
+
+       * elf64-ppc.c (dec_dynrel_count): Don't error when elf_gc_sweep_symbol
+       clears def_regular.
+
 2013-01-31  Tristan Gingold  <gingold@adacore.com>
 
        * mach-o.c (bfd_mach_o_scan): Call bfd_mach_o_flatten_sections
index 6ac3bc6f2f815ccd1d5cdb64e383ebbaf7daf8eb..310b9d6dbc345439f73dc66977fb100905748cbc 100644 (file)
@@ -7056,14 +7056,15 @@ dec_dynrel_count (bfd_vma r_info,
          void *vpp = &elf_section_data (sec)->local_dynrel;
          pp = (struct elf_dyn_relocs **) vpp;
        }
-
-      /* elf_gc_sweep may have already removed all dyn relocs associated
-        with local syms for a given section.  Don't report a dynreloc
-        miscount.  */
-      if (*pp == NULL)
-       return TRUE;
     }
 
+  /* elf_gc_sweep may have already removed all dyn relocs associated
+     with local syms for a given section.  Also, symbol flags are
+     changed by elf_gc_sweep_symbol, confusing the test above.  Don't
+     report a dynreloc miscount.  */
+  if (*pp == NULL && info->gc_sections)
+    return TRUE;
+
   while ((p = *pp) != NULL)
     {
       if (p->sec == sec)