* elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Drop
authorAlan Modra <amodra@gmail.com>
Mon, 21 Jul 2008 07:49:58 +0000 (07:49 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 21 Jul 2008 07:49:58 +0000 (07:49 +0000)
unwanted zero terminators.

bfd/ChangeLog
bfd/elf-eh-frame.c

index f00c73a..a81993d 100644 (file)
@@ -1,5 +1,10 @@
 2008-07-21  Alan Modra  <amodra@bigpond.net.au>
 
+       * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Drop
+       unwanted zero terminators.
+
+2008-07-21  Alan Modra  <amodra@bigpond.net.au>
+
        * elf32-spu.c (spu_elf_relocate_section): Expand
        RELOC_FOR_GLOBAL_SYMBOL.  Don't warn about undefined symbols for
        R_SPU_PPU32 and R_SPU_PPU64 relocations.
index 087c6b0..9b88499 100644 (file)
@@ -1077,7 +1077,11 @@ _bfd_elf_discard_section_eh_frame
 
   hdr_info = &elf_hash_table (info)->eh_info;
   for (ent = sec_info->entry; ent < sec_info->entry + sec_info->count; ++ent)
-    if (!ent->cie)
+    if (ent->size == 4)
+      /* There should only be one zero terminator, on the last input
+        file supplying .eh_frame (crtend.o).  Remove any others.  */
+      ent->removed = sec->map_head.s != NULL;
+    else if (!ent->cie)
       {
        cookie->rel = cookie->rels + ent->reloc_index;
        BFD_ASSERT (cookie->rel < cookie->relend