Fix dwarf2read.c related crash in which section index was not being
authorKevin Buettner <kevinb@redhat.com>
Mon, 4 Dec 2000 15:55:09 +0000 (15:55 +0000)
committerKevin Buettner <kevinb@redhat.com>
Mon, 4 Dec 2000 15:55:09 +0000 (15:55 +0000)
initialized properly.

gdb/ChangeLog
gdb/elfread.c

index fee3207..17221bb 100644 (file)
@@ -1,3 +1,10 @@
+2000-12-04  Kevin Buettner  <kevinb@redhat.com>
+
+       * elfread.c (record_minimal_symbol_and_info): Don't guess
+       at the section index; instead just always use the bfd index.
+       (elf_symtab_read): Handle weak symbols appearing in data
+       sections.
+
 Mon Dec  4 14:36:39 2000  Andrew Cagney  <cagney@b1.cygnus.com>
 
        * gdbarch.sh (STAB_REG_TO_REGNUM, ECOFF_REG_TO_REGNUM,
index b964552..a7d5009 100644 (file)
@@ -171,32 +171,13 @@ record_minimal_symbol_and_info (char *name, CORE_ADDR address,
                                enum minimal_symbol_type ms_type, char *info,   /* FIXME, is this really char *? */
                                asection *bfd_section, struct objfile *objfile)
 {
-  int section;
-
-  /* Guess the section from the type.  This is likely to be wrong in
-     some cases.  */
-  switch (ms_type)
-    {
-    case mst_text:
-    case mst_file_text:
-      section = bfd_section->index;
 #ifdef SMASH_TEXT_ADDRESS
-      SMASH_TEXT_ADDRESS (address);
+  if (ms_type == mst_text || ms_type == mst_file_text)
+    SMASH_TEXT_ADDRESS (address);
 #endif
-      break;
-    case mst_data:
-    case mst_file_data:
-    case mst_bss:
-    case mst_file_bss:
-      section = bfd_section->index;
-      break;
-    default:
-      section = -1;
-      break;
-    }
 
   return prim_record_minimal_symbol_and_info
-    (name, address, ms_type, info, section, bfd_section, objfile);
+    (name, address, ms_type, info, bfd_section->index, bfd_section, objfile);
 }
 
 /*
@@ -423,7 +404,7 @@ elf_symtab_read (struct objfile *objfile, int dynamic)
                }
              else if (sym->section->flags & SEC_ALLOC)
                {
-                 if (sym->flags & BSF_GLOBAL)
+                 if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
                    {
                      if (sym->section->flags & SEC_LOAD)
                        {