]> Git Repo - binutils.git/blobdiff - gdb/coffread.c
Initial revision
[binutils.git] / gdb / coffread.c
index 8b3530dd33656eff2fe722afdfe5e6f064d71b2c..26d60c135db0d5df2609d61d2c3abe9270aa03b0 100644 (file)
@@ -28,6 +28,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "objfiles.h"
 #include "buildsym.h"
 #include "gdb-stabs.h"
+#include "stabsread.h"
 #include "complaints.h"
 #include <obstack.h>
 
@@ -40,22 +41,13 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "libcoff.h"           /* FIXME secret internal data from BFD */
 
 struct coff_symfile_info {
-  asection *text_sect;         /* Text section accessor */
-  int symcount;                        /* How many symbols are there in the file */
-  char *stringtab;             /* The actual string table */
-  int stringtab_size;          /* Its size */
-  file_ptr symtab_offset;      /* Offset in file to symbol table */
-  int symbol_size;             /* Bytes in a single symbol */
-  struct stab_section_info *stab_section_info;         /* section starting points
-                                  of the original .o files before linking. */
+  file_ptr min_lineno_offset;          /* Where in file lowest line#s are */
+  file_ptr max_lineno_offset;          /* 1+last byte of line#s in file */
 
   asection *stabsect;          /* Section pointer for .stab section */
   asection *stabstrsect;               /* Section pointer for .stab section */
   asection *stabindexsect;     /* Section pointer for .stab.index section */
   char *stabstrdata;
-
-  file_ptr min_lineno_offset;          /* Where in file lowest line#s are */
-  file_ptr max_lineno_offset;          /* 1+last byte of line#s in file */
 };
 
 /* Translate an external name string into a user-visible name.  */
@@ -296,7 +288,10 @@ coff_locate_sections PARAMS ((bfd *, asection *, PTR));
    if it is something we are interested in processing, and
    if so, stash away some access information for the section.
 
-   FIXME:  The section names should not be hardwired strings. */
+   FIXME: The section names should not be hardwired strings (what
+   should they be?  I don't think most object file formats have enough
+   section flags to specify what kind of debug section it is
+   -kingdon).  */
 
 static void
 coff_locate_sections (ignore_abfd, sectp, csip)
@@ -371,6 +366,9 @@ coff_alloc_type (index)
   return type;
 }
 \f
+/* Record a line number entry for line LINE at address PC.
+   FIXME:  Use record_line instead.  */
+
 static void
 coff_record_line (line, pc)
      int line;
@@ -516,9 +514,15 @@ static void
 coff_symfile_init (objfile)
      struct objfile *objfile;
 {
-  asection     *section, *strsection;
+  asection     *section;
   bfd *abfd = objfile->obfd;
 
+  /* Allocate struct to keep track of stab reading. */
+  objfile->sym_stab_info = (PTR)
+    xmmalloc (objfile -> md, sizeof (struct dbx_symfile_info));
+
+  memset ((PTR) objfile->sym_stab_info, 0, sizeof (struct dbx_symfile_info));
+
   /* Allocate struct to keep track of the symfile */
   objfile -> sym_private = xmmalloc (objfile -> md,
                                     sizeof (struct coff_symfile_info));
@@ -589,6 +593,7 @@ coff_symfile_read (objfile, section_offsets, mainline)
      int mainline;
 {
   struct coff_symfile_info *info;
+  struct dbx_symfile_info *dbxinfo;
   bfd *abfd = objfile->obfd;
   coff_data_type *cdata = coff_data (abfd);
   char *name = bfd_get_filename (abfd);
@@ -601,6 +606,7 @@ coff_symfile_read (objfile, section_offsets, mainline)
   int stabsize, stabstrsize;
 
   info = (struct coff_symfile_info *) objfile -> sym_private;
+  dbxinfo = (struct dbx_symfile_info *) objfile->sym_stab_info;
   symfile_bfd = abfd;                  /* Kludge for swap routines */
 
 /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
@@ -657,7 +663,13 @@ coff_symfile_read (objfile, section_offsets, mainline)
 
   /* Sort symbols alphabetically within each block.  */
 
-  sort_all_symtab_syms ();
+  {
+    struct symtab *s;
+    for (s = objfile -> symtabs; s != NULL; s = s -> next)
+      {
+       sort_symtab_syms (s);
+      }
+  }
 
   /* Install any minimal symbols that have been collected as the current
      minimal symbols for this objfile. */
@@ -668,7 +680,8 @@ coff_symfile_read (objfile, section_offsets, mainline)
 
   if (info->stabsect)
     {
-      /* dubious */
+      /* FIXME: dubious.  Why can't we use something normal like
+        bfd_get_section_contents?  */
       fseek ((FILE *) abfd->iostream, abfd->where, 0);
 
       stabsize = bfd_section_size (abfd, info->stabsect);
@@ -2032,11 +2045,12 @@ coff_symfile_offsets (objfile, addr)
 {
   struct section_offsets *section_offsets;
   int i;
+
+  objfile->num_sections = SECT_OFF_MAX;
   section_offsets = (struct section_offsets *)
     obstack_alloc (&objfile -> psymbol_obstack,
-                  sizeof (struct section_offsets) +
-                         sizeof (section_offsets->offsets) * (SECT_OFF_MAX-1));
+                  sizeof (struct section_offsets)
+                  + sizeof (section_offsets->offsets) * (SECT_OFF_MAX-1));
 
   for (i = 0; i < SECT_OFF_MAX; i++)
     ANOFFSET (section_offsets, i) = addr;
@@ -2048,8 +2062,7 @@ coff_symfile_offsets (objfile, addr)
 
 static struct sym_fns coff_sym_fns =
 {
-  "coff",              /* sym_name: name or name prefix of BFD target type */
-  4,                   /* sym_namelen: number of significant sym_name chars */
+  bfd_target_coff_flavour,
   coff_new_init,       /* sym_new_init: init anything gbl to entire symtab */
   coff_symfile_init,   /* sym_init: read initial info, setup for sym_read() */
   coff_symfile_read,   /* sym_read: read a symbol file into symtab */
This page took 0.028057 seconds and 4 git commands to generate.