* elfcode.h (elf_slurp_reloc_table_from_section): Check
authorDaniel Jacobowitz <drow@false.org>
Wed, 18 Sep 2002 13:25:35 +0000 (13:25 +0000)
committerDaniel Jacobowitz <drow@false.org>
Wed, 18 Sep 2002 13:25:35 +0000 (13:25 +0000)
        correct relocation count.

bfd/ChangeLog
bfd/elfcode.h

index f0c5ef56b83225a2bb06d37b3b2a91e14cd0b678..9a0f1eb00a2348aaee5851455fb1f9838a0241f4 100644 (file)
@@ -1,3 +1,8 @@
+2002-09-18  Daniel Jacobowitz  <drow@mvista.com>
+
+       * elfcode.h (elf_slurp_reloc_table_from_section): Check
+       correct relocation count.
+
 2002-09-17  Daniel Jacobowitz  <drow@mvista.com>
 
        * bfd-in.h (bfd_get_dynamic_symcount): Define.
index 7f9ed5fe3afdc943b889bd114aaffbc295d78d34..ca72307710a9a124812ecbf6d013c4fbcbf05e51 100644 (file)
@@ -1377,6 +1377,7 @@ elf_slurp_reloc_table_from_section (abfd, asect, rel_hdr, reloc_count,
   arelent *relent;
   unsigned int i;
   int entsize;
+  long symcount;
 
   allocated = (PTR) bfd_malloc (rel_hdr->sh_size);
   if (allocated == NULL)
@@ -1419,9 +1420,14 @@ elf_slurp_reloc_table_from_section (abfd, asect, rel_hdr, reloc_count,
       else
        relent->address = rela.r_offset - asect->vma;
 
+      if (dynamic)
+       symcount = bfd_get_dynamic_symcount (abfd);
+      else
+       symcount = bfd_get_symcount (abfd);
+
       if (ELF_R_SYM (rela.r_info) == 0)
        relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
-      else if (ELF_R_SYM (rela.r_info) > bfd_get_dynamic_symcount (abfd))
+      else if (ELF_R_SYM (rela.r_info) > symcount)
        {
          (*_bfd_error_handler)
            (_("%s(%s): relocation %d has invalid symbol index %ld"),