* xcoffread.c (read_xcoff_symtab, case C_FILE): Accept the name
authorJim Kingdon <jkingdon@engr.sgi.com>
Tue, 18 Jan 1994 03:42:30 +0000 (03:42 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Tue, 18 Jan 1994 03:42:30 +0000 (03:42 +0000)
from either the symbol name or the auxent.
* coffread.c, symfile.h (coff_getfilename): Renamed from getfilename,
no longer static.

gdb/ChangeLog
gdb/coffread.c
gdb/xcoffread.c

index 10dfb2e9585f24e776769a6cafc6b0ea76909843..0e2981b57ee3a55780813920daa46f190aef3b9d 100644 (file)
@@ -1,3 +1,10 @@
+Mon Jan 17 22:00:15 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * xcoffread.c (read_xcoff_symtab, case C_FILE): Accept the name
+       from either the symbol name or the auxent.
+       * coffread.c, symfile.h (coff_getfilename): Renamed from getfilename,
+       no longer static.
+
 Mon Jan 17 13:35:01 1994  Fred Fish  (fnf@cygnus.com)
 
        * Makefile.in (ALLPARAM):  Change irix5.h to nm-irix5.h.
index 26d60c135db0d5df2609d61d2c3abe9270aa03b0..f5e92f945a6c27e16d861731c969f2e4ea9cfbf1 100644 (file)
@@ -76,13 +76,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 +221,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 +252,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 +478,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 +606,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 +678,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 +726,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 +739,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 +809,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 +822,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 +851,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 +872,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 +912,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;
                    }
            }
@@ -1214,7 +1204,7 @@ getsymname (symbol_entry)
    is only good for temporary use.  */
 
 static char *
-getfilename (aux_entry)
+coff_getfilename (aux_entry)
     union internal_auxent *aux_entry;
 {
   static char buffer[BUFSIZ];
index 8b70625f9b40db7a12113198e907f9eb59571527..d9a723a492751c7e9b97ffdc33d16abc834a998b 100644 (file)
@@ -1381,15 +1381,23 @@ function_entry_point:
       cur_src_end_addr = file_end_addr;
       end_symtab (file_end_addr, 1, 0, objfile, textsec->target_index);
       end_stabs ();
+
+      /* XCOFF, according to the AIX 3.2 documentation, puts the filename
+        in cs->c_name.  But xlc 1.3.0.2 has decided to do things the
+        standard COFF way and put it in the auxent.  We use the auxent if
+        there is one, otherwise use the name.  Simple enough.  */
+      if (cs->c_naux > 0)
+       filestring = coff_getfilename (&main_aux);
+      else
+       filestring = cs->c_name;
+
       start_stabs ();
-      start_symtab (cs->c_name, (char *)NULL, (CORE_ADDR)0);
+      start_symtab (filestring, (char *)NULL, (CORE_ADDR)0);
       last_csect_name = 0;
 
       /* reset file start and end addresses. A compilation unit with no text
          (only data) should have zero file boundaries. */
       file_start_addr = file_end_addr = 0;
-
-      filestring = cs->c_name;
       break;