Home | History | Annotate | Line # | Download | only in gdb
coffread.c revision 1.3
      1 /* Read coff symbol tables and convert to internal format, for GDB.
      2    Copyright (C) 1987-2015 Free Software Foundation, Inc.
      3    Contributed by David D. Johnson, Brown University (ddj (at) cs.brown.edu).
      4 
      5    This file is part of GDB.
      6 
      7    This program is free software; you can redistribute it and/or modify
      8    it under the terms of the GNU General Public License as published by
      9    the Free Software Foundation; either version 3 of the License, or
     10    (at your option) any later version.
     11 
     12    This program is distributed in the hope that it will be useful,
     13    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15    GNU General Public License for more details.
     16 
     17    You should have received a copy of the GNU General Public License
     18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19 
     20 #include "defs.h"
     21 #include "symtab.h"
     22 #include "gdbtypes.h"
     23 #include "demangle.h"
     24 #include "breakpoint.h"
     25 
     26 #include "bfd.h"
     27 #include "gdb_obstack.h"
     28 #include <ctype.h>
     29 
     30 #include "coff/internal.h"	/* Internal format of COFF symbols in BFD */
     31 #include "libcoff.h"		/* FIXME secret internal data from BFD */
     32 #include "objfiles.h"
     33 #include "buildsym.h"
     34 #include "gdb-stabs.h"
     35 #include "stabsread.h"
     36 #include "complaints.h"
     37 #include "target.h"
     38 #include "block.h"
     39 #include "dictionary.h"
     40 
     41 #include "coff-pe-read.h"
     42 
     43 #include "psymtab.h"
     44 
     45 extern void _initialize_coffread (void);
     46 
     47 /* Key for COFF-associated data.  */
     48 
     49 static const struct objfile_data *coff_objfile_data_key;
     50 
     51 /* The objfile we are currently reading.  */
     52 
     53 static struct objfile *coffread_objfile;
     54 
     55 struct coff_symfile_info
     56   {
     57     file_ptr min_lineno_offset;	/* Where in file lowest line#s are.  */
     58     file_ptr max_lineno_offset;	/* 1+last byte of line#s in file.  */
     59 
     60     CORE_ADDR textaddr;		/* Addr of .text section.  */
     61     unsigned int textsize;	/* Size of .text section.  */
     62     struct stab_section_list *stabsects;	/* .stab sections.  */
     63     asection *stabstrsect;	/* Section pointer for .stab section.  */
     64     char *stabstrdata;
     65   };
     66 
     67 /* Translate an external name string into a user-visible name.  */
     68 #define	EXTERNAL_NAME(string, abfd) \
     69 	(string[0] == bfd_get_symbol_leading_char (abfd) \
     70 	? string + 1 : string)
     71 
     72 /* To be an sdb debug type, type must have at least a basic or primary
     73    derived type.  Using this rather than checking against T_NULL is
     74    said to prevent core dumps if we try to operate on Michael Bloom
     75    dbx-in-coff file.  */
     76 
     77 #define SDB_TYPE(type) (BTYPE(type) | (type & N_TMASK))
     78 
     79 /* Core address of start and end of text of current source file.
     80    This comes from a ".text" symbol where x_nlinno > 0.  */
     81 
     82 static CORE_ADDR current_source_start_addr;
     83 static CORE_ADDR current_source_end_addr;
     84 
     85 /* The addresses of the symbol table stream and number of symbols
     86    of the object file we are reading (as copied into core).  */
     87 
     88 static bfd *nlist_bfd_global;
     89 static int nlist_nsyms_global;
     90 
     91 
     92 /* Pointers to scratch storage, used for reading raw symbols and
     93    auxents.  */
     94 
     95 static char *temp_sym;
     96 static char *temp_aux;
     97 
     98 /* Local variables that hold the shift and mask values for the
     99    COFF file that we are currently reading.  These come back to us
    100    from BFD, and are referenced by their macro names, as well as
    101    internally to the BTYPE, ISPTR, ISFCN, ISARY, ISTAG, and DECREF
    102    macros from include/coff/internal.h .  */
    103 
    104 static unsigned local_n_btmask;
    105 static unsigned local_n_btshft;
    106 static unsigned local_n_tmask;
    107 static unsigned local_n_tshift;
    108 
    109 #define	N_BTMASK	local_n_btmask
    110 #define	N_BTSHFT	local_n_btshft
    111 #define	N_TMASK		local_n_tmask
    112 #define	N_TSHIFT	local_n_tshift
    113 
    114 /* Local variables that hold the sizes in the file of various COFF
    115    structures.  (We only need to know this to read them from the file
    116    -- BFD will then translate the data in them, into `internal_xxx'
    117    structs in the right byte order, alignment, etc.)  */
    118 
    119 static unsigned local_linesz;
    120 static unsigned local_symesz;
    121 static unsigned local_auxesz;
    122 
    123 /* This is set if this is a PE format file.  */
    124 
    125 static int pe_file;
    126 
    127 /* Chain of typedefs of pointers to empty struct/union types.
    128    They are chained thru the SYMBOL_VALUE_CHAIN.  */
    129 
    130 static struct symbol *opaque_type_chain[HASHSIZE];
    131 
    132 /* Simplified internal version of coff symbol table information.  */
    133 
    134 struct coff_symbol
    135   {
    136     char *c_name;
    137     int c_symnum;		/* Symbol number of this entry.  */
    138     int c_naux;			/* 0 if syment only, 1 if syment +
    139 				   auxent, etc.  */
    140     CORE_ADDR c_value;
    141     int c_sclass;
    142     int c_secnum;
    143     unsigned int c_type;
    144   };
    145 
    146 /* Vector of types defined so far, indexed by their type numbers.  */
    147 
    148 static struct type **type_vector;
    149 
    150 /* Number of elements allocated for type_vector currently.  */
    151 
    152 static int type_vector_length;
    153 
    154 /* Initial size of type vector.  Is realloc'd larger if needed, and
    155    realloc'd down to the size actually used, when completed.  */
    156 
    157 #define INITIAL_TYPE_VECTOR_LENGTH 160
    158 
    159 extern void stabsread_clear_cache (void);
    160 
    161 static struct type *coff_read_struct_type (int, int, int,
    162 					   struct objfile *);
    163 
    164 static struct type *decode_base_type (struct coff_symbol *,
    165 				      unsigned int,
    166 				      union internal_auxent *,
    167 				      struct objfile *);
    168 
    169 static struct type *decode_type (struct coff_symbol *, unsigned int,
    170 				 union internal_auxent *,
    171 				 struct objfile *);
    172 
    173 static struct type *decode_function_type (struct coff_symbol *,
    174 					  unsigned int,
    175 					  union internal_auxent *,
    176 					  struct objfile *);
    177 
    178 static struct type *coff_read_enum_type (int, int, int,
    179 					 struct objfile *);
    180 
    181 static struct symbol *process_coff_symbol (struct coff_symbol *,
    182 					   union internal_auxent *,
    183 					   struct objfile *);
    184 
    185 static void patch_opaque_types (struct symtab *);
    186 
    187 static void enter_linenos (long, int, int, struct objfile *);
    188 
    189 static void free_linetab (void);
    190 
    191 static void free_linetab_cleanup (void *ignore);
    192 
    193 static int init_lineno (bfd *, long, int);
    194 
    195 static char *getsymname (struct internal_syment *);
    196 
    197 static const char *coff_getfilename (union internal_auxent *);
    198 
    199 static void free_stringtab (void);
    200 
    201 static void free_stringtab_cleanup (void *ignore);
    202 
    203 static int init_stringtab (bfd *, long);
    204 
    205 static void read_one_sym (struct coff_symbol *,
    206 			  struct internal_syment *,
    207 			  union internal_auxent *);
    208 
    209 static void coff_symtab_read (long, unsigned int, struct objfile *);
    210 
    211 /* We are called once per section from coff_symfile_read.  We
    213    need to examine each section we are passed, check to see
    214    if it is something we are interested in processing, and
    215    if so, stash away some access information for the section.
    216 
    217    FIXME: The section names should not be hardwired strings (what
    218    should they be?  I don't think most object file formats have enough
    219    section flags to specify what kind of debug section it is
    220    -kingdon).  */
    221 
    222 static void
    223 coff_locate_sections (bfd *abfd, asection *sectp, void *csip)
    224 {
    225   struct coff_symfile_info *csi;
    226   const char *name;
    227 
    228   csi = (struct coff_symfile_info *) csip;
    229   name = bfd_get_section_name (abfd, sectp);
    230   if (strcmp (name, ".text") == 0)
    231     {
    232       csi->textaddr = bfd_section_vma (abfd, sectp);
    233       csi->textsize += bfd_section_size (abfd, sectp);
    234     }
    235   else if (strncmp (name, ".text", sizeof ".text" - 1) == 0)
    236     {
    237       csi->textsize += bfd_section_size (abfd, sectp);
    238     }
    239   else if (strcmp (name, ".stabstr") == 0)
    240     {
    241       csi->stabstrsect = sectp;
    242     }
    243   else if (strncmp (name, ".stab", sizeof ".stab" - 1) == 0)
    244     {
    245       const char *s;
    246 
    247       /* We can have multiple .stab sections if linked with
    248          --split-by-reloc.  */
    249       for (s = name + sizeof ".stab" - 1; *s != '\0'; s++)
    250 	if (!isdigit (*s))
    251 	  break;
    252       if (*s == '\0')
    253 	{
    254 	  struct stab_section_list *n, **pn;
    255 
    256 	  n = ((struct stab_section_list *)
    257 	       xmalloc (sizeof (struct stab_section_list)));
    258 	  n->section = sectp;
    259 	  n->next = NULL;
    260 	  for (pn = &csi->stabsects; *pn != NULL; pn = &(*pn)->next)
    261 	    ;
    262 	  *pn = n;
    263 
    264 	  /* This will be run after coffstab_build_psymtabs is called
    265 	     in coff_symfile_read, at which point we no longer need
    266 	     the information.  */
    267 	  make_cleanup (xfree, n);
    268 	}
    269     }
    270 }
    271 
    272 /* Return the section_offsets* that CS points to.  */
    273 static int cs_to_section (struct coff_symbol *, struct objfile *);
    274 
    275 struct find_targ_sec_arg
    276   {
    277     int targ_index;
    278     asection **resultp;
    279   };
    280 
    281 static void
    282 find_targ_sec (bfd *abfd, asection *sect, void *obj)
    283 {
    284   struct find_targ_sec_arg *args = (struct find_targ_sec_arg *) obj;
    285 
    286   if (sect->target_index == args->targ_index)
    287     *args->resultp = sect;
    288 }
    289 
    290 /* Return the bfd_section that CS points to.  */
    291 static struct bfd_section*
    292 cs_to_bfd_section (struct coff_symbol *cs, struct objfile *objfile)
    293 {
    294   asection *sect = NULL;
    295   struct find_targ_sec_arg args;
    296 
    297   args.targ_index = cs->c_secnum;
    298   args.resultp = &sect;
    299   bfd_map_over_sections (objfile->obfd, find_targ_sec, &args);
    300   return sect;
    301 }
    302 
    303 /* Return the section number (SECT_OFF_*) that CS points to.  */
    304 static int
    305 cs_to_section (struct coff_symbol *cs, struct objfile *objfile)
    306 {
    307   asection *sect = cs_to_bfd_section (cs, objfile);
    308 
    309   if (sect == NULL)
    310     return SECT_OFF_TEXT (objfile);
    311   return gdb_bfd_section_index (objfile->obfd, sect);
    312 }
    313 
    314 /* Return the address of the section of a COFF symbol.  */
    315 
    316 static CORE_ADDR cs_section_address (struct coff_symbol *, bfd *);
    317 
    318 static CORE_ADDR
    319 cs_section_address (struct coff_symbol *cs, bfd *abfd)
    320 {
    321   asection *sect = NULL;
    322   struct find_targ_sec_arg args;
    323   CORE_ADDR addr = 0;
    324 
    325   args.targ_index = cs->c_secnum;
    326   args.resultp = &sect;
    327   bfd_map_over_sections (abfd, find_targ_sec, &args);
    328   if (sect != NULL)
    329     addr = bfd_get_section_vma (abfd, sect);
    330   return addr;
    331 }
    332 
    333 /* Look up a coff type-number index.  Return the address of the slot
    334    where the type for that index is stored.
    335    The type-number is in INDEX.
    336 
    337    This can be used for finding the type associated with that index
    338    or for associating a new type with the index.  */
    339 
    340 static struct type **
    341 coff_lookup_type (int index)
    342 {
    343   if (index >= type_vector_length)
    344     {
    345       int old_vector_length = type_vector_length;
    346 
    347       type_vector_length *= 2;
    348       if (index /* is still */  >= type_vector_length)
    349 	type_vector_length = index * 2;
    350 
    351       type_vector = (struct type **)
    352 	xrealloc ((char *) type_vector,
    353 		  type_vector_length * sizeof (struct type *));
    354       memset (&type_vector[old_vector_length], 0,
    355 	 (type_vector_length - old_vector_length) * sizeof (struct type *));
    356     }
    357   return &type_vector[index];
    358 }
    359 
    360 /* Make sure there is a type allocated for type number index
    361    and return the type object.
    362    This can create an empty (zeroed) type object.  */
    363 
    364 static struct type *
    365 coff_alloc_type (int index)
    366 {
    367   struct type **type_addr = coff_lookup_type (index);
    368   struct type *type = *type_addr;
    369 
    370   /* If we are referring to a type not known at all yet,
    371      allocate an empty type for it.
    372      We will fill it in later if we find out how.  */
    373   if (type == NULL)
    374     {
    375       type = alloc_type (coffread_objfile);
    376       *type_addr = type;
    377     }
    378   return type;
    379 }
    380 
    381 /* Start a new symtab for a new source file.
    383    This is called when a COFF ".file" symbol is seen;
    384    it indicates the start of data for one original source file.  */
    385 
    386 static void
    387 coff_start_symtab (struct objfile *objfile, const char *name)
    388 {
    389   start_symtab (objfile,
    390   /* We fill in the filename later.  start_symtab puts this pointer
    391      into last_source_file and we put it in subfiles->name, which
    392      end_symtab frees; that's why it must be malloc'd.  */
    393 		 xstrdup (name),
    394   /* We never know the directory name for COFF.  */
    395 		 NULL,
    396   /* The start address is irrelevant, since we set
    397      last_source_start_addr in coff_end_symtab.  */
    398 		 0);
    399   record_debugformat ("COFF");
    400 }
    401 
    402 /* Save the vital information from when starting to read a file,
    403    for use when closing off the current file.
    404    NAME is the file name the symbols came from, START_ADDR is the
    405    first text address for the file, and SIZE is the number of bytes of
    406    text.  */
    407 
    408 static void
    409 complete_symtab (const char *name, CORE_ADDR start_addr, unsigned int size)
    410 {
    411   set_last_source_file (name);
    412   current_source_start_addr = start_addr;
    413   current_source_end_addr = start_addr + size;
    414 }
    415 
    416 /* Finish the symbol definitions for one main source file, close off
    417    all the lexical contexts for that file (creating struct block's for
    418    them), then make the struct symtab for that file and put it in the
    419    list of all such.  */
    420 
    421 static void
    422 coff_end_symtab (struct objfile *objfile)
    423 {
    424   last_source_start_addr = current_source_start_addr;
    425 
    426   end_symtab (current_source_end_addr, SECT_OFF_TEXT (objfile));
    427 
    428   /* Reinitialize for beginning of new file.  */
    429   set_last_source_file (NULL);
    430 }
    431 
    432 /* The linker sometimes generates some non-function symbols inside
    434    functions referencing variables imported from another DLL.
    435    Return nonzero if the given symbol corresponds to one of them.  */
    436 
    437 static int
    438 is_import_fixup_symbol (struct coff_symbol *cs,
    439 			enum minimal_symbol_type type)
    440 {
    441   /* The following is a bit of a heuristic using the characterictics
    442      of these fixup symbols, but should work well in practice...  */
    443   int i;
    444 
    445   /* Must be a non-static text symbol.  */
    446   if (type != mst_text)
    447     return 0;
    448 
    449   /* Must be a non-function symbol.  */
    450   if (ISFCN (cs->c_type))
    451     return 0;
    452 
    453   /* The name must start with "__fu<digits>__".  */
    454   if (strncmp (cs->c_name, "__fu", 4) != 0)
    455     return 0;
    456   if (! isdigit (cs->c_name[4]))
    457     return 0;
    458   for (i = 5; cs->c_name[i] != '\0' && isdigit (cs->c_name[i]); i++)
    459     /* Nothing, just incrementing index past all digits.  */;
    460   if (cs->c_name[i] != '_' || cs->c_name[i + 1] != '_')
    461     return 0;
    462 
    463   return 1;
    464 }
    465 
    466 static struct minimal_symbol *
    467 record_minimal_symbol (struct coff_symbol *cs, CORE_ADDR address,
    468 		       enum minimal_symbol_type type, int section,
    469 		       struct objfile *objfile)
    470 {
    471   /* We don't want TDESC entry points in the minimal symbol table.  */
    472   if (cs->c_name[0] == '@')
    473     return NULL;
    474 
    475   if (is_import_fixup_symbol (cs, type))
    476     {
    477       /* Because the value of these symbols is within a function code
    478 	 range, these symbols interfere with the symbol-from-address
    479 	 reverse lookup; this manifests itselfs in backtraces, or any
    480 	 other commands that prints symbolic addresses.  Just pretend
    481 	 these symbols do not exist.  */
    482       return NULL;
    483     }
    484 
    485   return prim_record_minimal_symbol_and_info (cs->c_name, address,
    486 					      type, section, objfile);
    487 }
    488 
    489 /* coff_symfile_init ()
    491    is the coff-specific initialization routine for reading symbols.
    492    It is passed a struct objfile which contains, among other things,
    493    the BFD for the file whose symbols are being read, and a slot for
    494    a pointer to "private data" which we fill with cookies and other
    495    treats for coff_symfile_read ().
    496 
    497    We will only be called if this is a COFF or COFF-like file.  BFD
    498    handles figuring out the format of the file, and code in symtab.c
    499    uses BFD's determination to vector to us.
    500 
    501    The ultimate result is a new symtab (or, FIXME, eventually a
    502    psymtab).  */
    503 
    504 static void
    505 coff_symfile_init (struct objfile *objfile)
    506 {
    507   struct dbx_symfile_info *dbx;
    508   struct coff_symfile_info *coff;
    509 
    510   /* Allocate struct to keep track of stab reading.  */
    511   dbx = XCNEW (struct dbx_symfile_info);
    512   set_objfile_data (objfile, dbx_objfile_data_key, dbx);
    513 
    514   /* Allocate struct to keep track of the symfile.  */
    515   coff = XCNEW (struct coff_symfile_info);
    516   set_objfile_data (objfile, coff_objfile_data_key, coff);
    517 
    518   /* COFF objects may be reordered, so set OBJF_REORDERED.  If we
    519      find this causes a significant slowdown in gdb then we could
    520      set it in the debug symbol readers only when necessary.  */
    521   objfile->flags |= OBJF_REORDERED;
    522 }
    523 
    524 /* This function is called for every section; it finds the outer
    525    limits of the line table (minimum and maximum file offset) so that
    526    the mainline code can read the whole thing for efficiency.  */
    527 
    528 static void
    529 find_linenos (bfd *abfd, struct bfd_section *asect, void *vpinfo)
    530 {
    531   struct coff_symfile_info *info;
    532   int size, count;
    533   file_ptr offset, maxoff;
    534 
    535   /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
    536   count = asect->lineno_count;
    537   /* End of warning.  */
    538 
    539   if (count == 0)
    540     return;
    541   size = count * local_linesz;
    542 
    543   info = (struct coff_symfile_info *) vpinfo;
    544   /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
    545   offset = asect->line_filepos;
    546   /* End of warning.  */
    547 
    548   if (offset < info->min_lineno_offset || info->min_lineno_offset == 0)
    549     info->min_lineno_offset = offset;
    550 
    551   maxoff = offset + size;
    552   if (maxoff > info->max_lineno_offset)
    553     info->max_lineno_offset = maxoff;
    554 }
    555 
    556 
    557 /* The BFD for this file -- only good while we're actively reading
    558    symbols into a psymtab or a symtab.  */
    559 
    560 static bfd *symfile_bfd;
    561 
    562 /* Read a symbol file, after initialization by coff_symfile_init.  */
    563 
    564 static void
    565 coff_symfile_read (struct objfile *objfile, int symfile_flags)
    566 {
    567   struct coff_symfile_info *info;
    568   struct dbx_symfile_info *dbxinfo;
    569   bfd *abfd = objfile->obfd;
    570   coff_data_type *cdata = coff_data (abfd);
    571   char *name = bfd_get_filename (abfd);
    572   int val;
    573   unsigned int num_symbols;
    574   int symtab_offset;
    575   int stringtab_offset;
    576   struct cleanup *back_to, *cleanup_minimal_symbols;
    577   int stabstrsize;
    578 
    579   info = objfile_data (objfile, coff_objfile_data_key);
    580   dbxinfo = DBX_SYMFILE_INFO (objfile);
    581   symfile_bfd = abfd;		/* Kludge for swap routines.  */
    582 
    583 /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
    584   num_symbols = bfd_get_symcount (abfd);	/* How many syms */
    585   symtab_offset = cdata->sym_filepos;	/* Symbol table file offset */
    586   stringtab_offset = symtab_offset +	/* String table file offset */
    587     num_symbols * cdata->local_symesz;
    588 
    589   /* Set a few file-statics that give us specific information about
    590      the particular COFF file format we're reading.  */
    591   local_n_btmask = cdata->local_n_btmask;
    592   local_n_btshft = cdata->local_n_btshft;
    593   local_n_tmask = cdata->local_n_tmask;
    594   local_n_tshift = cdata->local_n_tshift;
    595   local_linesz = cdata->local_linesz;
    596   local_symesz = cdata->local_symesz;
    597   local_auxesz = cdata->local_auxesz;
    598 
    599   /* Allocate space for raw symbol and aux entries, based on their
    600      space requirements as reported by BFD.  */
    601   temp_sym = (char *) xmalloc
    602     (cdata->local_symesz + cdata->local_auxesz);
    603   temp_aux = temp_sym + cdata->local_symesz;
    604   back_to = make_cleanup (free_current_contents, &temp_sym);
    605 
    606   /* We need to know whether this is a PE file, because in PE files,
    607      unlike standard COFF files, symbol values are stored as offsets
    608      from the section address, rather than as absolute addresses.
    609      FIXME: We should use BFD to read the symbol table, and thus avoid
    610      this problem.  */
    611   pe_file =
    612     strncmp (bfd_get_target (objfile->obfd), "pe", 2) == 0
    613     || strncmp (bfd_get_target (objfile->obfd), "epoc-pe", 7) == 0;
    614 
    615   /* End of warning.  */
    616 
    617   info->min_lineno_offset = 0;
    618   info->max_lineno_offset = 0;
    619 
    620   /* Only read line number information if we have symbols.
    621 
    622      On Windows NT, some of the system's DLL's have sections with
    623      PointerToLinenumbers fields that are non-zero, but point at
    624      random places within the image file.  (In the case I found,
    625      KERNEL32.DLL's .text section has a line number info pointer that
    626      points into the middle of the string `lib\\i386\kernel32.dll'.)
    627 
    628      However, these DLL's also have no symbols.  The line number
    629      tables are meaningless without symbols.  And in fact, GDB never
    630      uses the line number information unless there are symbols.  So we
    631      can avoid spurious error messages (and maybe run a little
    632      faster!) by not even reading the line number table unless we have
    633      symbols.  */
    634   if (num_symbols > 0)
    635     {
    636       /* Read the line number table, all at once.  */
    637       bfd_map_over_sections (abfd, find_linenos, (void *) info);
    638 
    639       make_cleanup (free_linetab_cleanup, 0 /*ignore*/);
    640       val = init_lineno (abfd, info->min_lineno_offset,
    641                          info->max_lineno_offset - info->min_lineno_offset);
    642       if (val < 0)
    643         error (_("\"%s\": error reading line numbers."), name);
    644     }
    645 
    646   /* Now read the string table, all at once.  */
    647 
    648   make_cleanup (free_stringtab_cleanup, 0 /*ignore*/);
    649   val = init_stringtab (abfd, stringtab_offset);
    650   if (val < 0)
    651     error (_("\"%s\": can't get string table"), name);
    652 
    653   init_minimal_symbol_collection ();
    654   cleanup_minimal_symbols = make_cleanup_discard_minimal_symbols ();
    655 
    656   /* Now that the executable file is positioned at symbol table,
    657      process it and define symbols accordingly.  */
    658 
    659   coff_symtab_read ((long) symtab_offset, num_symbols, objfile);
    660 
    661   /* Install any minimal symbols that have been collected as the
    662      current minimal symbols for this objfile.  */
    663 
    664   install_minimal_symbols (objfile);
    665 
    666   if (pe_file)
    667     {
    668       struct minimal_symbol *msym;
    669 
    670       ALL_OBJFILE_MSYMBOLS (objfile, msym)
    671 	{
    672 	  const char *name = MSYMBOL_LINKAGE_NAME (msym);
    673 
    674 	  /* If the minimal symbols whose name are prefixed by "__imp_"
    675 	     or "_imp_", get rid of the prefix, and search the minimal
    676 	     symbol in OBJFILE.  Note that 'maintenance print msymbols'
    677 	     shows that type of these "_imp_XXXX" symbols is mst_data.  */
    678 	  if (MSYMBOL_TYPE (msym) == mst_data
    679 	      && (strncmp (name, "__imp_", 6) == 0
    680 		  || strncmp (name, "_imp_", 5) == 0))
    681 	    {
    682 	      const char *name1 = (name[1] == '_' ? &name[7] : &name[6]);
    683 	      struct bound_minimal_symbol found;
    684 
    685 	      found = lookup_minimal_symbol (name1, NULL, objfile);
    686 	      /* If found, there are symbols named "_imp_foo" and "foo"
    687 		 respectively in OBJFILE.  Set the type of symbol "foo"
    688 		 as 'mst_solib_trampoline'.  */
    689 	      if (found.minsym != NULL
    690 		  && MSYMBOL_TYPE (found.minsym) == mst_text)
    691 		MSYMBOL_TYPE (found.minsym) = mst_solib_trampoline;
    692 	    }
    693 	}
    694     }
    695 
    696   /* Free the installed minimal symbol data.  */
    697   do_cleanups (cleanup_minimal_symbols);
    698 
    699   bfd_map_over_sections (abfd, coff_locate_sections, (void *) info);
    700 
    701   if (info->stabsects)
    702     {
    703       if (!info->stabstrsect)
    704 	{
    705 	  error (_("The debugging information in `%s' is corrupted.\nThe "
    706 		   "file has a `.stabs' section, but no `.stabstr' section."),
    707 		 name);
    708 	}
    709 
    710       /* FIXME: dubious.  Why can't we use something normal like
    711          bfd_get_section_contents?  */
    712       bfd_seek (abfd, abfd->where, 0);
    713 
    714       stabstrsize = bfd_section_size (abfd, info->stabstrsect);
    715 
    716       coffstab_build_psymtabs (objfile,
    717 			       info->textaddr, info->textsize,
    718 			       info->stabsects,
    719 			       info->stabstrsect->filepos, stabstrsize);
    720     }
    721   if (dwarf2_has_info (objfile, NULL))
    722     {
    723       /* DWARF2 sections.  */
    724       dwarf2_build_psymtabs (objfile);
    725     }
    726 
    727   dwarf2_build_frame_info (objfile);
    728 
    729   /* Try to add separate debug file if no symbols table found.   */
    730   if (!objfile_has_partial_symbols (objfile))
    731     {
    732       char *debugfile;
    733 
    734       debugfile = find_separate_debug_file_by_debuglink (objfile);
    735       make_cleanup (xfree, debugfile);
    736 
    737       if (debugfile)
    738 	{
    739 	  bfd *abfd = symfile_bfd_open (debugfile);
    740 
    741 	  make_cleanup_bfd_unref (abfd);
    742 	  symbol_file_add_separate (abfd, debugfile, symfile_flags, objfile);
    743 	}
    744     }
    745 
    746   do_cleanups (back_to);
    747 }
    748 
    749 static void
    750 coff_new_init (struct objfile *ignore)
    751 {
    752 }
    753 
    754 /* Perform any local cleanups required when we are done with a
    755    particular objfile.  I.E, we are in the process of discarding all
    756    symbol information for an objfile, freeing up all memory held for
    757    it, and unlinking the objfile struct from the global list of known
    758    objfiles.  */
    759 
    760 static void
    761 coff_symfile_finish (struct objfile *objfile)
    762 {
    763   /* Let stabs reader clean up.  */
    764   stabsread_clear_cache ();
    765 
    766   dwarf2_free_objfile (objfile);
    767 }
    768 
    769 
    771 /* Given pointers to a symbol table in coff style exec file,
    772    analyze them and create struct symtab's describing the symbols.
    773    NSYMS is the number of symbols in the symbol table.
    774    We read them one at a time using read_one_sym ().  */
    775 
    776 static void
    777 coff_symtab_read (long symtab_offset, unsigned int nsyms,
    778 		  struct objfile *objfile)
    779 {
    780   struct gdbarch *gdbarch = get_objfile_arch (objfile);
    781   struct context_stack *new;
    782   struct coff_symbol coff_symbol;
    783   struct coff_symbol *cs = &coff_symbol;
    784   static struct internal_syment main_sym;
    785   static union internal_auxent main_aux;
    786   struct coff_symbol fcn_cs_saved;
    787   static struct internal_syment fcn_sym_saved;
    788   static union internal_auxent fcn_aux_saved;
    789   /* A .file is open.  */
    790   int in_source_file = 0;
    791   int next_file_symnum = -1;
    792   /* Name of the current file.  */
    793   const char *filestring = "";
    794   int depth = 0;
    795   int fcn_first_line = 0;
    796   CORE_ADDR fcn_first_line_addr = 0;
    797   int fcn_last_line = 0;
    798   int fcn_start_addr = 0;
    799   long fcn_line_ptr = 0;
    800   int val;
    801   CORE_ADDR tmpaddr;
    802   struct minimal_symbol *msym;
    803 
    804   /* Work around a stdio bug in SunOS4.1.1 (this makes me nervous....
    805      it's hard to know I've really worked around it.  The fix should
    806      be harmless, anyway).  The symptom of the bug is that the first
    807      fread (in read_one_sym), will (in my example) actually get data
    808      from file offset 268, when the fseek was to 264 (and ftell shows
    809      264).  This causes all hell to break loose.  I was unable to
    810      reproduce this on a short test program which operated on the same
    811      file, performing (I think) the same sequence of operations.
    812 
    813      It stopped happening when I put in this (former) rewind().
    814 
    815      FIXME: Find out if this has been reported to Sun, whether it has
    816      been fixed in a later release, etc.  */
    817 
    818   bfd_seek (objfile->obfd, 0, 0);
    819 
    820   /* Position to read the symbol table.  */
    821   val = bfd_seek (objfile->obfd, (long) symtab_offset, 0);
    822   if (val < 0)
    823     perror_with_name (objfile_name (objfile));
    824 
    825   coffread_objfile = objfile;
    826   nlist_bfd_global = objfile->obfd;
    827   nlist_nsyms_global = nsyms;
    828   set_last_source_file (NULL);
    829   memset (opaque_type_chain, 0, sizeof opaque_type_chain);
    830 
    831   if (type_vector)		/* Get rid of previous one.  */
    832     xfree (type_vector);
    833   type_vector_length = INITIAL_TYPE_VECTOR_LENGTH;
    834   type_vector = (struct type **)
    835     xmalloc (type_vector_length * sizeof (struct type *));
    836   memset (type_vector, 0, type_vector_length * sizeof (struct type *));
    837 
    838   coff_start_symtab (objfile, "");
    839 
    840   symnum = 0;
    841   while (symnum < nsyms)
    842     {
    843       QUIT;			/* Make this command interruptable.  */
    844 
    845       read_one_sym (cs, &main_sym, &main_aux);
    846 
    847       if (cs->c_symnum == next_file_symnum && cs->c_sclass != C_FILE)
    848 	{
    849 	  if (get_last_source_file ())
    850 	    coff_end_symtab (objfile);
    851 
    852 	  coff_start_symtab (objfile, "_globals_");
    853 	  /* coff_start_symtab will set the language of this symtab to
    854 	     language_unknown, since such a ``file name'' is not
    855 	     recognized.  Override that with the minimal language to
    856 	     allow printing values in this symtab.  */
    857 	  current_subfile->language = language_minimal;
    858 	  complete_symtab ("_globals_", 0, 0);
    859 	  /* Done with all files, everything from here on out is
    860 	     globals.  */
    861 	}
    862 
    863       /* Special case for file with type declarations only, no
    864 	 text.  */
    865       if (!get_last_source_file () && SDB_TYPE (cs->c_type)
    866 	  && cs->c_secnum == N_DEBUG)
    867 	complete_symtab (filestring, 0, 0);
    868 
    869       /* Typedefs should not be treated as symbol definitions.  */
    870       if (ISFCN (cs->c_type) && cs->c_sclass != C_TPDEF)
    871 	{
    872 	  /* Record all functions -- external and static -- in
    873 	     minsyms.  */
    874 	  int section = cs_to_section (cs, objfile);
    875 
    876 	  tmpaddr = cs->c_value;
    877 	  record_minimal_symbol (cs, tmpaddr, mst_text,
    878 				 section, objfile);
    879 
    880 	  fcn_line_ptr = main_aux.x_sym.x_fcnary.x_fcn.x_lnnoptr;
    881 	  fcn_start_addr = tmpaddr;
    882 	  fcn_cs_saved = *cs;
    883 	  fcn_sym_saved = main_sym;
    884 	  fcn_aux_saved = main_aux;
    885 	  continue;
    886 	}
    887 
    888       switch (cs->c_sclass)
    889 	{
    890 	case C_EFCN:
    891 	case C_EXTDEF:
    892 	case C_ULABEL:
    893 	case C_USTATIC:
    894 	case C_LINE:
    895 	case C_ALIAS:
    896 	case C_HIDDEN:
    897 	  complaint (&symfile_complaints,
    898 		     _("Bad n_sclass for symbol %s"),
    899 		     cs->c_name);
    900 	  break;
    901 
    902 	case C_FILE:
    903 	  /* c_value field contains symnum of next .file entry in
    904 	     table or symnum of first global after last .file.  */
    905 	  next_file_symnum = cs->c_value;
    906 	  if (cs->c_naux > 0)
    907 	    filestring = coff_getfilename (&main_aux);
    908 	  else
    909 	    filestring = "";
    910 
    911 	  /* Complete symbol table for last object file
    912 	     containing debugging information.  */
    913 	  if (get_last_source_file ())
    914 	    {
    915 	      coff_end_symtab (objfile);
    916 	      coff_start_symtab (objfile, filestring);
    917 	    }
    918 	  in_source_file = 1;
    919 	  break;
    920 
    921 	  /* C_LABEL is used for labels and static functions.
    922 	     Including it here allows gdb to see static functions when
    923 	     no debug info is available.  */
    924 	case C_LABEL:
    925 	  /* However, labels within a function can make weird
    926 	     backtraces, so filter them out (from phdm (at) macqel.be).  */
    927 	  if (within_function)
    928 	    break;
    929 	case C_STAT:
    930 	case C_THUMBLABEL:
    931 	case C_THUMBSTAT:
    932 	case C_THUMBSTATFUNC:
    933 	  if (cs->c_name[0] == '.')
    934 	    {
    935 	      if (strcmp (cs->c_name, ".text") == 0)
    936 		{
    937 		  /* FIXME: don't wire in ".text" as section name or
    938 		     symbol name!  */
    939 		  /* Check for in_source_file deals with case of a
    940 		     file with debugging symbols followed by a later
    941 		     file with no symbols.  */
    942 		  if (in_source_file)
    943 		    complete_symtab (filestring,
    944 		    cs->c_value + ANOFFSET (objfile->section_offsets,
    945 					    SECT_OFF_TEXT (objfile)),
    946 				     main_aux.x_scn.x_scnlen);
    947 		  in_source_file = 0;
    948 		}
    949 	      /* Flush rest of '.' symbols.  */
    950 	      break;
    951 	    }
    952 	  else if (!SDB_TYPE (cs->c_type)
    953 		   && cs->c_name[0] == 'L'
    954 		   && (strncmp (cs->c_name, "LI%", 3) == 0
    955 		       || strncmp (cs->c_name, "LF%", 3) == 0
    956 		       || strncmp (cs->c_name, "LC%", 3) == 0
    957 		       || strncmp (cs->c_name, "LP%", 3) == 0
    958 		       || strncmp (cs->c_name, "LPB%", 4) == 0
    959 		       || strncmp (cs->c_name, "LBB%", 4) == 0
    960 		       || strncmp (cs->c_name, "LBE%", 4) == 0
    961 		       || strncmp (cs->c_name, "LPBX%", 5) == 0))
    962 	    /* At least on a 3b1, gcc generates swbeg and string labels
    963 	       that look like this.  Ignore them.  */
    964 	    break;
    965 	  /* Fall in for static symbols that don't start with '.'  */
    966 	case C_THUMBEXT:
    967 	case C_THUMBEXTFUNC:
    968 	case C_EXT:
    969 	  {
    970 	    /* Record it in the minimal symbols regardless of
    971 	       SDB_TYPE.  This parallels what we do for other debug
    972 	       formats, and probably is needed to make
    973 	       print_address_symbolic work right without the (now
    974 	       gone) "set fast-symbolic-addr off" kludge.  */
    975 
    976 	    enum minimal_symbol_type ms_type;
    977 	    int sec;
    978 	    CORE_ADDR offset = 0;
    979 
    980 	    if (cs->c_secnum == N_UNDEF)
    981 	      {
    982 		/* This is a common symbol.  We used to rely on
    983 		   the target to tell us whether it knows where
    984 		   the symbol has been relocated to, but none of
    985 		   the target implementations actually provided
    986 		   that operation.  So we just ignore the symbol,
    987 		   the same way we would do if we had a target-side
    988 		   symbol lookup which returned no match.  */
    989 		break;
    990 	      }
    991  	    else if (cs->c_secnum == N_ABS)
    992  	      {
    993  		/* Use the correct minimal symbol type (and don't
    994  		   relocate) for absolute values.  */
    995  		ms_type = mst_abs;
    996  		sec = cs_to_section (cs, objfile);
    997  		tmpaddr = cs->c_value;
    998  	      }
    999 	    else
   1000 	      {
   1001 		asection *bfd_section = cs_to_bfd_section (cs, objfile);
   1002 
   1003 		sec = cs_to_section (cs, objfile);
   1004 		tmpaddr = cs->c_value;
   1005  		/* Statics in a PE file also get relocated.  */
   1006  		if (cs->c_sclass == C_EXT
   1007  		    || cs->c_sclass == C_THUMBEXTFUNC
   1008  		    || cs->c_sclass == C_THUMBEXT
   1009  		    || (pe_file && (cs->c_sclass == C_STAT)))
   1010 		  offset = ANOFFSET (objfile->section_offsets, sec);
   1011 
   1012 		if (bfd_section->flags & SEC_CODE)
   1013 		  {
   1014 		    ms_type =
   1015 		      cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXTFUNC
   1016 		      || cs->c_sclass == C_THUMBEXT ?
   1017 		      mst_text : mst_file_text;
   1018 		    tmpaddr = gdbarch_addr_bits_remove (gdbarch, tmpaddr);
   1019 		  }
   1020 		else if (bfd_section->flags & SEC_ALLOC
   1021 			 && bfd_section->flags & SEC_LOAD)
   1022 		  {
   1023 		    ms_type =
   1024 		      cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT
   1025 		      ? mst_data : mst_file_data;
   1026 		  }
   1027 		else if (bfd_section->flags & SEC_ALLOC)
   1028 		  {
   1029 		    ms_type =
   1030 		      cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT
   1031 		      ? mst_bss : mst_file_bss;
   1032 		  }
   1033 		else
   1034 		  ms_type = mst_unknown;
   1035 	      }
   1036 
   1037 	    msym = record_minimal_symbol (cs, tmpaddr, ms_type,
   1038 					  sec, objfile);
   1039 	    if (msym)
   1040 	      gdbarch_coff_make_msymbol_special (gdbarch,
   1041 						 cs->c_sclass, msym);
   1042 
   1043 	    if (SDB_TYPE (cs->c_type))
   1044 	      {
   1045 		struct symbol *sym;
   1046 
   1047 		sym = process_coff_symbol
   1048 		  (cs, &main_aux, objfile);
   1049 		SYMBOL_VALUE (sym) = tmpaddr + offset;
   1050 		SYMBOL_SECTION (sym) = sec;
   1051 	      }
   1052 	  }
   1053 	  break;
   1054 
   1055 	case C_FCN:
   1056 	  if (strcmp (cs->c_name, ".bf") == 0)
   1057 	    {
   1058 	      within_function = 1;
   1059 
   1060 	      /* Value contains address of first non-init type
   1061 		 code.  */
   1062 	      /* main_aux.x_sym.x_misc.x_lnsz.x_lnno
   1063 	         contains line number of '{' }.  */
   1064 	      if (cs->c_naux != 1)
   1065 		complaint (&symfile_complaints,
   1066 			   _("`.bf' symbol %d has no aux entry"),
   1067 			   cs->c_symnum);
   1068 	      fcn_first_line = main_aux.x_sym.x_misc.x_lnsz.x_lnno;
   1069 	      fcn_first_line_addr = cs->c_value;
   1070 
   1071 	      /* Might want to check that locals are 0 and
   1072 	         context_stack_depth is zero, and complain if not.  */
   1073 
   1074 	      depth = 0;
   1075 	      new = push_context (depth, fcn_start_addr);
   1076 	      fcn_cs_saved.c_name = getsymname (&fcn_sym_saved);
   1077 	      new->name =
   1078 		process_coff_symbol (&fcn_cs_saved,
   1079 				     &fcn_aux_saved, objfile);
   1080 	    }
   1081 	  else if (strcmp (cs->c_name, ".ef") == 0)
   1082 	    {
   1083 	      if (!within_function)
   1084 		error (_("Bad coff function information."));
   1085 	      /* The value of .ef is the address of epilogue code;
   1086 	         not useful for gdb.  */
   1087 	      /* { main_aux.x_sym.x_misc.x_lnsz.x_lnno
   1088 	         contains number of lines to '}' */
   1089 
   1090 	      if (context_stack_depth <= 0)
   1091 		{	/* We attempted to pop an empty context stack.  */
   1092 		  complaint (&symfile_complaints,
   1093 			     _("`.ef' symbol without matching `.bf' "
   1094 			       "symbol ignored starting at symnum %d"),
   1095 			     cs->c_symnum);
   1096 		  within_function = 0;
   1097 		  break;
   1098 		}
   1099 
   1100 	      new = pop_context ();
   1101 	      /* Stack must be empty now.  */
   1102 	      if (context_stack_depth > 0 || new == NULL)
   1103 		{
   1104 		  complaint (&symfile_complaints,
   1105 			     _("Unmatched .ef symbol(s) ignored "
   1106 			       "starting at symnum %d"),
   1107 			     cs->c_symnum);
   1108 		  within_function = 0;
   1109 		  break;
   1110 		}
   1111 	      if (cs->c_naux != 1)
   1112 		{
   1113 		  complaint (&symfile_complaints,
   1114 			     _("`.ef' symbol %d has no aux entry"),
   1115 			     cs->c_symnum);
   1116 		  fcn_last_line = 0x7FFFFFFF;
   1117 		}
   1118 	      else
   1119 		{
   1120 		  fcn_last_line = main_aux.x_sym.x_misc.x_lnsz.x_lnno;
   1121 		}
   1122 	      /* fcn_first_line is the line number of the opening '{'.
   1123 	         Do not record it - because it would affect gdb's idea
   1124 	         of the line number of the first statement of the
   1125 	         function - except for one-line functions, for which
   1126 	         it is also the line number of all the statements and
   1127 	         of the closing '}', and for which we do not have any
   1128 	         other statement-line-number.  */
   1129 	      if (fcn_last_line == 1)
   1130 		record_line (current_subfile, fcn_first_line,
   1131 			     gdbarch_addr_bits_remove (gdbarch,
   1132 						       fcn_first_line_addr));
   1133 	      else
   1134 		enter_linenos (fcn_line_ptr, fcn_first_line,
   1135 			       fcn_last_line, objfile);
   1136 
   1137 	      finish_block (new->name, &local_symbols,
   1138 			    new->old_blocks, new->start_addr,
   1139 			    fcn_cs_saved.c_value
   1140 			    + fcn_aux_saved.x_sym.x_misc.x_fsize
   1141 			    + ANOFFSET (objfile->section_offsets,
   1142 					SECT_OFF_TEXT (objfile)));
   1143 	      within_function = 0;
   1144 	    }
   1145 	  break;
   1146 
   1147 	case C_BLOCK:
   1148 	  if (strcmp (cs->c_name, ".bb") == 0)
   1149 	    {
   1150 	      tmpaddr = cs->c_value;
   1151 	      tmpaddr += ANOFFSET (objfile->section_offsets,
   1152 				   SECT_OFF_TEXT (objfile));
   1153 	      push_context (++depth, tmpaddr);
   1154 	    }
   1155 	  else if (strcmp (cs->c_name, ".eb") == 0)
   1156 	    {
   1157 	      if (context_stack_depth <= 0)
   1158 		{	/* We attempted to pop an empty context stack.  */
   1159 		  complaint (&symfile_complaints,
   1160 			     _("`.eb' symbol without matching `.bb' "
   1161 			       "symbol ignored starting at symnum %d"),
   1162 			     cs->c_symnum);
   1163 		  break;
   1164 		}
   1165 
   1166 	      new = pop_context ();
   1167 	      if (depth-- != new->depth)
   1168 		{
   1169 		  complaint (&symfile_complaints,
   1170 			     _("Mismatched .eb symbol ignored "
   1171 			       "starting at symnum %d"),
   1172 			     symnum);
   1173 		  break;
   1174 		}
   1175 	      if (local_symbols && context_stack_depth > 0)
   1176 		{
   1177 		  tmpaddr =
   1178 		    cs->c_value + ANOFFSET (objfile->section_offsets,
   1179 					    SECT_OFF_TEXT (objfile));
   1180 		  /* Make a block for the local symbols within.  */
   1181 		  finish_block (0, &local_symbols, new->old_blocks,
   1182 				new->start_addr, tmpaddr);
   1183 		}
   1184 	      /* Now pop locals of block just finished.  */
   1185 	      local_symbols = new->locals;
   1186 	    }
   1187 	  break;
   1188 
   1189 	default:
   1190 	  process_coff_symbol (cs, &main_aux, objfile);
   1191 	  break;
   1192 	}
   1193     }
   1194 
   1195   if ((nsyms == 0) && (pe_file))
   1196     {
   1197       /* We've got no debugging symbols, but it's a portable
   1198 	 executable, so try to read the export table.  */
   1199       read_pe_exported_syms (objfile);
   1200     }
   1201 
   1202   if (get_last_source_file ())
   1203     coff_end_symtab (objfile);
   1204 
   1205   /* Patch up any opaque types (references to types that are not defined
   1206      in the file where they are referenced, e.g. "struct foo *bar").  */
   1207   {
   1208     struct compunit_symtab *cu;
   1209     struct symtab *s;
   1210 
   1211     ALL_OBJFILE_FILETABS (objfile, cu, s)
   1212       patch_opaque_types (s);
   1213   }
   1214 
   1215   coffread_objfile = NULL;
   1216 }
   1217 
   1218 /* Routines for reading headers and symbols from executable.  */
   1220 
   1221 /* Read the next symbol, swap it, and return it in both
   1222    internal_syment form, and coff_symbol form.  Also return its first
   1223    auxent, if any, in internal_auxent form, and skip any other
   1224    auxents.  */
   1225 
   1226 static void
   1227 read_one_sym (struct coff_symbol *cs,
   1228 	      struct internal_syment *sym,
   1229 	      union internal_auxent *aux)
   1230 {
   1231   int i;
   1232   bfd_size_type bytes;
   1233 
   1234   cs->c_symnum = symnum;
   1235   bytes = bfd_bread (temp_sym, local_symesz, nlist_bfd_global);
   1236   if (bytes != local_symesz)
   1237     error (_("%s: error reading symbols"), objfile_name (coffread_objfile));
   1238   bfd_coff_swap_sym_in (symfile_bfd, temp_sym, (char *) sym);
   1239   cs->c_naux = sym->n_numaux & 0xff;
   1240   if (cs->c_naux >= 1)
   1241     {
   1242       bytes  = bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
   1243       if (bytes != local_auxesz)
   1244 	error (_("%s: error reading symbols"), objfile_name (coffread_objfile));
   1245       bfd_coff_swap_aux_in (symfile_bfd, temp_aux,
   1246 			    sym->n_type, sym->n_sclass,
   1247 			    0, cs->c_naux, (char *) aux);
   1248       /* If more than one aux entry, read past it (only the first aux
   1249          is important).  */
   1250       for (i = 1; i < cs->c_naux; i++)
   1251 	{
   1252 	  bytes = bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
   1253 	  if (bytes != local_auxesz)
   1254 	    error (_("%s: error reading symbols"),
   1255 		   objfile_name (coffread_objfile));
   1256 	}
   1257     }
   1258   cs->c_name = getsymname (sym);
   1259   cs->c_value = sym->n_value;
   1260   cs->c_sclass = (sym->n_sclass & 0xff);
   1261   cs->c_secnum = sym->n_scnum;
   1262   cs->c_type = (unsigned) sym->n_type;
   1263   if (!SDB_TYPE (cs->c_type))
   1264     cs->c_type = 0;
   1265 
   1266 #if 0
   1267   if (cs->c_sclass & 128)
   1268     printf (_("thumb symbol %s, class 0x%x\n"), cs->c_name, cs->c_sclass);
   1269 #endif
   1270 
   1271   symnum += 1 + cs->c_naux;
   1272 
   1273   /* The PE file format stores symbol values as offsets within the
   1274      section, rather than as absolute addresses.  We correct that
   1275      here, if the symbol has an appropriate storage class.  FIXME: We
   1276      should use BFD to read the symbols, rather than duplicating the
   1277      work here.  */
   1278   if (pe_file)
   1279     {
   1280       switch (cs->c_sclass)
   1281 	{
   1282 	case C_EXT:
   1283 	case C_THUMBEXT:
   1284 	case C_THUMBEXTFUNC:
   1285 	case C_SECTION:
   1286 	case C_NT_WEAK:
   1287 	case C_STAT:
   1288 	case C_THUMBSTAT:
   1289 	case C_THUMBSTATFUNC:
   1290 	case C_LABEL:
   1291 	case C_THUMBLABEL:
   1292 	case C_BLOCK:
   1293 	case C_FCN:
   1294 	case C_EFCN:
   1295 	  if (cs->c_secnum != 0)
   1296 	    cs->c_value += cs_section_address (cs, symfile_bfd);
   1297 	  break;
   1298 	}
   1299     }
   1300 }
   1301 
   1302 /* Support for string table handling.  */
   1304 
   1305 static char *stringtab = NULL;
   1306 
   1307 static int
   1308 init_stringtab (bfd *abfd, long offset)
   1309 {
   1310   long length;
   1311   int val;
   1312   unsigned char lengthbuf[4];
   1313 
   1314   free_stringtab ();
   1315 
   1316   /* If the file is stripped, the offset might be zero, indicating no
   1317      string table.  Just return with `stringtab' set to null.  */
   1318   if (offset == 0)
   1319     return 0;
   1320 
   1321   if (bfd_seek (abfd, offset, 0) < 0)
   1322     return -1;
   1323 
   1324   val = bfd_bread ((char *) lengthbuf, sizeof lengthbuf, abfd);
   1325   length = bfd_h_get_32 (symfile_bfd, lengthbuf);
   1326 
   1327   /* If no string table is needed, then the file may end immediately
   1328      after the symbols.  Just return with `stringtab' set to null.  */
   1329   if (val != sizeof lengthbuf || length < sizeof lengthbuf)
   1330     return 0;
   1331 
   1332   stringtab = (char *) xmalloc (length);
   1333   /* This is in target format (probably not very useful, and not
   1334      currently used), not host format.  */
   1335   memcpy (stringtab, lengthbuf, sizeof lengthbuf);
   1336   if (length == sizeof length)	/* Empty table -- just the count.  */
   1337     return 0;
   1338 
   1339   val = bfd_bread (stringtab + sizeof lengthbuf,
   1340 		   length - sizeof lengthbuf, abfd);
   1341   if (val != length - sizeof lengthbuf || stringtab[length - 1] != '\0')
   1342     return -1;
   1343 
   1344   return 0;
   1345 }
   1346 
   1347 static void
   1348 free_stringtab (void)
   1349 {
   1350   if (stringtab)
   1351     xfree (stringtab);
   1352   stringtab = NULL;
   1353 }
   1354 
   1355 static void
   1356 free_stringtab_cleanup (void *ignore)
   1357 {
   1358   free_stringtab ();
   1359 }
   1360 
   1361 static char *
   1362 getsymname (struct internal_syment *symbol_entry)
   1363 {
   1364   static char buffer[SYMNMLEN + 1];
   1365   char *result;
   1366 
   1367   if (symbol_entry->_n._n_n._n_zeroes == 0)
   1368     {
   1369       /* FIXME: Probably should be detecting corrupt symbol files by
   1370          seeing whether offset points to within the stringtab.  */
   1371       result = stringtab + symbol_entry->_n._n_n._n_offset;
   1372     }
   1373   else
   1374     {
   1375       strncpy (buffer, symbol_entry->_n._n_name, SYMNMLEN);
   1376       buffer[SYMNMLEN] = '\0';
   1377       result = buffer;
   1378     }
   1379   return result;
   1380 }
   1381 
   1382 /* Extract the file name from the aux entry of a C_FILE symbol.
   1383    Return only the last component of the name.  Result is in static
   1384    storage and is only good for temporary use.  */
   1385 
   1386 static const char *
   1387 coff_getfilename (union internal_auxent *aux_entry)
   1388 {
   1389   static char buffer[BUFSIZ];
   1390   const char *result;
   1391 
   1392   if (aux_entry->x_file.x_n.x_zeroes == 0)
   1393     {
   1394       if (strlen (stringtab + aux_entry->x_file.x_n.x_offset) >= BUFSIZ)
   1395 	internal_error (__FILE__, __LINE__, _("coff file name too long"));
   1396       strcpy (buffer, stringtab + aux_entry->x_file.x_n.x_offset);
   1397     }
   1398   else
   1399     {
   1400       strncpy (buffer, aux_entry->x_file.x_fname, FILNMLEN);
   1401       buffer[FILNMLEN] = '\0';
   1402     }
   1403   result = buffer;
   1404 
   1405   /* FIXME: We should not be throwing away the information about what
   1406      directory.  It should go into dirname of the symtab, or some such
   1407      place.  */
   1408   result = lbasename (result);
   1409   return (result);
   1410 }
   1411 
   1412 /* Support for line number handling.  */
   1414 
   1415 static char *linetab = NULL;
   1416 static long linetab_offset;
   1417 static unsigned long linetab_size;
   1418 
   1419 /* Read in all the line numbers for fast lookups later.  Leave them in
   1420    external (unswapped) format in memory; we'll swap them as we enter
   1421    them into GDB's data structures.  */
   1422 
   1423 static int
   1424 init_lineno (bfd *abfd, long offset, int size)
   1425 {
   1426   int val;
   1427 
   1428   linetab_offset = offset;
   1429   linetab_size = size;
   1430 
   1431   free_linetab ();
   1432 
   1433   if (size == 0)
   1434     return 0;
   1435 
   1436   if (bfd_seek (abfd, offset, 0) < 0)
   1437     return -1;
   1438 
   1439   /* Allocate the desired table, plus a sentinel.  */
   1440   linetab = (char *) xmalloc (size + local_linesz);
   1441 
   1442   val = bfd_bread (linetab, size, abfd);
   1443   if (val != size)
   1444     return -1;
   1445 
   1446   /* Terminate it with an all-zero sentinel record.  */
   1447   memset (linetab + size, 0, local_linesz);
   1448 
   1449   return 0;
   1450 }
   1451 
   1452 static void
   1453 free_linetab (void)
   1454 {
   1455   if (linetab)
   1456     xfree (linetab);
   1457   linetab = NULL;
   1458 }
   1459 
   1460 static void
   1461 free_linetab_cleanup (void *ignore)
   1462 {
   1463   free_linetab ();
   1464 }
   1465 
   1466 #if !defined (L_LNNO32)
   1467 #define L_LNNO32(lp) ((lp)->l_lnno)
   1468 #endif
   1469 
   1470 static void
   1471 enter_linenos (long file_offset, int first_line,
   1472 	       int last_line, struct objfile *objfile)
   1473 {
   1474   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   1475   char *rawptr;
   1476   struct internal_lineno lptr;
   1477 
   1478   if (!linetab)
   1479     return;
   1480   if (file_offset < linetab_offset)
   1481     {
   1482       complaint (&symfile_complaints,
   1483 		 _("Line number pointer %ld lower than start of line numbers"),
   1484 		 file_offset);
   1485       if (file_offset > linetab_size)	/* Too big to be an offset?  */
   1486 	return;
   1487       file_offset += linetab_offset;	/* Try reading at that linetab
   1488 					   offset.  */
   1489     }
   1490 
   1491   rawptr = &linetab[file_offset - linetab_offset];
   1492 
   1493   /* Skip first line entry for each function.  */
   1494   rawptr += local_linesz;
   1495   /* Line numbers start at one for the first line of the function.  */
   1496   first_line--;
   1497 
   1498   /* If the line number table is full (e.g. 64K lines in COFF debug
   1499      info), the next function's L_LNNO32 might not be zero, so don't
   1500      overstep the table's end in any case.  */
   1501   while (rawptr <= &linetab[0] + linetab_size)
   1502     {
   1503       bfd_coff_swap_lineno_in (symfile_bfd, rawptr, &lptr);
   1504       rawptr += local_linesz;
   1505       /* The next function, or the sentinel, will have L_LNNO32 zero;
   1506 	 we exit.  */
   1507       if (L_LNNO32 (&lptr) && L_LNNO32 (&lptr) <= last_line)
   1508 	{
   1509 	  CORE_ADDR addr = lptr.l_addr.l_paddr;
   1510 	  addr += ANOFFSET (objfile->section_offsets,
   1511 			    SECT_OFF_TEXT (objfile));
   1512 	  record_line (current_subfile,
   1513 		       first_line + L_LNNO32 (&lptr),
   1514 		       gdbarch_addr_bits_remove (gdbarch, addr));
   1515 	}
   1516       else
   1517 	break;
   1518     }
   1519 }
   1520 
   1521 static void
   1523 patch_type (struct type *type, struct type *real_type)
   1524 {
   1525   struct type *target = TYPE_TARGET_TYPE (type);
   1526   struct type *real_target = TYPE_TARGET_TYPE (real_type);
   1527   int field_size = TYPE_NFIELDS (real_target) * sizeof (struct field);
   1528 
   1529   TYPE_LENGTH (target) = TYPE_LENGTH (real_target);
   1530   TYPE_NFIELDS (target) = TYPE_NFIELDS (real_target);
   1531   TYPE_FIELDS (target) = (struct field *) TYPE_ALLOC (target,
   1532 						      field_size);
   1533 
   1534   memcpy (TYPE_FIELDS (target),
   1535 	  TYPE_FIELDS (real_target),
   1536 	  field_size);
   1537 
   1538   if (TYPE_NAME (real_target))
   1539     {
   1540       /* The previous copy of TYPE_NAME is allocated by
   1541 	 process_coff_symbol.  */
   1542       if (TYPE_NAME (target))
   1543 	xfree ((char*) TYPE_NAME (target));
   1544       TYPE_NAME (target) = xstrdup (TYPE_NAME (real_target));
   1545     }
   1546 }
   1547 
   1548 /* Patch up all appropriate typedef symbols in the opaque_type_chains
   1549    so that they can be used to print out opaque data structures
   1550    properly.  */
   1551 
   1552 static void
   1553 patch_opaque_types (struct symtab *s)
   1554 {
   1555   struct block *b;
   1556   struct block_iterator iter;
   1557   struct symbol *real_sym;
   1558 
   1559   /* Go through the per-file symbols only.  */
   1560   b = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (s), STATIC_BLOCK);
   1561   ALL_BLOCK_SYMBOLS (b, iter, real_sym)
   1562     {
   1563       /* Find completed typedefs to use to fix opaque ones.
   1564          Remove syms from the chain when their types are stored,
   1565          but search the whole chain, as there may be several syms
   1566          from different files with the same name.  */
   1567       if (SYMBOL_CLASS (real_sym) == LOC_TYPEDEF
   1568 	  && SYMBOL_DOMAIN (real_sym) == VAR_DOMAIN
   1569 	  && TYPE_CODE (SYMBOL_TYPE (real_sym)) == TYPE_CODE_PTR
   1570 	  && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (real_sym))) != 0)
   1571 	{
   1572 	  const char *name = SYMBOL_LINKAGE_NAME (real_sym);
   1573 	  int hash = hashname (name);
   1574 	  struct symbol *sym, *prev;
   1575 
   1576 	  prev = 0;
   1577 	  for (sym = opaque_type_chain[hash]; sym;)
   1578 	    {
   1579 	      if (name[0] == SYMBOL_LINKAGE_NAME (sym)[0]
   1580 		  && strcmp (name + 1, SYMBOL_LINKAGE_NAME (sym) + 1) == 0)
   1581 		{
   1582 		  if (prev)
   1583 		    {
   1584 		      SYMBOL_VALUE_CHAIN (prev) = SYMBOL_VALUE_CHAIN (sym);
   1585 		    }
   1586 		  else
   1587 		    {
   1588 		      opaque_type_chain[hash] = SYMBOL_VALUE_CHAIN (sym);
   1589 		    }
   1590 
   1591 		  patch_type (SYMBOL_TYPE (sym), SYMBOL_TYPE (real_sym));
   1592 
   1593 		  if (prev)
   1594 		    {
   1595 		      sym = SYMBOL_VALUE_CHAIN (prev);
   1596 		    }
   1597 		  else
   1598 		    {
   1599 		      sym = opaque_type_chain[hash];
   1600 		    }
   1601 		}
   1602 	      else
   1603 		{
   1604 		  prev = sym;
   1605 		  sym = SYMBOL_VALUE_CHAIN (sym);
   1606 		}
   1607 	    }
   1608 	}
   1609     }
   1610 }
   1611 
   1612 static int
   1614 coff_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
   1615 {
   1616   return gdbarch_sdb_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym));
   1617 }
   1618 
   1619 static const struct symbol_register_ops coff_register_funcs = {
   1620   coff_reg_to_regnum
   1621 };
   1622 
   1623 /* The "aclass" index for computed COFF symbols.  */
   1624 
   1625 static int coff_register_index;
   1626 
   1627 static struct symbol *
   1628 process_coff_symbol (struct coff_symbol *cs,
   1629 		     union internal_auxent *aux,
   1630 		     struct objfile *objfile)
   1631 {
   1632   struct symbol *sym = allocate_symbol (objfile);
   1633   char *name;
   1634 
   1635   name = cs->c_name;
   1636   name = EXTERNAL_NAME (name, objfile->obfd);
   1637   SYMBOL_SET_LANGUAGE (sym, current_subfile->language,
   1638 		       &objfile->objfile_obstack);
   1639   SYMBOL_SET_NAMES (sym, name, strlen (name), 1, objfile);
   1640 
   1641   /* default assumptions */
   1642   SYMBOL_VALUE (sym) = cs->c_value;
   1643   SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
   1644   SYMBOL_SECTION (sym) = cs_to_section (cs, objfile);
   1645 
   1646   if (ISFCN (cs->c_type))
   1647     {
   1648       SYMBOL_VALUE (sym) += ANOFFSET (objfile->section_offsets,
   1649 				      SECT_OFF_TEXT (objfile));
   1650       SYMBOL_TYPE (sym) =
   1651 	lookup_function_type (decode_function_type (cs, cs->c_type,
   1652 						    aux, objfile));
   1653 
   1654       SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
   1655       if (cs->c_sclass == C_STAT || cs->c_sclass == C_THUMBSTAT
   1656 	  || cs->c_sclass == C_THUMBSTATFUNC)
   1657 	add_symbol_to_list (sym, &file_symbols);
   1658       else if (cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT
   1659 	       || cs->c_sclass == C_THUMBEXTFUNC)
   1660 	add_symbol_to_list (sym, &global_symbols);
   1661     }
   1662   else
   1663     {
   1664       SYMBOL_TYPE (sym) = decode_type (cs, cs->c_type, aux, objfile);
   1665       switch (cs->c_sclass)
   1666 	{
   1667 	case C_NULL:
   1668 	  break;
   1669 
   1670 	case C_AUTO:
   1671 	  SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL;
   1672 	  add_symbol_to_list (sym, &local_symbols);
   1673 	  break;
   1674 
   1675 	case C_THUMBEXT:
   1676 	case C_THUMBEXTFUNC:
   1677 	case C_EXT:
   1678 	  SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
   1679 	  SYMBOL_VALUE_ADDRESS (sym) = (CORE_ADDR) cs->c_value;
   1680 	  SYMBOL_VALUE_ADDRESS (sym) += ANOFFSET (objfile->section_offsets,
   1681 						  SECT_OFF_TEXT (objfile));
   1682 	  add_symbol_to_list (sym, &global_symbols);
   1683 	  break;
   1684 
   1685 	case C_THUMBSTAT:
   1686 	case C_THUMBSTATFUNC:
   1687 	case C_STAT:
   1688 	  SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
   1689 	  SYMBOL_VALUE_ADDRESS (sym) = (CORE_ADDR) cs->c_value;
   1690 	  SYMBOL_VALUE_ADDRESS (sym) += ANOFFSET (objfile->section_offsets,
   1691 						  SECT_OFF_TEXT (objfile));
   1692 	  if (within_function)
   1693 	    {
   1694 	      /* Static symbol of local scope.  */
   1695 	      add_symbol_to_list (sym, &local_symbols);
   1696 	    }
   1697 	  else
   1698 	    {
   1699 	      /* Static symbol at top level of file.  */
   1700 	      add_symbol_to_list (sym, &file_symbols);
   1701 	    }
   1702 	  break;
   1703 
   1704 #ifdef C_GLBLREG		/* AMD coff */
   1705 	case C_GLBLREG:
   1706 #endif
   1707 	case C_REG:
   1708 	  SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
   1709 	  SYMBOL_VALUE (sym) = cs->c_value;
   1710 	  add_symbol_to_list (sym, &local_symbols);
   1711 	  break;
   1712 
   1713 	case C_THUMBLABEL:
   1714 	case C_LABEL:
   1715 	  break;
   1716 
   1717 	case C_ARG:
   1718 	  SYMBOL_ACLASS_INDEX (sym) = LOC_ARG;
   1719 	  SYMBOL_IS_ARGUMENT (sym) = 1;
   1720 	  add_symbol_to_list (sym, &local_symbols);
   1721 	  break;
   1722 
   1723 	case C_REGPARM:
   1724 	  SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
   1725 	  SYMBOL_IS_ARGUMENT (sym) = 1;
   1726 	  SYMBOL_VALUE (sym) = cs->c_value;
   1727 	  add_symbol_to_list (sym, &local_symbols);
   1728 	  break;
   1729 
   1730 	case C_TPDEF:
   1731 	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
   1732 	  SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
   1733 
   1734 	  /* If type has no name, give it one.  */
   1735 	  if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
   1736 	    {
   1737 	      if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR
   1738 		  || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_FUNC)
   1739 		{
   1740 		  /* If we are giving a name to a type such as
   1741 		     "pointer to foo" or "function returning foo", we
   1742 		     better not set the TYPE_NAME.  If the program
   1743 		     contains "typedef char *caddr_t;", we don't want
   1744 		     all variables of type char * to print as caddr_t.
   1745 		     This is not just a consequence of GDB's type
   1746 		     management; CC and GCC (at least through version
   1747 		     2.4) both output variables of either type char *
   1748 		     or caddr_t with the type refering to the C_TPDEF
   1749 		     symbol for caddr_t.  If a future compiler cleans
   1750 		     this up it GDB is not ready for it yet, but if it
   1751 		     becomes ready we somehow need to disable this
   1752 		     check (without breaking the PCC/GCC2.4 case).
   1753 
   1754 		     Sigh.
   1755 
   1756 		     Fortunately, this check seems not to be necessary
   1757 		     for anything except pointers or functions.  */
   1758 		  ;
   1759 		}
   1760 	      else
   1761 		TYPE_NAME (SYMBOL_TYPE (sym)) =
   1762 		  xstrdup (SYMBOL_LINKAGE_NAME (sym));
   1763 	    }
   1764 
   1765 	  /* Keep track of any type which points to empty structured
   1766 	     type, so it can be filled from a definition from another
   1767 	     file.  A simple forward reference (TYPE_CODE_UNDEF) is
   1768 	     not an empty structured type, though; the forward
   1769 	     references work themselves out via the magic of
   1770 	     coff_lookup_type.  */
   1771 	  if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR
   1772 	      && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))) == 0
   1773 	      && TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym)))
   1774 	         != TYPE_CODE_UNDEF)
   1775 	    {
   1776 	      int i = hashname (SYMBOL_LINKAGE_NAME (sym));
   1777 
   1778 	      SYMBOL_VALUE_CHAIN (sym) = opaque_type_chain[i];
   1779 	      opaque_type_chain[i] = sym;
   1780 	    }
   1781 	  add_symbol_to_list (sym, &file_symbols);
   1782 	  break;
   1783 
   1784 	case C_STRTAG:
   1785 	case C_UNTAG:
   1786 	case C_ENTAG:
   1787 	  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
   1788 	  SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
   1789 
   1790 	  /* Some compilers try to be helpful by inventing "fake"
   1791 	     names for anonymous enums, structures, and unions, like
   1792 	     "~0fake" or ".0fake".  Thanks, but no thanks...  */
   1793 	  if (TYPE_TAG_NAME (SYMBOL_TYPE (sym)) == 0)
   1794 	    if (SYMBOL_LINKAGE_NAME (sym) != NULL
   1795 		&& *SYMBOL_LINKAGE_NAME (sym) != '~'
   1796 		&& *SYMBOL_LINKAGE_NAME (sym) != '.')
   1797 	      TYPE_TAG_NAME (SYMBOL_TYPE (sym)) =
   1798 		concat (SYMBOL_LINKAGE_NAME (sym), (char *)NULL);
   1799 
   1800 	  add_symbol_to_list (sym, &file_symbols);
   1801 	  break;
   1802 
   1803 	default:
   1804 	  break;
   1805 	}
   1806     }
   1807   return sym;
   1808 }
   1809 
   1810 /* Decode a coff type specifier;  return the type that is meant.  */
   1812 
   1813 static struct type *
   1814 decode_type (struct coff_symbol *cs, unsigned int c_type,
   1815 	     union internal_auxent *aux, struct objfile *objfile)
   1816 {
   1817   struct type *type = 0;
   1818   unsigned int new_c_type;
   1819 
   1820   if (c_type & ~N_BTMASK)
   1821     {
   1822       new_c_type = DECREF (c_type);
   1823       if (ISPTR (c_type))
   1824 	{
   1825 	  type = decode_type (cs, new_c_type, aux, objfile);
   1826 	  type = lookup_pointer_type (type);
   1827 	}
   1828       else if (ISFCN (c_type))
   1829 	{
   1830 	  type = decode_type (cs, new_c_type, aux, objfile);
   1831 	  type = lookup_function_type (type);
   1832 	}
   1833       else if (ISARY (c_type))
   1834 	{
   1835 	  int i, n;
   1836 	  unsigned short *dim;
   1837 	  struct type *base_type, *index_type, *range_type;
   1838 
   1839 	  /* Define an array type.  */
   1840 	  /* auxent refers to array, not base type.  */
   1841 	  if (aux->x_sym.x_tagndx.l == 0)
   1842 	    cs->c_naux = 0;
   1843 
   1844 	  /* Shift the indices down.  */
   1845 	  dim = &aux->x_sym.x_fcnary.x_ary.x_dimen[0];
   1846 	  i = 1;
   1847 	  n = dim[0];
   1848 	  for (i = 0; *dim && i < DIMNUM - 1; i++, dim++)
   1849 	    *dim = *(dim + 1);
   1850 	  *dim = 0;
   1851 
   1852 	  base_type = decode_type (cs, new_c_type, aux, objfile);
   1853 	  index_type = objfile_type (objfile)->builtin_int;
   1854 	  range_type
   1855 	    = create_static_range_type ((struct type *) NULL,
   1856 					index_type, 0, n - 1);
   1857 	  type =
   1858 	    create_array_type ((struct type *) NULL,
   1859 			       base_type, range_type);
   1860 	}
   1861       return type;
   1862     }
   1863 
   1864   /* Reference to existing type.  This only occurs with the struct,
   1865      union, and enum types.  EPI a29k coff fakes us out by producing
   1866      aux entries with a nonzero x_tagndx for definitions of structs,
   1867      unions, and enums, so we have to check the c_sclass field.  SCO
   1868      3.2v4 cc gets confused with pointers to pointers to defined
   1869      structs, and generates negative x_tagndx fields.  */
   1870   if (cs->c_naux > 0 && aux->x_sym.x_tagndx.l != 0)
   1871     {
   1872       if (cs->c_sclass != C_STRTAG
   1873 	  && cs->c_sclass != C_UNTAG
   1874 	  && cs->c_sclass != C_ENTAG
   1875 	  && aux->x_sym.x_tagndx.l >= 0)
   1876 	{
   1877 	  type = coff_alloc_type (aux->x_sym.x_tagndx.l);
   1878 	  return type;
   1879 	}
   1880       else
   1881 	{
   1882 	  complaint (&symfile_complaints,
   1883 		     _("Symbol table entry for %s has bad tagndx value"),
   1884 		     cs->c_name);
   1885 	  /* And fall through to decode_base_type...  */
   1886 	}
   1887     }
   1888 
   1889   return decode_base_type (cs, BTYPE (c_type), aux, objfile);
   1890 }
   1891 
   1892 /* Decode a coff type specifier for function definition;
   1893    return the type that the function returns.  */
   1894 
   1895 static struct type *
   1896 decode_function_type (struct coff_symbol *cs,
   1897 		      unsigned int c_type,
   1898 		      union internal_auxent *aux,
   1899 		      struct objfile *objfile)
   1900 {
   1901   if (aux->x_sym.x_tagndx.l == 0)
   1902     cs->c_naux = 0;	/* auxent refers to function, not base
   1903 			   type.  */
   1904 
   1905   return decode_type (cs, DECREF (c_type), aux, objfile);
   1906 }
   1907 
   1908 /* Basic C types.  */
   1910 
   1911 static struct type *
   1912 decode_base_type (struct coff_symbol *cs,
   1913 		  unsigned int c_type,
   1914 		  union internal_auxent *aux,
   1915 		  struct objfile *objfile)
   1916 {
   1917   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   1918   struct type *type;
   1919 
   1920   switch (c_type)
   1921     {
   1922     case T_NULL:
   1923       /* Shows up with "void (*foo)();" structure members.  */
   1924       return objfile_type (objfile)->builtin_void;
   1925 
   1926 #ifdef T_VOID
   1927     case T_VOID:
   1928       /* Intel 960 COFF has this symbol and meaning.  */
   1929       return objfile_type (objfile)->builtin_void;
   1930 #endif
   1931 
   1932     case T_CHAR:
   1933       return objfile_type (objfile)->builtin_char;
   1934 
   1935     case T_SHORT:
   1936       return objfile_type (objfile)->builtin_short;
   1937 
   1938     case T_INT:
   1939       return objfile_type (objfile)->builtin_int;
   1940 
   1941     case T_LONG:
   1942       if (cs->c_sclass == C_FIELD
   1943 	  && aux->x_sym.x_misc.x_lnsz.x_size
   1944 	     > gdbarch_long_bit (gdbarch))
   1945 	return objfile_type (objfile)->builtin_long_long;
   1946       else
   1947 	return objfile_type (objfile)->builtin_long;
   1948 
   1949     case T_FLOAT:
   1950       return objfile_type (objfile)->builtin_float;
   1951 
   1952     case T_DOUBLE:
   1953       return objfile_type (objfile)->builtin_double;
   1954 
   1955     case T_LNGDBL:
   1956       return objfile_type (objfile)->builtin_long_double;
   1957 
   1958     case T_STRUCT:
   1959       if (cs->c_naux != 1)
   1960 	{
   1961 	  /* Anonymous structure type.  */
   1962 	  type = coff_alloc_type (cs->c_symnum);
   1963 	  TYPE_CODE (type) = TYPE_CODE_STRUCT;
   1964 	  TYPE_NAME (type) = NULL;
   1965 	  /* This used to set the tag to "<opaque>".  But I think
   1966 	     setting it to NULL is right, and the printing code can
   1967 	     print it as "struct {...}".  */
   1968 	  TYPE_TAG_NAME (type) = NULL;
   1969 	  INIT_CPLUS_SPECIFIC (type);
   1970 	  TYPE_LENGTH (type) = 0;
   1971 	  TYPE_FIELDS (type) = 0;
   1972 	  TYPE_NFIELDS (type) = 0;
   1973 	}
   1974       else
   1975 	{
   1976 	  type = coff_read_struct_type (cs->c_symnum,
   1977 					aux->x_sym.x_misc.x_lnsz.x_size,
   1978 					aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
   1979 					objfile);
   1980 	}
   1981       return type;
   1982 
   1983     case T_UNION:
   1984       if (cs->c_naux != 1)
   1985 	{
   1986 	  /* Anonymous union type.  */
   1987 	  type = coff_alloc_type (cs->c_symnum);
   1988 	  TYPE_NAME (type) = NULL;
   1989 	  /* This used to set the tag to "<opaque>".  But I think
   1990 	     setting it to NULL is right, and the printing code can
   1991 	     print it as "union {...}".  */
   1992 	  TYPE_TAG_NAME (type) = NULL;
   1993 	  INIT_CPLUS_SPECIFIC (type);
   1994 	  TYPE_LENGTH (type) = 0;
   1995 	  TYPE_FIELDS (type) = 0;
   1996 	  TYPE_NFIELDS (type) = 0;
   1997 	}
   1998       else
   1999 	{
   2000 	  type = coff_read_struct_type (cs->c_symnum,
   2001 					aux->x_sym.x_misc.x_lnsz.x_size,
   2002 					aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
   2003 					objfile);
   2004 	}
   2005       TYPE_CODE (type) = TYPE_CODE_UNION;
   2006       return type;
   2007 
   2008     case T_ENUM:
   2009       if (cs->c_naux != 1)
   2010 	{
   2011 	  /* Anonymous enum type.  */
   2012 	  type = coff_alloc_type (cs->c_symnum);
   2013 	  TYPE_CODE (type) = TYPE_CODE_ENUM;
   2014 	  TYPE_NAME (type) = NULL;
   2015 	  /* This used to set the tag to "<opaque>".  But I think
   2016 	     setting it to NULL is right, and the printing code can
   2017 	     print it as "enum {...}".  */
   2018 	  TYPE_TAG_NAME (type) = NULL;
   2019 	  TYPE_LENGTH (type) = 0;
   2020 	  TYPE_FIELDS (type) = 0;
   2021 	  TYPE_NFIELDS (type) = 0;
   2022 	}
   2023       else
   2024 	{
   2025 	  type = coff_read_enum_type (cs->c_symnum,
   2026 				      aux->x_sym.x_misc.x_lnsz.x_size,
   2027 				      aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
   2028 				      objfile);
   2029 	}
   2030       return type;
   2031 
   2032     case T_MOE:
   2033       /* Shouldn't show up here.  */
   2034       break;
   2035 
   2036     case T_UCHAR:
   2037       return objfile_type (objfile)->builtin_unsigned_char;
   2038 
   2039     case T_USHORT:
   2040       return objfile_type (objfile)->builtin_unsigned_short;
   2041 
   2042     case T_UINT:
   2043       return objfile_type (objfile)->builtin_unsigned_int;
   2044 
   2045     case T_ULONG:
   2046       if (cs->c_sclass == C_FIELD
   2047 	  && aux->x_sym.x_misc.x_lnsz.x_size
   2048 	     > gdbarch_long_bit (gdbarch))
   2049 	return objfile_type (objfile)->builtin_unsigned_long_long;
   2050       else
   2051 	return objfile_type (objfile)->builtin_unsigned_long;
   2052     }
   2053   complaint (&symfile_complaints,
   2054 	     _("Unexpected type for symbol %s"), cs->c_name);
   2055   return objfile_type (objfile)->builtin_void;
   2056 }
   2057 
   2058 /* This page contains subroutines of read_type.  */
   2060 
   2061 /* Read the description of a structure (or union type) and return an
   2062    object describing the type.  */
   2063 
   2064 static struct type *
   2065 coff_read_struct_type (int index, int length, int lastsym,
   2066 		       struct objfile *objfile)
   2067 {
   2068   struct nextfield
   2069     {
   2070       struct nextfield *next;
   2071       struct field field;
   2072     };
   2073 
   2074   struct type *type;
   2075   struct nextfield *list = 0;
   2076   struct nextfield *new;
   2077   int nfields = 0;
   2078   int n;
   2079   char *name;
   2080   struct coff_symbol member_sym;
   2081   struct coff_symbol *ms = &member_sym;
   2082   struct internal_syment sub_sym;
   2083   union internal_auxent sub_aux;
   2084   int done = 0;
   2085 
   2086   type = coff_alloc_type (index);
   2087   TYPE_CODE (type) = TYPE_CODE_STRUCT;
   2088   INIT_CPLUS_SPECIFIC (type);
   2089   TYPE_LENGTH (type) = length;
   2090 
   2091   while (!done && symnum < lastsym && symnum < nlist_nsyms_global)
   2092     {
   2093       read_one_sym (ms, &sub_sym, &sub_aux);
   2094       name = ms->c_name;
   2095       name = EXTERNAL_NAME (name, objfile->obfd);
   2096 
   2097       switch (ms->c_sclass)
   2098 	{
   2099 	case C_MOS:
   2100 	case C_MOU:
   2101 
   2102 	  /* Get space to record the next field's data.  */
   2103 	  new = (struct nextfield *) alloca (sizeof (struct nextfield));
   2104 	  new->next = list;
   2105 	  list = new;
   2106 
   2107 	  /* Save the data.  */
   2108 	  list->field.name = obstack_copy0 (&objfile->objfile_obstack,
   2109 					    name, strlen (name));
   2110 	  FIELD_TYPE (list->field) = decode_type (ms, ms->c_type,
   2111 						  &sub_aux, objfile);
   2112 	  SET_FIELD_BITPOS (list->field, 8 * ms->c_value);
   2113 	  FIELD_BITSIZE (list->field) = 0;
   2114 	  nfields++;
   2115 	  break;
   2116 
   2117 	case C_FIELD:
   2118 
   2119 	  /* Get space to record the next field's data.  */
   2120 	  new = (struct nextfield *) alloca (sizeof (struct nextfield));
   2121 	  new->next = list;
   2122 	  list = new;
   2123 
   2124 	  /* Save the data.  */
   2125 	  list->field.name = obstack_copy0 (&objfile->objfile_obstack,
   2126 					    name, strlen (name));
   2127 	  FIELD_TYPE (list->field) = decode_type (ms, ms->c_type,
   2128 						  &sub_aux, objfile);
   2129 	  SET_FIELD_BITPOS (list->field, ms->c_value);
   2130 	  FIELD_BITSIZE (list->field) = sub_aux.x_sym.x_misc.x_lnsz.x_size;
   2131 	  nfields++;
   2132 	  break;
   2133 
   2134 	case C_EOS:
   2135 	  done = 1;
   2136 	  break;
   2137 	}
   2138     }
   2139   /* Now create the vector of fields, and record how big it is.  */
   2140 
   2141   TYPE_NFIELDS (type) = nfields;
   2142   TYPE_FIELDS (type) = (struct field *)
   2143     TYPE_ALLOC (type, sizeof (struct field) * nfields);
   2144 
   2145   /* Copy the saved-up fields into the field vector.  */
   2146 
   2147   for (n = nfields; list; list = list->next)
   2148     TYPE_FIELD (type, --n) = list->field;
   2149 
   2150   return type;
   2151 }
   2152 
   2153 /* Read a definition of an enumeration type,
   2155    and create and return a suitable type object.
   2156    Also defines the symbols that represent the values of the type.  */
   2157 
   2158 static struct type *
   2159 coff_read_enum_type (int index, int length, int lastsym,
   2160 		     struct objfile *objfile)
   2161 {
   2162   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   2163   struct symbol *sym;
   2164   struct type *type;
   2165   int nsyms = 0;
   2166   int done = 0;
   2167   struct pending **symlist;
   2168   struct coff_symbol member_sym;
   2169   struct coff_symbol *ms = &member_sym;
   2170   struct internal_syment sub_sym;
   2171   union internal_auxent sub_aux;
   2172   struct pending *osyms, *syms;
   2173   int o_nsyms;
   2174   int n;
   2175   char *name;
   2176   int unsigned_enum = 1;
   2177 
   2178   type = coff_alloc_type (index);
   2179   if (within_function)
   2180     symlist = &local_symbols;
   2181   else
   2182     symlist = &file_symbols;
   2183   osyms = *symlist;
   2184   o_nsyms = osyms ? osyms->nsyms : 0;
   2185 
   2186   while (!done && symnum < lastsym && symnum < nlist_nsyms_global)
   2187     {
   2188       read_one_sym (ms, &sub_sym, &sub_aux);
   2189       name = ms->c_name;
   2190       name = EXTERNAL_NAME (name, objfile->obfd);
   2191 
   2192       switch (ms->c_sclass)
   2193 	{
   2194 	case C_MOE:
   2195 	  sym = allocate_symbol (objfile);
   2196 
   2197 	  SYMBOL_SET_LINKAGE_NAME (sym,
   2198 				   obstack_copy0 (&objfile->objfile_obstack,
   2199 						  name, strlen (name)));
   2200 	  SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
   2201 	  SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
   2202 	  SYMBOL_VALUE (sym) = ms->c_value;
   2203 	  add_symbol_to_list (sym, symlist);
   2204 	  nsyms++;
   2205 	  break;
   2206 
   2207 	case C_EOS:
   2208 	  /* Sometimes the linker (on 386/ix 2.0.2 at least) screws
   2209 	     up the count of how many symbols to read.  So stop
   2210 	     on .eos.  */
   2211 	  done = 1;
   2212 	  break;
   2213 	}
   2214     }
   2215 
   2216   /* Now fill in the fields of the type-structure.  */
   2217 
   2218   if (length > 0)
   2219     TYPE_LENGTH (type) = length;
   2220   else /* Assume ints.  */
   2221     TYPE_LENGTH (type) = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
   2222   TYPE_CODE (type) = TYPE_CODE_ENUM;
   2223   TYPE_NFIELDS (type) = nsyms;
   2224   TYPE_FIELDS (type) = (struct field *)
   2225     TYPE_ALLOC (type, sizeof (struct field) * nsyms);
   2226 
   2227   /* Find the symbols for the values and put them into the type.
   2228      The symbols can be found in the symlist that we put them on
   2229      to cause them to be defined.  osyms contains the old value
   2230      of that symlist; everything up to there was defined by us.  */
   2231   /* Note that we preserve the order of the enum constants, so
   2232      that in something like "enum {FOO, LAST_THING=FOO}" we print
   2233      FOO, not LAST_THING.  */
   2234 
   2235   for (syms = *symlist, n = 0; syms; syms = syms->next)
   2236     {
   2237       int j = 0;
   2238 
   2239       if (syms == osyms)
   2240 	j = o_nsyms;
   2241       for (; j < syms->nsyms; j++, n++)
   2242 	{
   2243 	  struct symbol *xsym = syms->symbol[j];
   2244 
   2245 	  SYMBOL_TYPE (xsym) = type;
   2246 	  TYPE_FIELD_NAME (type, n) = SYMBOL_LINKAGE_NAME (xsym);
   2247 	  SET_FIELD_ENUMVAL (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym));
   2248 	  if (SYMBOL_VALUE (xsym) < 0)
   2249 	    unsigned_enum = 0;
   2250 	  TYPE_FIELD_BITSIZE (type, n) = 0;
   2251 	}
   2252       if (syms == osyms)
   2253 	break;
   2254     }
   2255 
   2256   if (unsigned_enum)
   2257     TYPE_UNSIGNED (type) = 1;
   2258 
   2259   return type;
   2260 }
   2261 
   2262 /* Register our ability to parse symbols for coff BFD files.  */
   2263 
   2264 static const struct sym_fns coff_sym_fns =
   2265 {
   2266   coff_new_init,		/* sym_new_init: init anything gbl to
   2267 				   entire symtab */
   2268   coff_symfile_init,		/* sym_init: read initial info, setup
   2269 				   for sym_read() */
   2270   coff_symfile_read,		/* sym_read: read a symbol file into
   2271 				   symtab */
   2272   NULL,				/* sym_read_psymbols */
   2273   coff_symfile_finish,		/* sym_finish: finished with file,
   2274 				   cleanup */
   2275   default_symfile_offsets,	/* sym_offsets: xlate external to
   2276 				   internal form */
   2277   default_symfile_segments,	/* sym_segments: Get segment
   2278 				   information from a file */
   2279   NULL,                         /* sym_read_linetable  */
   2280 
   2281   default_symfile_relocate,	/* sym_relocate: Relocate a debug
   2282 				   section.  */
   2283   NULL,				/* sym_probe_fns */
   2284   &psym_functions
   2285 };
   2286 
   2287 /* Free the per-objfile COFF data.  */
   2288 
   2289 static void
   2290 coff_free_info (struct objfile *objfile, void *arg)
   2291 {
   2292   xfree (arg);
   2293 }
   2294 
   2295 void
   2296 _initialize_coffread (void)
   2297 {
   2298   add_symtab_fns (bfd_target_coff_flavour, &coff_sym_fns);
   2299 
   2300   coff_objfile_data_key = register_objfile_data_with_cleanup (NULL,
   2301 							      coff_free_info);
   2302 
   2303   coff_register_index
   2304     = register_symbol_register_impl (LOC_REGISTER, &coff_register_funcs);
   2305 }
   2306