* mips-tdep.c (init_extra_frame_info): Use frame relative stack
[deliverable/binutils-gdb.git] / gdb / coffread.c
index 102d752fcd9e33ea6c6c33e1c8b9bc81123a57a7..74e1ce81e9f75d3c3be29e264cafd92dbfe95124 100644 (file)
@@ -23,13 +23,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "symtab.h"
 #include "gdbtypes.h"
 #include "breakpoint.h"
+
 #include "bfd.h"
-#include "symfile.h"
-#include "objfiles.h"
-#include "buildsym.h"
-#include "gdb-stabs.h"
-#include "stabsread.h"
-#include "complaints.h"
 #include <obstack.h>
 
 #include <string.h>
@@ -40,6 +35,13 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "coff/internal.h"     /* Internal format of COFF symbols in BFD */
 #include "libcoff.h"           /* FIXME secret internal data from BFD */
 
+#include "symfile.h"
+#include "objfiles.h"
+#include "buildsym.h"
+#include "gdb-stabs.h"
+#include "stabsread.h"
+#include "complaints.h"
+
 struct coff_symfile_info {
   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 */
@@ -76,13 +78,10 @@ struct coff_symfile_info {
 static CORE_ADDR cur_src_start_addr;
 static CORE_ADDR cur_src_end_addr;
 
-/* Core address of the end of the first object file.  */
-static CORE_ADDR first_object_file_end;
-
 /* The addresses of the symbol table stream and number of symbols
    of the object file we are reading (as copied into core).  */
 
-static FILE *nlist_stream_global;
+static GDB_FILE *nlist_stream_global;
 static int nlist_nsyms_global;
 
 /* Vector of line number information.  */
@@ -224,9 +223,6 @@ free_linetab PARAMS ((void));
 static int
 init_lineno PARAMS ((int, long, int));
 
-static char *
-getfilename PARAMS ((union internal_auxent *));
-
 static char *
 getsymname PARAMS ((struct internal_syment *));
 
@@ -258,8 +254,8 @@ coff_symfile_read PARAMS ((struct objfile *, struct section_offsets *, int));
 static void
 coff_symfile_finish PARAMS ((struct objfile *));
 
-static void
-record_minimal_symbol PARAMS ((char *, CORE_ADDR, enum minimal_symbol_type));
+static void record_minimal_symbol
+  PARAMS ((char *, CORE_ADDR, enum minimal_symbol_type, struct objfile *));
 
 static void
 coff_end_symtab PARAMS ((struct objfile *));
@@ -484,15 +480,17 @@ coff_end_symtab (objfile)
 }
 \f
 static void
-record_minimal_symbol (name, address, type)
+record_minimal_symbol (name, address, type, objfile)
      char *name;
      CORE_ADDR address;
      enum minimal_symbol_type type;
+     struct objfile *objfile;
 {
   /* We don't want TDESC entry points in the minimal symbol table */
   if (name[0] == '@') return;
 
-  prim_record_minimal_symbol (savestring (name, strlen (name)), address, type);
+  prim_record_minimal_symbol (savestring (name, strlen (name)), address, type,
+                             objfile);
 }
 \f
 /* coff_symfile_init ()
@@ -610,7 +608,7 @@ coff_symfile_read (objfile, section_offsets, mainline)
   symfile_bfd = abfd;                  /* Kludge for swap routines */
 
 /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
-   desc = fileno ((FILE *)(abfd->iostream));   /* File descriptor */
+   desc = fileno ((GDB_FILE *)(abfd->iostream));       /* File descriptor */
    num_symbols = bfd_get_symcount (abfd);      /* How many syms */
    symtab_offset = cdata->sym_filepos;         /* Symbol table file offset */
    stringtab_offset = symtab_offset +          /* String table file offset */
@@ -682,7 +680,7 @@ coff_symfile_read (objfile, section_offsets, mainline)
     {
       /* FIXME: dubious.  Why can't we use something normal like
         bfd_get_section_contents?  */
-      fseek ((FILE *) abfd->iostream, abfd->where, 0);
+      fseek ((GDB_FILE *) abfd->iostream, abfd->where, 0);
 
       stabsize = bfd_section_size (abfd, info->stabsect);
       stabstrsize = bfd_section_size (abfd, info->stabstrsect);
@@ -730,7 +728,7 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
      int nsyms;
      struct objfile *objfile;
 {
-  FILE *stream; 
+  GDB_FILE *stream; 
   register struct context_stack *new;
   struct coff_symbol coff_symbol;
   register struct coff_symbol *cs = &coff_symbol;
@@ -743,7 +741,6 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
   
   /* A .file is open.  */
   int in_source_file = 0;
-  int num_object_files = 0;
   int next_file_symnum = -1;
 
   /* Name of the current file.  */
@@ -814,7 +811,7 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
            coff_end_symtab (objfile);
 
          coff_start_symtab ();
-         complete_symtab ("_globals_", 0, first_object_file_end);
+         complete_symtab ("_globals_", 0, 0);
          /* done with all files, everything from here on out is globals */
        }
 
@@ -827,7 +824,7 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
       if (ISFCN (cs->c_type) && cs->c_sclass != C_TPDEF)
        {
          /* Record all functions -- external and static -- in minsyms. */
-         record_minimal_symbol (cs->c_name, cs->c_value, mst_text);
+         record_minimal_symbol (cs->c_name, cs->c_value, mst_text, objfile);
 
          fcn_line_ptr = main_aux.x_sym.x_fcnary.x_fcn.x_lnnoptr;
          fcn_start_addr = cs->c_value;
@@ -856,7 +853,7 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
             */
            next_file_symnum = cs->c_value;
            if (cs->c_naux > 0)
-             filestring = getfilename (&main_aux);
+             filestring = coff_getfilename (&main_aux);
            else
              filestring = "";
 
@@ -877,11 +874,6 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
                    if (STREQ (cs->c_name, ".text")) {
                            /* FIXME:  don't wire in ".text" as section name
                                       or symbol name! */
-                           if (++num_object_files == 1) {
-                                   /* last address of startup file */
-                                   first_object_file_end = cs->c_value +
-                                           main_aux.x_scn.x_scnlen;
-                           }
                            /* Check for in_source_file deals with case of
                               a file with debugging symbols
                               followed by a later file with no symbols.  */
@@ -922,11 +914,11 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
                But why are absolute syms recorded as functions, anyway?  */
                    if (cs->c_secnum <= text_bfd_scnum+1) {/* text or abs */
                            record_minimal_symbol (cs->c_name, cs->c_value,
-                                                  mst_text);
+                                                  mst_text, objfile);
                            break;
                    } else {
                            record_minimal_symbol (cs->c_name, cs->c_value,
-                                                  mst_data);
+                                                  mst_data, objfile);
                            break;
                    }
            }
@@ -1213,8 +1205,8 @@ getsymname (symbol_entry)
    only the last component of the name.  Result is in static storage and
    is only good for temporary use.  */
 
-static char *
-getfilename (aux_entry)
+char *
+coff_getfilename (aux_entry)
     union internal_auxent *aux_entry;
 {
   static char buffer[BUFSIZ];
@@ -2062,8 +2054,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.026553 seconds and 4 git commands to generate.