2001-08-20 H.J. Lu <hjl@gnu.org>
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 21 Aug 2001 01:02:41 +0000 (01:02 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 21 Aug 2001 01:02:41 +0000 (01:02 +0000)
* elf-bfd.h (elf_obj_tdata): Add num_section_syms.
(elf_num_section_syms): New for num_section_syms.

* elf.c (elf_map_symbols): Set num_section_syms.
(_bfd_elf_symbol_from_bfd_symbol): Check num_section_syms for
the section symbol index.

bfd/ChangeLog
bfd/elf-bfd.h
bfd/elf.c

index 7f4b827..2902efa 100644 (file)
@@ -1,3 +1,12 @@
+2001-08-20  H.J. Lu  <hjl@gnu.org>
+
+       * elf-bfd.h (elf_obj_tdata): Add num_section_syms.
+       (elf_num_section_syms): New for num_section_syms.
+
+       * elf.c (elf_map_symbols): Set num_section_syms.
+       (_bfd_elf_symbol_from_bfd_symbol): Check num_section_syms for
+       the section symbol index.
+
 2001-08-20  Nick Clifton  <nickc@cambridge.redhat.com>
 
        * elfxx-target.h (bfd_elfNN_bfd_link_hash_table_create): Never
index 1d68432..6609542 100644 (file)
@@ -813,6 +813,7 @@ struct elf_obj_tdata
   struct bfd_strtab_hash *strtab_ptr;
   int num_locals;
   int num_globals;
+  int num_section_syms;
   asymbol **section_syms;              /* STT_SECTION symbols for each section */
   Elf_Internal_Shdr symtab_hdr;
   Elf_Internal_Shdr shstrtab_hdr;
@@ -954,6 +955,7 @@ struct elf_obj_tdata
 #define elf_num_locals(bfd)    (elf_tdata(bfd) -> num_locals)
 #define elf_num_globals(bfd)   (elf_tdata(bfd) -> num_globals)
 #define elf_section_syms(bfd)  (elf_tdata(bfd) -> section_syms)
+#define elf_num_section_syms(bfd) (elf_tdata(bfd) -> num_section_syms)
 #define core_prpsinfo(bfd)     (elf_tdata(bfd) -> prpsinfo)
 #define core_prstatus(bfd)     (elf_tdata(bfd) -> prstatus)
 #define elf_gp(bfd)            (elf_tdata(bfd) -> gp)
index 8ff3ec8..7999803 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -2091,6 +2091,7 @@ elf_map_symbols (abfd)
   if (sect_syms == NULL)
     return false;
   elf_section_syms (abfd) = sect_syms;
+  elf_num_section_syms (abfd) = max_index;
 
   for (idx = 0; idx < symcount; idx++)
     {
@@ -3651,7 +3652,8 @@ _bfd_elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)
        indx = asym_ptr->section->output_section->index;
       else
        indx = asym_ptr->section->index;
-      if (elf_section_syms (abfd)[indx])
+      if (indx < elf_num_section_syms (abfd)
+         && elf_section_syms (abfd)[indx] != NULL)
        asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
     }