From c57da1a761a4d7bc0191a9ef568f793296920606 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 1 Feb 2013 11:06:37 +0000 Subject: [PATCH] * elf64-ppc.c (dec_dynrel_count): Don't error when elf_gc_sweep_symbol clears def_regular. --- bfd/ChangeLog | 5 +++++ bfd/elf64-ppc.c | 13 +++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 470ecb9e224..7614ca0b192 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2013-02-01 Alan Modra + + * elf64-ppc.c (dec_dynrel_count): Don't error when elf_gc_sweep_symbol + clears def_regular. + 2013-01-31 Tristan Gingold * mach-o.c (bfd_mach_o_scan): Call bfd_mach_o_flatten_sections diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 6ac3bc6f2f8..310b9d6dbc3 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -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) -- 2.30.2