PR ld/2267
authorBen Elliston <bje@au.ibm.com>
Thu, 30 Mar 2006 00:22:20 +0000 (00:22 +0000)
committerBen Elliston <bje@au.ibm.com>
Thu, 30 Mar 2006 00:22:20 +0000 (00:22 +0000)
* elflink.c (elf_fixup_link_order): Ensure `elfsec' is not a
special section number that exceeds the number of ELF sections
(eg. SHN_MIPS_SCOMMON).

bfd/ChangeLog
bfd/elflink.c

index 47d19f7..51157c0 100644 (file)
@@ -1,3 +1,10 @@
+2006-03-30  Ben Elliston  <bje@au.ibm.com>
+
+       PR ld/2267
+       * elflink.c (elf_fixup_link_order): Ensure `elfsec' is not a
+       special section number that exceeds the number of ELF sections
+       (eg. SHN_MIPS_SCOMMON).
+
 2006-03-27  Richard Sandiford  <richard@codesourcery.com>
 
        * elfxx-mips.c (mips_got_entry): Add more commentary.
index f0a0e83..88e56da 100644 (file)
@@ -7665,7 +7665,7 @@ elf_fixup_link_order (bfd *abfd, asection *o)
   struct bfd_link_order *p;
   bfd *sub;
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
-  int elfsec;
+  unsigned elfsec;
   struct bfd_link_order **sections;
   asection *s, *other_sec, *linkorder_sec;
   bfd_vma offset;
@@ -7682,7 +7682,8 @@ elf_fixup_link_order (bfd *abfd, asection *o)
          sub = s->owner;
          if (bfd_get_flavour (sub) == bfd_target_elf_flavour
              && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass
-             && (elfsec = _bfd_elf_section_from_bfd_section (sub, s)) != -1
+             && (elfsec = _bfd_elf_section_from_bfd_section (sub, s))
+             && elfsec < elf_numsections (sub)
              && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER)
            {
              seen_linkorder++;