PR 437
authorAlan Modra <amodra@gmail.com>
Mon, 11 Oct 2004 01:13:10 +0000 (01:13 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 11 Oct 2004 01:13:10 +0000 (01:13 +0000)
* elflink.c (elf_link_sort_relocs): Don't bomb on unusual sections.
(_bfd_elf_link_omit_section_dynsym): Formatting.

bfd/ChangeLog
bfd/elflink.c

index dcf9aeba6db12183b0417802d19ac5c4f870a282..cc79ca5221e8f070890aa70ce8e4f72a9e2da0a2 100644 (file)
@@ -1,3 +1,9 @@
+2004-10-11  Alan Modra  <amodra@bigpond.net.au>
+
+       PR 437
+       * elflink.c (elf_link_sort_relocs): Don't bomb on unusual sections.
+       (_bfd_elf_link_omit_section_dynsym): Formatting.
+
 2004-10-10  Alan Modra  <amodra@bigpond.net.au>
 
        * libbfd-in.h (BFD_ASSERT, BFD_FAIL): Wrap macro body in do while.
index 69fdcc044bf424ea1d6980728b8cb1249e5285da..08c0aee6f1d880cc6f0823fb865b1b476fe596e3 100644 (file)
@@ -629,8 +629,7 @@ _bfd_elf_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
          bfd *dynobj = elf_hash_table (info)->dynobj;
 
          if (dynobj != NULL
-             && (ip = bfd_get_section_by_name (dynobj, p->name))
-             != NULL
+             && (ip = bfd_get_section_by_name (dynobj, p->name)) != NULL
              && (ip->flags & SEC_LINKER_CREATED)
              && ip->output_section == p)
            return TRUE;
@@ -5712,6 +5711,14 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
        bfd_byte *erel, *erelend;
        asection *o = lo->u.indirect.section;
 
+       if (o->contents == NULL && o->size != 0)
+         {
+           /* This is a reloc section that is being handled as a normal
+              section.  See bfd_section_from_shdr.  We can't combine
+              relocs in this case.  */
+           free (sort);
+           return 0;
+         }
        erel = o->contents;
        erelend = o->contents + o->size;
        p = sort + o->output_offset / ext_size * sort_elt;