2004-01-07 Michael Chastain <mec.gnu@mindspring.com>
[deliverable/binutils-gdb.git] / gdb / elfread.c
index ff766fb7c26da1fa1abffdf1685d398e4cafe389..d3779c07ec3577bafc1cb89574a3dc7fe243c205 100644 (file)
@@ -77,72 +77,43 @@ static void free_elfinfo (void *);
 static void
 elf_locate_sections (bfd *ignore_abfd, asection *sectp, void *eip)
 {
-  register struct elfinfo *ei;
+  struct elfinfo *ei;
 
   ei = (struct elfinfo *) eip;
-  if (STREQ (sectp->name, ".debug"))
+  if (strcmp (sectp->name, ".debug") == 0)
     {
       ei->dboffset = sectp->filepos;
       ei->dbsize = bfd_get_section_size_before_reloc (sectp);
     }
-  else if (STREQ (sectp->name, ".line"))
+  else if (strcmp (sectp->name, ".line") == 0)
     {
       ei->lnoffset = sectp->filepos;
       ei->lnsize = bfd_get_section_size_before_reloc (sectp);
     }
-  else if (STREQ (sectp->name, ".stab"))
+  else if (strcmp (sectp->name, ".stab") == 0)
     {
       ei->stabsect = sectp;
     }
-  else if (STREQ (sectp->name, ".stab.index"))
+  else if (strcmp (sectp->name, ".stab.index") == 0)
     {
       ei->stabindexsect = sectp;
     }
-  else if (STREQ (sectp->name, ".mdebug"))
+  else if (strcmp (sectp->name, ".mdebug") == 0)
     {
       ei->mdebugsect = sectp;
     }
 }
 
-#if 0                          /* Currently unused */
-
-char *
-elf_interpreter (bfd *abfd)
-{
-  sec_ptr interp_sec;
-  unsigned size;
-  char *interp = NULL;
-
-  interp_sec = bfd_get_section_by_name (abfd, ".interp");
-  if (interp_sec)
-    {
-      size = bfd_section_size (abfd, interp_sec);
-      interp = alloca (size);
-      if (bfd_get_section_contents (abfd, interp_sec, interp, (file_ptr) 0,
-                                   size))
-       {
-         interp = savestring (interp, size - 1);
-       }
-      else
-       {
-         interp = NULL;
-       }
-    }
-  return (interp);
-}
-
-#endif
-
 static struct minimal_symbol *
-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)
+record_minimal_symbol (char *name, CORE_ADDR address,
+                      enum minimal_symbol_type ms_type,
+                      asection *bfd_section, struct objfile *objfile)
 {
   if (ms_type == mst_text || ms_type == mst_file_text)
     address = SMASH_TEXT_ADDRESS (address);
 
   return prim_record_minimal_symbol_and_info
-    (name, address, ms_type, info, bfd_section->index, bfd_section, objfile);
+    (name, address, ms_type, NULL, bfd_section->index, bfd_section, objfile);
 }
 
 /*
@@ -192,7 +163,6 @@ elf_symtab_read (struct objfile *objfile, int dynamic)
   char *filesymname = obsavestring ("", 0, &objfile->symbol_obstack);
 #endif
   struct dbx_symfile_info *dbx = objfile->sym_stab_info;
-  unsigned long size;
   int stripped = (bfd_get_symcount (objfile->obfd) == 0);
 
   if (dynamic)
@@ -252,9 +222,9 @@ elf_symtab_read (struct objfile *objfile, int dynamic)
              if (symaddr == 0)
                continue;
              symaddr += offset;
-             msym = record_minimal_symbol_and_info
+             msym = record_minimal_symbol
                ((char *) sym->name, symaddr,
-                mst_solib_trampoline, NULL, sym->section, objfile);
+                mst_solib_trampoline, sym->section, objfile);
 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
              if (msym != NULL)
                msym->filename = filesymname;
@@ -372,10 +342,7 @@ elf_symtab_read (struct objfile *objfile, int dynamic)
                  else if (sym->flags & BSF_LOCAL)
                    {
                      /* Named Local variable in a Data section.
-                        Check its name for stabs-in-elf.  The STREQ
-                        macro checks the first character inline, so
-                        we only actually do a strcmp function call on
-                        names that start with 'B' or 'D'.  */
+                        Check its name for stabs-in-elf.  */
                      int special_local_sect;
                      if (strcmp ("Bbss.bss", sym->name) == 0)
                        special_local_sect = SECT_OFF_BSS (objfile);
@@ -398,9 +365,17 @@ elf_symtab_read (struct objfile *objfile, int dynamic)
                                = max (SECT_OFF_BSS (objfile),
                                       max (SECT_OFF_DATA (objfile),
                                            SECT_OFF_RODATA (objfile)));
+
+                              /* max_index is the largest index we'll
+                                 use into this array, so we must
+                                 allocate max_index+1 elements for it.
+                                 However, 'struct stab_section_info'
+                                 already includes one element, so we
+                                 need to allocate max_index aadditional
+                                 elements.  */
                              size = (sizeof (struct stab_section_info) 
                                      + (sizeof (CORE_ADDR)
-                                        * (max_index - 1)));
+                                        * max_index));
                              sectinfo = (struct stab_section_info *)
                                xmmalloc (objfile->md, size);
                              memset (sectinfo, 0, size);
@@ -457,11 +432,15 @@ elf_symtab_read (struct objfile *objfile, int dynamic)
                  /* ms_type = mst_unknown; */
                  continue;     /* Skip this symbol. */
                }
-             /* Pass symbol size field in via BFD.  FIXME!!!  */
-             size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
-             msym = record_minimal_symbol_and_info
+             msym = record_minimal_symbol
                ((char *) sym->name, symaddr,
-                ms_type, (void *) size, sym->section, objfile);
+                ms_type, sym->section, objfile);
+             if (msym)
+             {
+               /* Pass symbol size field in via BFD.  FIXME!!!  */
+               unsigned long size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
+               MSYMBOL_SIZE(msym) = size;
+             }
 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
              if (msym != NULL)
                msym->filename = filesymname;
@@ -610,8 +589,9 @@ elf_symfile_read (struct objfile *objfile, int mainline)
                            ei.lnoffset, ei.lnsize);
     }
 
-  if (DWARF2_BUILD_FRAME_INFO_P ())
-    DWARF2_BUILD_FRAME_INFO(objfile);
+  /* FIXME: kettenis/20030504: This still needs to be integrated with
+     dwarf2read.c in a better way.  */
+  dwarf2_build_frame_info (objfile);
 }
 
 /* This cleans up the objfile's sym_stab_info pointer, and the chain of
@@ -710,7 +690,7 @@ elfstab_offset_sections (struct objfile *objfile, struct partial_symtab *pst)
   for (; maybe; maybe = maybe->next)
     {
       if (filename[0] == maybe->filename[0]
-         && STREQ (filename, maybe->filename))
+         && strcmp (filename, maybe->filename) == 0)
        {
          /* We found a match.  But there might be several source files
             (from different directories) with the same name.  */
This page took 0.026868 seconds and 4 git commands to generate.