Home | History | Annotate | Line # | Download | only in gdb
mdebugread.c revision 1.6
      1 /* Read a symbol table in ECOFF format (Third-Eye).
      2 
      3    Copyright (C) 1986-2016 Free Software Foundation, Inc.
      4 
      5    Original version contributed by Alessandro Forin (af (at) cs.cmu.edu) at
      6    CMU.  Major work by Per Bothner, John Gilmore and Ian Lance Taylor
      7    at Cygnus Support.
      8 
      9    This file is part of GDB.
     10 
     11    This program is free software; you can redistribute it and/or modify
     12    it under the terms of the GNU General Public License as published by
     13    the Free Software Foundation; either version 3 of the License, or
     14    (at your option) any later version.
     15 
     16    This program is distributed in the hope that it will be useful,
     17    but WITHOUT ANY WARRANTY; without even the implied warranty of
     18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     19    GNU General Public License for more details.
     20 
     21    You should have received a copy of the GNU General Public License
     22    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     23 
     24 /* This module provides the function mdebug_build_psymtabs.  It reads
     25    ECOFF debugging information into partial symbol tables.  The
     26    debugging information is read from two structures.  A struct
     27    ecoff_debug_swap includes the sizes of each ECOFF structure and
     28    swapping routines; these are fixed for a particular target.  A
     29    struct ecoff_debug_info points to the debugging information for a
     30    particular object file.
     31 
     32    ECOFF symbol tables are mostly written in the byte order of the
     33    target machine.  However, one section of the table (the auxiliary
     34    symbol information) is written in the host byte order.  There is a
     35    bit in the other symbol info which describes which host byte order
     36    was used.  ECOFF thereby takes the trophy from Intel `b.out' for
     37    the most brain-dead adaptation of a file format to byte order.
     38 
     39    This module can read all four of the known byte-order combinations,
     40    on any type of host.  */
     41 
     42 #include "defs.h"
     43 #include "symtab.h"
     44 #include "gdbtypes.h"
     45 #include "gdbcore.h"
     46 #include "filenames.h"
     47 #include "objfiles.h"
     48 #include "gdb_obstack.h"
     49 #include "buildsym.h"
     50 #include "stabsread.h"
     51 #include "complaints.h"
     52 #include "demangle.h"
     53 #include "gdb-demangle.h"
     54 #include "block.h"
     55 #include "dictionary.h"
     56 #include "mdebugread.h"
     57 #include <sys/stat.h>
     58 #include "psympriv.h"
     59 #include "source.h"
     60 
     61 #include "bfd.h"
     62 
     63 #include "coff/ecoff.h"		/* COFF-like aspects of ecoff files.  */
     64 
     65 #include "libaout.h"		/* Private BFD a.out information.  */
     66 #include "aout/aout64.h"
     67 #include "aout/stab_gnu.h"	/* STABS information.  */
     68 
     69 #include "expression.h"
     70 
     71 extern void _initialize_mdebugread (void);
     72 
     73 /* Provide a way to test if we have both ECOFF and ELF symbol tables.
     74    We use this define in order to know whether we should override a
     75    symbol's ECOFF section with its ELF section.  This is necessary in
     76    case the symbol's ELF section could not be represented in ECOFF.  */
     77 #define ECOFF_IN_ELF(bfd) (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
     78 			   && bfd_get_section_by_name (bfd, ".mdebug") != NULL)
     79 
     80 /* The objfile we are currently reading.  */
     81 
     82 static struct objfile *mdebugread_objfile;
     83 
     84 
     85 
     87 /* We put a pointer to this structure in the read_symtab_private field
     88    of the psymtab.  */
     89 
     90 struct symloc
     91   {
     92     /* Index of the FDR that this psymtab represents.  */
     93     int fdr_idx;
     94     /* The BFD that the psymtab was created from.  */
     95     bfd *cur_bfd;
     96     const struct ecoff_debug_swap *debug_swap;
     97     struct ecoff_debug_info *debug_info;
     98     struct mdebug_pending **pending_list;
     99     /* Pointer to external symbols for this file.  */
    100     EXTR *extern_tab;
    101     /* Size of extern_tab.  */
    102     int extern_count;
    103     enum language pst_language;
    104   };
    105 
    106 #define PST_PRIVATE(p) ((struct symloc *)(p)->read_symtab_private)
    107 #define FDR_IDX(p) (PST_PRIVATE(p)->fdr_idx)
    108 #define CUR_BFD(p) (PST_PRIVATE(p)->cur_bfd)
    109 #define DEBUG_SWAP(p) (PST_PRIVATE(p)->debug_swap)
    110 #define DEBUG_INFO(p) (PST_PRIVATE(p)->debug_info)
    111 #define PENDING_LIST(p) (PST_PRIVATE(p)->pending_list)
    112 
    113 #define SC_IS_TEXT(sc) ((sc) == scText \
    114 		   || (sc) == scRConst \
    115           	   || (sc) == scInit \
    116           	   || (sc) == scFini)
    117 #define SC_IS_DATA(sc) ((sc) == scData \
    118 		   || (sc) == scSData \
    119 		   || (sc) == scRData \
    120 		   || (sc) == scPData \
    121 		   || (sc) == scXData)
    122 #define SC_IS_COMMON(sc) ((sc) == scCommon || (sc) == scSCommon)
    123 #define SC_IS_BSS(sc) ((sc) == scBss)
    124 #define SC_IS_SBSS(sc) ((sc) == scSBss)
    125 #define SC_IS_UNDEF(sc) ((sc) == scUndefined || (sc) == scSUndefined)
    126 
    127 /* Various complaints about symbol reading that don't abort the process.  */
    129 static void
    130 index_complaint (const char *arg1)
    131 {
    132   complaint (&symfile_complaints, _("bad aux index at symbol %s"), arg1);
    133 }
    134 
    135 static void
    136 unknown_ext_complaint (const char *arg1)
    137 {
    138   complaint (&symfile_complaints, _("unknown external symbol %s"), arg1);
    139 }
    140 
    141 static void
    142 basic_type_complaint (int arg1, const char *arg2)
    143 {
    144   complaint (&symfile_complaints, _("cannot map ECOFF basic type 0x%x for %s"),
    145 	     arg1, arg2);
    146 }
    147 
    148 static void
    149 bad_tag_guess_complaint (const char *arg1)
    150 {
    151   complaint (&symfile_complaints,
    152 	     _("guessed tag type of %s incorrectly"), arg1);
    153 }
    154 
    155 static void
    156 bad_rfd_entry_complaint (const char *arg1, int arg2, int arg3)
    157 {
    158   complaint (&symfile_complaints, _("bad rfd entry for %s: file %d, index %d"),
    159 	     arg1, arg2, arg3);
    160 }
    161 
    162 static void
    163 unexpected_type_code_complaint (const char *arg1)
    164 {
    165   complaint (&symfile_complaints, _("unexpected type code for %s"), arg1);
    166 }
    167 
    168 /* Macros and extra defs.  */
    169 
    170 /* Puns: hard to find whether -g was used and how.  */
    171 
    172 #define MIN_GLEVEL GLEVEL_0
    173 #define compare_glevel(a,b)					\
    174 	(((a) == GLEVEL_3) ? ((b) < GLEVEL_3) :			\
    175 	 ((b) == GLEVEL_3) ? -1 : (int)((b) - (a)))
    176 
    177 /* Things that really are local to this module.  */
    179 
    180 /* Remember what we deduced to be the source language of this psymtab.  */
    181 
    182 static enum language psymtab_language = language_unknown;
    183 
    184 /* Current BFD.  */
    185 
    186 static bfd *cur_bfd;
    187 
    188 /* How to parse debugging information for CUR_BFD.  */
    189 
    190 static const struct ecoff_debug_swap *debug_swap;
    191 
    192 /* Pointers to debugging information for CUR_BFD.  */
    193 
    194 static struct ecoff_debug_info *debug_info;
    195 
    196 /* Pointer to current file decriptor record, and its index.  */
    197 
    198 static FDR *cur_fdr;
    199 static int cur_fd;
    200 
    201 /* Index of current symbol.  */
    202 
    203 static int cur_sdx;
    204 
    205 /* Note how much "debuggable" this image is.  We would like
    206    to see at least one FDR with full symbols.  */
    207 
    208 static int max_gdbinfo;
    209 static int max_glevel;
    210 
    211 /* When examining .o files, report on undefined symbols.  */
    212 
    213 static int n_undef_symbols, n_undef_labels, n_undef_vars, n_undef_procs;
    214 
    215 /* Pseudo symbol to use when putting stabs into the symbol table.  */
    216 
    217 static char stabs_symbol[] = STABS_SYMBOL;
    218 
    219 /* Nonzero if we have seen ecoff debugging info for a file.  */
    220 
    221 static int found_ecoff_debugging_info;
    222 
    223 /* Forward declarations.  */
    224 
    225 static int upgrade_type (int, struct type **, int, union aux_ext *,
    226 			 int, char *);
    227 
    228 static void parse_partial_symbols (struct objfile *);
    229 
    230 static int has_opaque_xref (FDR *, SYMR *);
    231 
    232 static int cross_ref (int, union aux_ext *, struct type **, enum type_code,
    233 		      char **, int, char *);
    234 
    235 static struct symbol *new_symbol (char *);
    236 
    237 static struct type *new_type (char *);
    238 
    239 enum block_type { FUNCTION_BLOCK, NON_FUNCTION_BLOCK };
    240 
    241 static struct block *new_block (enum block_type);
    242 
    243 static struct compunit_symtab *new_symtab (const char *, int, struct objfile *);
    244 
    245 static struct linetable *new_linetable (int);
    246 
    247 static struct blockvector *new_bvect (int);
    248 
    249 static struct type *parse_type (int, union aux_ext *, unsigned int, int *,
    250 				int, char *);
    251 
    252 static struct symbol *mylookup_symbol (char *, const struct block *,
    253 				       domain_enum, enum address_class);
    254 
    255 static void sort_blocks (struct symtab *);
    256 
    257 static struct partial_symtab *new_psymtab (char *, struct objfile *);
    258 
    259 static void psymtab_to_symtab_1 (struct objfile *objfile,
    260 				 struct partial_symtab *, const char *);
    261 
    262 static void add_block (struct block *, struct symtab *);
    263 
    264 static void add_symbol (struct symbol *, struct symtab *, struct block *);
    265 
    266 static int add_line (struct linetable *, int, CORE_ADDR, int);
    267 
    268 static struct linetable *shrink_linetable (struct linetable *);
    269 
    270 static void handle_psymbol_enumerators (struct objfile *, FDR *, int,
    271 					CORE_ADDR);
    272 
    273 static char *mdebug_next_symbol_text (struct objfile *);
    274 
    275 /* Exported procedure: Builds a symtab from the partial symtab SELF.
    277    Restores the environment in effect when SELF was created, delegates
    278    most of the work to an ancillary procedure, and sorts
    279    and reorders the symtab list at the end.  SELF is not NULL.  */
    280 
    281 static void
    282 mdebug_read_symtab (struct partial_symtab *self, struct objfile *objfile)
    283 {
    284   if (info_verbose)
    285     {
    286       printf_filtered (_("Reading in symbols for %s..."), self->filename);
    287       gdb_flush (gdb_stdout);
    288     }
    289 
    290   next_symbol_text_func = mdebug_next_symbol_text;
    291 
    292   psymtab_to_symtab_1 (objfile, self, self->filename);
    293 
    294   /* Match with global symbols.  This only needs to be done once,
    295      after all of the symtabs and dependencies have been read in.  */
    296   scan_file_globals (objfile);
    297 
    298   if (info_verbose)
    299     printf_filtered (_("done.\n"));
    300 }
    301 
    302 /* File-level interface functions.  */
    304 
    305 /* Find a file descriptor given its index RF relative to a file CF.  */
    306 
    307 static FDR *
    308 get_rfd (int cf, int rf)
    309 {
    310   FDR *fdrs;
    311   FDR *f;
    312   RFDT rfd;
    313 
    314   fdrs = debug_info->fdr;
    315   f = fdrs + cf;
    316   /* Object files do not have the RFD table, all refs are absolute.  */
    317   if (f->rfdBase == 0)
    318     return fdrs + rf;
    319   (*debug_swap->swap_rfd_in) (cur_bfd,
    320 			      ((char *) debug_info->external_rfd
    321 			       + ((f->rfdBase + rf)
    322 				  * debug_swap->external_rfd_size)),
    323 			      &rfd);
    324   return fdrs + rfd;
    325 }
    326 
    327 /* Return a safer print NAME for a file descriptor.  */
    328 
    329 static char *
    330 fdr_name (FDR *f)
    331 {
    332   if (f->rss == -1)
    333     return "<stripped file>";
    334   if (f->rss == 0)
    335     return "<NFY>";
    336   return debug_info->ss + f->issBase + f->rss;
    337 }
    338 
    339 
    340 /* Read in and parse the symtab of the file OBJFILE.  Symbols from
    341    different sections are relocated via the SECTION_OFFSETS.  */
    342 
    343 void
    344 mdebug_build_psymtabs (struct objfile *objfile,
    345 		       const struct ecoff_debug_swap *swap,
    346 		       struct ecoff_debug_info *info)
    347 {
    348   cur_bfd = objfile->obfd;
    349   debug_swap = swap;
    350   debug_info = info;
    351 
    352   stabsread_new_init ();
    353   buildsym_new_init ();
    354   free_header_files ();
    355   init_header_files ();
    356 
    357   /* Make sure all the FDR information is swapped in.  */
    358   if (info->fdr == (FDR *) NULL)
    359     {
    360       char *fdr_src;
    361       char *fdr_end;
    362       FDR *fdr_ptr;
    363 
    364       info->fdr = (FDR *) obstack_alloc (&objfile->objfile_obstack,
    365 					 (info->symbolic_header.ifdMax
    366 					  * sizeof (FDR)));
    367       fdr_src = (char *) info->external_fdr;
    368       fdr_end = (fdr_src
    369 		 + info->symbolic_header.ifdMax * swap->external_fdr_size);
    370       fdr_ptr = info->fdr;
    371       for (; fdr_src < fdr_end; fdr_src += swap->external_fdr_size, fdr_ptr++)
    372 	(*swap->swap_fdr_in) (objfile->obfd, fdr_src, fdr_ptr);
    373     }
    374 
    375   parse_partial_symbols (objfile);
    376 
    377 #if 0
    378   /* Check to make sure file was compiled with -g.  If not, warn the
    379      user of this limitation.  */
    380   if (compare_glevel (max_glevel, GLEVEL_2) < 0)
    381     {
    382       if (max_gdbinfo == 0)
    383 	printf_unfiltered (_("\n%s not compiled with -g, "
    384 			     "debugging support is limited.\n"),
    385 			   objfile->name);
    386       printf_unfiltered (_("You should compile with -g2 or "
    387 			   "-g3 for best debugging support.\n"));
    388       gdb_flush (gdb_stdout);
    389     }
    390 #endif
    391 }
    392 
    393 /* Local utilities */
    395 
    396 /* Map of FDR indexes to partial symtabs.  */
    397 
    398 struct pst_map
    399 {
    400   struct partial_symtab *pst;	/* the psymtab proper */
    401   long n_globals;		/* exported globals (external symbols) */
    402   long globals_offset;		/* cumulative */
    403 };
    404 
    405 
    406 /* Utility stack, used to nest procedures and blocks properly.
    407    It is a doubly linked list, to avoid too many alloc/free.
    408    Since we might need it quite a few times it is NOT deallocated
    409    after use.  */
    410 
    411 static struct parse_stack
    412   {
    413     struct parse_stack *next, *prev;
    414     struct symtab *cur_st;	/* Current symtab.  */
    415     struct block *cur_block;	/* Block in it.  */
    416 
    417     /* What are we parsing.  stFile, or stBlock are for files and
    418        blocks.  stProc or stStaticProc means we have seen the start of a
    419        procedure, but not the start of the block within in.  When we see
    420        the start of that block, we change it to stNil, without pushing a
    421        new block, i.e. stNil means both a procedure and a block.  */
    422 
    423     int blocktype;
    424 
    425     struct type *cur_type;	/* Type we parse fields for.  */
    426     int cur_field;		/* Field number in cur_type.  */
    427     CORE_ADDR procadr;		/* Start addres of this procedure.  */
    428     int numargs;		/* Its argument count.  */
    429   }
    430 
    431  *top_stack;			/* Top stack ptr */
    432 
    433 
    434 /* Enter a new lexical context.  */
    435 
    436 static void
    437 push_parse_stack (void)
    438 {
    439   struct parse_stack *newobj;
    440 
    441   /* Reuse frames if possible.  */
    442   if (top_stack && top_stack->prev)
    443     newobj = top_stack->prev;
    444   else
    445     newobj = XCNEW (struct parse_stack);
    446   /* Initialize new frame with previous content.  */
    447   if (top_stack)
    448     {
    449       struct parse_stack *prev = newobj->prev;
    450 
    451       *newobj = *top_stack;
    452       top_stack->prev = newobj;
    453       newobj->prev = prev;
    454       newobj->next = top_stack;
    455     }
    456   top_stack = newobj;
    457 }
    458 
    459 /* Exit a lexical context.  */
    460 
    461 static void
    462 pop_parse_stack (void)
    463 {
    464   if (!top_stack)
    465     return;
    466   if (top_stack->next)
    467     top_stack = top_stack->next;
    468 }
    469 
    470 
    471 /* Cross-references might be to things we haven't looked at
    472    yet, e.g. type references.  To avoid too many type
    473    duplications we keep a quick fixup table, an array
    474    of lists of references indexed by file descriptor.  */
    475 
    476 struct mdebug_pending
    477 {
    478   struct mdebug_pending *next;	/* link */
    479   char *s;			/* the unswapped symbol */
    480   struct type *t;		/* its partial type descriptor */
    481 };
    482 
    483 
    484 /* The pending information is kept for an entire object file.  We
    485    allocate the pending information table when we create the partial
    486    symbols, and we store a pointer to the single table in each
    487    psymtab.  */
    488 
    489 static struct mdebug_pending **pending_list;
    490 
    491 /* Check whether we already saw symbol SH in file FH.  */
    492 
    493 static struct mdebug_pending *
    494 is_pending_symbol (FDR *fh, char *sh)
    495 {
    496   int f_idx = fh - debug_info->fdr;
    497   struct mdebug_pending *p;
    498 
    499   /* Linear search is ok, list is typically no more than 10 deep.  */
    500   for (p = pending_list[f_idx]; p; p = p->next)
    501     if (p->s == sh)
    502       break;
    503   return p;
    504 }
    505 
    506 /* Add a new symbol SH of type T.  */
    507 
    508 static void
    509 add_pending (FDR *fh, char *sh, struct type *t)
    510 {
    511   int f_idx = fh - debug_info->fdr;
    512   struct mdebug_pending *p = is_pending_symbol (fh, sh);
    513 
    514   /* Make sure we do not make duplicates.  */
    515   if (!p)
    516     {
    517       p = ((struct mdebug_pending *)
    518 	   obstack_alloc (&mdebugread_objfile->objfile_obstack,
    519 			  sizeof (struct mdebug_pending)));
    520       p->s = sh;
    521       p->t = t;
    522       p->next = pending_list[f_idx];
    523       pending_list[f_idx] = p;
    524     }
    525 }
    526 
    527 
    529 /* Parsing Routines proper.  */
    530 
    531 static void
    532 reg_value_complaint (int regnum, int num_regs, const char *sym)
    533 {
    534   complaint (&symfile_complaints,
    535 	     _("bad register number %d (max %d) in symbol %s"),
    536              regnum, num_regs - 1, sym);
    537 }
    538 
    539 /* Parse a single symbol.  Mostly just make up a GDB symbol for it.
    540    For blocks, procedures and types we open a new lexical context.
    541    This is basically just a big switch on the symbol's type.  Argument
    542    AX is the base pointer of aux symbols for this file (fh->iauxBase).
    543    EXT_SH points to the unswapped symbol, which is needed for struct,
    544    union, etc., types; it is NULL for an EXTR.  BIGEND says whether
    545    aux symbols are big-endian or little-endian.  Return count of
    546    SYMR's handled (normally one).  */
    547 
    548 static int
    549 mdebug_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
    550 {
    551   int regno = gdbarch_ecoff_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym));
    552 
    553   if (regno < 0
    554       || regno >= (gdbarch_num_regs (gdbarch)
    555 		   + gdbarch_num_pseudo_regs (gdbarch)))
    556     {
    557       reg_value_complaint (regno,
    558 			   gdbarch_num_regs (gdbarch)
    559 			     + gdbarch_num_pseudo_regs (gdbarch),
    560 			   SYMBOL_PRINT_NAME (sym));
    561 
    562       regno = gdbarch_sp_regnum (gdbarch); /* Known safe, though useless.  */
    563     }
    564 
    565   return regno;
    566 }
    567 
    568 static const struct symbol_register_ops mdebug_register_funcs = {
    569   mdebug_reg_to_regnum
    570 };
    571 
    572 /* The "aclass" indices for computed symbols.  */
    573 
    574 static int mdebug_register_index;
    575 static int mdebug_regparm_index;
    576 
    577 /* Common code for symbols describing data.  */
    578 
    579 static void
    580 add_data_symbol (SYMR *sh, union aux_ext *ax, int bigend,
    581 		 struct symbol *s, int aclass_index, struct block *b,
    582 		 struct objfile *objfile, char *name)
    583 {
    584   SYMBOL_DOMAIN (s) = VAR_DOMAIN;
    585   SYMBOL_ACLASS_INDEX (s) = aclass_index;
    586   add_symbol (s, top_stack->cur_st, b);
    587 
    588   /* Type could be missing if file is compiled without debugging info.  */
    589   if (SC_IS_UNDEF (sh->sc)
    590       || sh->sc == scNil || sh->index == indexNil)
    591     SYMBOL_TYPE (s) = objfile_type (objfile)->nodebug_data_symbol;
    592   else
    593     SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
    594   /* Value of a data symbol is its memory address.  */
    595 }
    596 
    597 static int
    598 parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
    599 	      struct section_offsets *section_offsets, struct objfile *objfile)
    600 {
    601   struct gdbarch *gdbarch = get_objfile_arch (objfile);
    602   const bfd_size_type external_sym_size = debug_swap->external_sym_size;
    603   void (*const swap_sym_in) (bfd *, void *, SYMR *) = debug_swap->swap_sym_in;
    604   char *name;
    605   struct symbol *s;
    606   struct block *b;
    607   struct mdebug_pending *pend;
    608   struct type *t;
    609   struct field *f;
    610   int count = 1;
    611   TIR tir;
    612   long svalue = sh->value;
    613   int bitsize;
    614 
    615   if (ext_sh == (char *) NULL)
    616     name = debug_info->ssext + sh->iss;
    617   else
    618     name = debug_info->ss + cur_fdr->issBase + sh->iss;
    619 
    620   switch (sh->sc)
    621     {
    622     case scText:
    623     case scRConst:
    624       /* Do not relocate relative values.
    625          The value of a stEnd symbol is the displacement from the
    626          corresponding start symbol value.
    627          The value of a stBlock symbol is the displacement from the
    628          procedure address.  */
    629       if (sh->st != stEnd && sh->st != stBlock)
    630 	sh->value += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
    631       break;
    632     case scData:
    633     case scSData:
    634     case scRData:
    635     case scPData:
    636     case scXData:
    637       sh->value += ANOFFSET (section_offsets, SECT_OFF_DATA (objfile));
    638       break;
    639     case scBss:
    640     case scSBss:
    641       sh->value += ANOFFSET (section_offsets, SECT_OFF_BSS (objfile));
    642       break;
    643     }
    644 
    645   switch (sh->st)
    646     {
    647     case stNil:
    648       break;
    649 
    650     case stGlobal:		/* External symbol, goes into global block.  */
    651       b = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (top_stack->cur_st),
    652 			     GLOBAL_BLOCK);
    653       s = new_symbol (name);
    654       SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
    655       add_data_symbol (sh, ax, bigend, s, LOC_STATIC, b, objfile, name);
    656       break;
    657 
    658     case stStatic:		/* Static data, goes into current block.  */
    659       b = top_stack->cur_block;
    660       s = new_symbol (name);
    661       if (SC_IS_COMMON (sh->sc))
    662 	{
    663 	  /* It is a FORTRAN common block.  At least for SGI Fortran the
    664 	     address is not in the symbol; we need to fix it later in
    665 	     scan_file_globals.  */
    666 	  int bucket = hashname (SYMBOL_LINKAGE_NAME (s));
    667 	  SYMBOL_VALUE_CHAIN (s) = global_sym_chain[bucket];
    668 	  global_sym_chain[bucket] = s;
    669 	}
    670       else
    671 	SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
    672       add_data_symbol (sh, ax, bigend, s, LOC_STATIC, b, objfile, name);
    673       break;
    674 
    675     case stLocal:		/* Local variable, goes into current block.  */
    676       b = top_stack->cur_block;
    677       s = new_symbol (name);
    678       SYMBOL_VALUE (s) = svalue;
    679       if (sh->sc == scRegister)
    680 	add_data_symbol (sh, ax, bigend, s, mdebug_register_index,
    681 			 b, objfile, name);
    682       else
    683 	add_data_symbol (sh, ax, bigend, s, LOC_LOCAL,
    684 			 b, objfile, name);
    685       break;
    686 
    687     case stParam:		/* Arg to procedure, goes into current
    688 				   block.  */
    689       max_gdbinfo++;
    690       found_ecoff_debugging_info = 1;
    691       top_stack->numargs++;
    692 
    693       /* Special GNU C++ name.  */
    694       if (is_cplus_marker (name[0]) && name[1] == 't' && name[2] == 0)
    695 	name = "this";		/* FIXME, not alloc'd in obstack.  */
    696       s = new_symbol (name);
    697 
    698       SYMBOL_DOMAIN (s) = VAR_DOMAIN;
    699       SYMBOL_IS_ARGUMENT (s) = 1;
    700       switch (sh->sc)
    701 	{
    702 	case scRegister:
    703 	  /* Pass by value in register.  */
    704 	  SYMBOL_ACLASS_INDEX (s) = mdebug_register_index;
    705 	  break;
    706 	case scVar:
    707 	  /* Pass by reference on stack.  */
    708 	  SYMBOL_ACLASS_INDEX (s) = LOC_REF_ARG;
    709 	  break;
    710 	case scVarRegister:
    711 	  /* Pass by reference in register.  */
    712 	  SYMBOL_ACLASS_INDEX (s) = mdebug_regparm_index;
    713 	  break;
    714 	default:
    715 	  /* Pass by value on stack.  */
    716 	  SYMBOL_ACLASS_INDEX (s) = LOC_ARG;
    717 	  break;
    718 	}
    719       SYMBOL_VALUE (s) = svalue;
    720       SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
    721       add_symbol (s, top_stack->cur_st, top_stack->cur_block);
    722       break;
    723 
    724     case stLabel:		/* label, goes into current block.  */
    725       s = new_symbol (name);
    726       SYMBOL_DOMAIN (s) = VAR_DOMAIN;	/* So that it can be used */
    727       SYMBOL_ACLASS_INDEX (s) = LOC_LABEL;	/* but not misused.  */
    728       SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
    729       SYMBOL_TYPE (s) = objfile_type (objfile)->builtin_int;
    730       add_symbol (s, top_stack->cur_st, top_stack->cur_block);
    731       break;
    732 
    733     case stProc:	/* Procedure, usually goes into global block.  */
    734     case stStaticProc:	/* Static procedure, goes into current block.  */
    735       /* For stProc symbol records, we need to check the storage class
    736          as well, as only (stProc, scText) entries represent "real"
    737          procedures - See the Compaq document titled "Object File /
    738          Symbol Table Format Specification" for more information.
    739          If the storage class is not scText, we discard the whole block
    740          of symbol records for this stProc.  */
    741       if (sh->st == stProc && sh->sc != scText)
    742         {
    743           char *ext_tsym = ext_sh;
    744           int keep_counting = 1;
    745           SYMR tsym;
    746 
    747           while (keep_counting)
    748             {
    749               ext_tsym += external_sym_size;
    750               (*swap_sym_in) (cur_bfd, ext_tsym, &tsym);
    751               count++;
    752               switch (tsym.st)
    753                 {
    754                   case stParam:
    755                     break;
    756                   case stEnd:
    757                     keep_counting = 0;
    758                     break;
    759                   default:
    760                     complaint (&symfile_complaints,
    761                                _("unknown symbol type 0x%x"), sh->st);
    762                     break;
    763                 }
    764             }
    765           break;
    766         }
    767       s = new_symbol (name);
    768       SYMBOL_DOMAIN (s) = VAR_DOMAIN;
    769       SYMBOL_ACLASS_INDEX (s) = LOC_BLOCK;
    770       /* Type of the return value.  */
    771       if (SC_IS_UNDEF (sh->sc) || sh->sc == scNil)
    772 	t = objfile_type (objfile)->builtin_int;
    773       else
    774 	{
    775 	  t = parse_type (cur_fd, ax, sh->index + 1, 0, bigend, name);
    776 	  if (strcmp (name, "malloc") == 0
    777 	      && TYPE_CODE (t) == TYPE_CODE_VOID)
    778 	    {
    779 	      /* I don't know why, but, at least under Alpha GNU/Linux,
    780 	         when linking against a malloc without debugging
    781 	         symbols, its read as a function returning void---this
    782 	         is bad because it means we cannot call functions with
    783 	         string arguments interactively; i.e., "call
    784 	         printf("howdy\n")" would fail with the error message
    785 	         "program has no memory available".  To avoid this, we
    786 	         patch up the type and make it void*
    787 	         instead. (davidm (at) azstarnet.com).  */
    788 	      t = make_pointer_type (t, NULL);
    789 	    }
    790 	}
    791       b = top_stack->cur_block;
    792       if (sh->st == stProc)
    793 	{
    794 	  const struct blockvector *bv
    795 	    = SYMTAB_BLOCKVECTOR (top_stack->cur_st);
    796 
    797 	  /* The next test should normally be true, but provides a
    798 	     hook for nested functions (which we don't want to make
    799 	     global).  */
    800 	  if (b == BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK))
    801 	    b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
    802 	  /* Irix 5 sometimes has duplicate names for the same
    803 	     function.  We want to add such names up at the global
    804 	     level, not as a nested function.  */
    805 	  else if (sh->value == top_stack->procadr)
    806 	    b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
    807 	}
    808       add_symbol (s, top_stack->cur_st, b);
    809 
    810       /* Make a type for the procedure itself.  */
    811       SYMBOL_TYPE (s) = lookup_function_type (t);
    812 
    813       /* All functions in C++ have prototypes.  For C we don't have enough
    814          information in the debug info.  */
    815       if (SYMBOL_LANGUAGE (s) == language_cplus)
    816 	TYPE_PROTOTYPED (SYMBOL_TYPE (s)) = 1;
    817 
    818       /* Create and enter a new lexical context.  */
    819       b = new_block (FUNCTION_BLOCK);
    820       SYMBOL_BLOCK_VALUE (s) = b;
    821       BLOCK_FUNCTION (b) = s;
    822       BLOCK_START (b) = BLOCK_END (b) = sh->value;
    823       BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
    824       add_block (b, top_stack->cur_st);
    825 
    826       /* Not if we only have partial info.  */
    827       if (SC_IS_UNDEF (sh->sc) || sh->sc == scNil)
    828 	break;
    829 
    830       push_parse_stack ();
    831       top_stack->cur_block = b;
    832       top_stack->blocktype = sh->st;
    833       top_stack->cur_type = SYMBOL_TYPE (s);
    834       top_stack->cur_field = -1;
    835       top_stack->procadr = sh->value;
    836       top_stack->numargs = 0;
    837       break;
    838 
    839       /* Beginning of code for structure, union, and enum definitions.
    840          They all share a common set of local variables, defined here.  */
    841       {
    842 	enum type_code type_code;
    843 	char *ext_tsym;
    844 	int nfields;
    845 	long max_value;
    846 	struct field *f;
    847 
    848     case stStruct:		/* Start a block defining a struct type.  */
    849 	type_code = TYPE_CODE_STRUCT;
    850 	goto structured_common;
    851 
    852     case stUnion:		/* Start a block defining a union type.  */
    853 	type_code = TYPE_CODE_UNION;
    854 	goto structured_common;
    855 
    856     case stEnum:		/* Start a block defining an enum type.  */
    857 	type_code = TYPE_CODE_ENUM;
    858 	goto structured_common;
    859 
    860     case stBlock:		/* Either a lexical block, or some type.  */
    861 	if (sh->sc != scInfo && !SC_IS_COMMON (sh->sc))
    862 	  goto case_stBlock_code;	/* Lexical block */
    863 
    864 	type_code = TYPE_CODE_UNDEF;	/* We have a type.  */
    865 
    866 	/* Common code for handling struct, union, enum, and/or as-yet-
    867 	   unknown-type blocks of info about structured data.  `type_code'
    868 	   has been set to the proper TYPE_CODE, if we know it.  */
    869       structured_common:
    870 	found_ecoff_debugging_info = 1;
    871 	push_parse_stack ();
    872 	top_stack->blocktype = stBlock;
    873 
    874 	/* First count the number of fields and the highest value.  */
    875 	nfields = 0;
    876 	max_value = 0;
    877 	for (ext_tsym = ext_sh + external_sym_size;
    878 	     ;
    879 	     ext_tsym += external_sym_size)
    880 	  {
    881 	    SYMR tsym;
    882 
    883 	    (*swap_sym_in) (cur_bfd, ext_tsym, &tsym);
    884 
    885 	    switch (tsym.st)
    886 	      {
    887 	      case stEnd:
    888                 /* C++ encodes class types as structures where there the
    889                    methods are encoded as stProc.  The scope of stProc
    890                    symbols also ends with stEnd, thus creating a risk of
    891                    taking the wrong stEnd symbol record as the end of
    892                    the current struct, which would cause GDB to undercount
    893                    the real number of fields in this struct.  To make sure
    894                    we really reached the right stEnd symbol record, we
    895                    check the associated name, and match it against the
    896                    struct name.  Since method names are mangled while
    897                    the class name is not, there is no risk of having a
    898                    method whose name is identical to the class name
    899                    (in particular constructor method names are different
    900                    from the class name).  There is therefore no risk that
    901                    this check stops the count on the StEnd of a method.
    902 
    903 		   Also, assume that we're really at the end when tsym.iss
    904 		   is 0 (issNull).  */
    905                 if (tsym.iss == issNull
    906 		    || strcmp (debug_info->ss + cur_fdr->issBase + tsym.iss,
    907                                name) == 0)
    908                   goto end_of_fields;
    909                 break;
    910 
    911 	      case stMember:
    912 		if (nfields == 0 && type_code == TYPE_CODE_UNDEF)
    913 		  {
    914 		    /* If the type of the member is Nil (or Void),
    915 		       without qualifiers, assume the tag is an
    916 		       enumeration.
    917 		       Alpha cc -migrate enums are recognized by a zero
    918 		       index and a zero symbol value.
    919 		       DU 4.0 cc enums are recognized by a member type of
    920 		       btEnum without qualifiers and a zero symbol value.  */
    921 		    if (tsym.index == indexNil
    922 			|| (tsym.index == 0 && sh->value == 0))
    923 		      type_code = TYPE_CODE_ENUM;
    924 		    else
    925 		      {
    926 			(*debug_swap->swap_tir_in) (bigend,
    927 						    &ax[tsym.index].a_ti,
    928 						    &tir);
    929 			if ((tir.bt == btNil || tir.bt == btVoid
    930 			     || (tir.bt == btEnum && sh->value == 0))
    931 			    && tir.tq0 == tqNil)
    932 			  type_code = TYPE_CODE_ENUM;
    933 		      }
    934 		  }
    935 		nfields++;
    936 		if (tsym.value > max_value)
    937 		  max_value = tsym.value;
    938 		break;
    939 
    940 	      case stBlock:
    941 	      case stUnion:
    942 	      case stEnum:
    943 	      case stStruct:
    944 		{
    945 #if 0
    946 		  /* This is a no-op; is it trying to tell us something
    947 		     we should be checking?  */
    948 		  if (tsym.sc == scVariant);	/*UNIMPLEMENTED */
    949 #endif
    950 		  if (tsym.index != 0)
    951 		    {
    952 		      /* This is something like a struct within a
    953 		         struct.  Skip over the fields of the inner
    954 		         struct.  The -1 is because the for loop will
    955 		         increment ext_tsym.  */
    956 		      ext_tsym = ((char *) debug_info->external_sym
    957 				  + ((cur_fdr->isymBase + tsym.index - 1)
    958 				     * external_sym_size));
    959 		    }
    960 		}
    961 		break;
    962 
    963 	      case stTypedef:
    964 		/* mips cc puts out a typedef for struct x if it is not yet
    965 		   defined when it encounters
    966 		   struct y { struct x *xp; };
    967 		   Just ignore it.  */
    968 		break;
    969 
    970 	      case stIndirect:
    971 		/* Irix5 cc puts out a stIndirect for struct x if it is not
    972 		   yet defined when it encounters
    973 		   struct y { struct x *xp; };
    974 		   Just ignore it.  */
    975 		break;
    976 
    977 	      default:
    978 		complaint (&symfile_complaints,
    979 			   _("declaration block contains "
    980 			     "unhandled symbol type %d"),
    981 			   tsym.st);
    982 	      }
    983 	  }
    984       end_of_fields:
    985 
    986 	/* In an stBlock, there is no way to distinguish structs,
    987 	   unions, and enums at this point.  This is a bug in the
    988 	   original design (that has been fixed with the recent
    989 	   addition of the stStruct, stUnion, and stEnum symbol
    990 	   types.)  The way you can tell is if/when you see a variable
    991 	   or field of that type.  In that case the variable's type
    992 	   (in the AUX table) says if the type is struct, union, or
    993 	   enum, and points back to the stBlock here.  So you can
    994 	   patch the tag kind up later - but only if there actually is
    995 	   a variable or field of that type.
    996 
    997 	   So until we know for sure, we will guess at this point.
    998 	   The heuristic is:
    999 	   If the first member has index==indexNil or a void type,
   1000 	   assume we have an enumeration.
   1001 	   Otherwise, if there is more than one member, and all
   1002 	   the members have offset 0, assume we have a union.
   1003 	   Otherwise, assume we have a struct.
   1004 
   1005 	   The heuristic could guess wrong in the case of of an
   1006 	   enumeration with no members or a union with one (or zero)
   1007 	   members, or when all except the last field of a struct have
   1008 	   width zero.  These are uncommon and/or illegal situations,
   1009 	   and in any case guessing wrong probably doesn't matter
   1010 	   much.
   1011 
   1012 	   But if we later do find out we were wrong, we fixup the tag
   1013 	   kind.  Members of an enumeration must be handled
   1014 	   differently from struct/union fields, and that is harder to
   1015 	   patch up, but luckily we shouldn't need to.  (If there are
   1016 	   any enumeration members, we can tell for sure it's an enum
   1017 	   here.)  */
   1018 
   1019 	if (type_code == TYPE_CODE_UNDEF)
   1020 	  {
   1021 	    if (nfields > 1 && max_value == 0)
   1022 	      type_code = TYPE_CODE_UNION;
   1023 	    else
   1024 	      type_code = TYPE_CODE_STRUCT;
   1025 	  }
   1026 
   1027 	/* Create a new type or use the pending type.  */
   1028 	pend = is_pending_symbol (cur_fdr, ext_sh);
   1029 	if (pend == (struct mdebug_pending *) NULL)
   1030 	  {
   1031 	    t = new_type (NULL);
   1032 	    add_pending (cur_fdr, ext_sh, t);
   1033 	  }
   1034 	else
   1035 	  t = pend->t;
   1036 
   1037 	/* Do not set the tag name if it is a compiler generated tag name
   1038 	   (.Fxx or .xxfake or empty) for unnamed struct/union/enums.
   1039 	   Alpha cc puts out an sh->iss of zero for those.  */
   1040 	if (sh->iss == 0 || name[0] == '.' || name[0] == '\0')
   1041 	  TYPE_TAG_NAME (t) = NULL;
   1042 	else
   1043 	  TYPE_TAG_NAME (t) = obconcat (&mdebugread_objfile->objfile_obstack,
   1044 					name, (char *) NULL);
   1045 
   1046 	TYPE_CODE (t) = type_code;
   1047 	TYPE_LENGTH (t) = sh->value;
   1048 	TYPE_NFIELDS (t) = nfields;
   1049 	TYPE_FIELDS (t) = f = ((struct field *)
   1050 			       TYPE_ALLOC (t,
   1051 					   nfields * sizeof (struct field)));
   1052 
   1053 	if (type_code == TYPE_CODE_ENUM)
   1054 	  {
   1055 	    int unsigned_enum = 1;
   1056 
   1057 	    /* This is a non-empty enum.  */
   1058 
   1059 	    /* DEC c89 has the number of enumerators in the sh.value field,
   1060 	       not the type length, so we have to compensate for that
   1061 	       incompatibility quirk.
   1062 	       This might do the wrong thing for an enum with one or two
   1063 	       enumerators and gcc -gcoff -fshort-enums, but these cases
   1064 	       are hopefully rare enough.
   1065 	       Alpha cc -migrate has a sh.value field of zero, we adjust
   1066 	       that too.  */
   1067 	    if (TYPE_LENGTH (t) == TYPE_NFIELDS (t)
   1068 		|| TYPE_LENGTH (t) == 0)
   1069 	      TYPE_LENGTH (t) = gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT;
   1070 	    for (ext_tsym = ext_sh + external_sym_size;
   1071 		 ;
   1072 		 ext_tsym += external_sym_size)
   1073 	      {
   1074 		SYMR tsym;
   1075 		struct symbol *enum_sym;
   1076 
   1077 		(*swap_sym_in) (cur_bfd, ext_tsym, &tsym);
   1078 
   1079 		if (tsym.st != stMember)
   1080 		  break;
   1081 
   1082 		SET_FIELD_ENUMVAL (*f, tsym.value);
   1083 		FIELD_TYPE (*f) = t;
   1084 		FIELD_NAME (*f) = debug_info->ss + cur_fdr->issBase + tsym.iss;
   1085 		FIELD_BITSIZE (*f) = 0;
   1086 
   1087 		enum_sym = allocate_symbol (mdebugread_objfile);
   1088 		SYMBOL_SET_LINKAGE_NAME
   1089 		  (enum_sym,
   1090 		   (char *) obstack_copy0 (&mdebugread_objfile->objfile_obstack,
   1091 					   f->name, strlen (f->name)));
   1092 		SYMBOL_ACLASS_INDEX (enum_sym) = LOC_CONST;
   1093 		SYMBOL_TYPE (enum_sym) = t;
   1094 		SYMBOL_DOMAIN (enum_sym) = VAR_DOMAIN;
   1095 		SYMBOL_VALUE (enum_sym) = tsym.value;
   1096 		if (SYMBOL_VALUE (enum_sym) < 0)
   1097 		  unsigned_enum = 0;
   1098 		add_symbol (enum_sym, top_stack->cur_st, top_stack->cur_block);
   1099 
   1100 		/* Skip the stMembers that we've handled.  */
   1101 		count++;
   1102 		f++;
   1103 	      }
   1104 	    if (unsigned_enum)
   1105 	      TYPE_UNSIGNED (t) = 1;
   1106 	  }
   1107 	/* Make this the current type.  */
   1108 	top_stack->cur_type = t;
   1109 	top_stack->cur_field = 0;
   1110 
   1111 	/* Do not create a symbol for alpha cc unnamed structs.  */
   1112 	if (sh->iss == 0)
   1113 	  break;
   1114 
   1115 	/* gcc puts out an empty struct for an opaque struct definitions,
   1116 	   do not create a symbol for it either.  */
   1117 	if (TYPE_NFIELDS (t) == 0)
   1118 	  {
   1119 	    TYPE_STUB (t) = 1;
   1120 	    break;
   1121 	  }
   1122 
   1123 	s = new_symbol (name);
   1124 	SYMBOL_DOMAIN (s) = STRUCT_DOMAIN;
   1125 	SYMBOL_ACLASS_INDEX (s) = LOC_TYPEDEF;
   1126 	SYMBOL_VALUE (s) = 0;
   1127 	SYMBOL_TYPE (s) = t;
   1128 	add_symbol (s, top_stack->cur_st, top_stack->cur_block);
   1129 	break;
   1130 
   1131 	/* End of local variables shared by struct, union, enum, and
   1132 	   block (as yet unknown struct/union/enum) processing.  */
   1133       }
   1134 
   1135     case_stBlock_code:
   1136       found_ecoff_debugging_info = 1;
   1137       /* Beginnning of (code) block.  Value of symbol
   1138          is the displacement from procedure start.  */
   1139       push_parse_stack ();
   1140 
   1141       /* Do not start a new block if this is the outermost block of a
   1142          procedure.  This allows the LOC_BLOCK symbol to point to the
   1143          block with the local variables, so funcname::var works.  */
   1144       if (top_stack->blocktype == stProc
   1145 	  || top_stack->blocktype == stStaticProc)
   1146 	{
   1147 	  top_stack->blocktype = stNil;
   1148 	  break;
   1149 	}
   1150 
   1151       top_stack->blocktype = stBlock;
   1152       b = new_block (NON_FUNCTION_BLOCK);
   1153       BLOCK_START (b) = sh->value + top_stack->procadr;
   1154       BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
   1155       top_stack->cur_block = b;
   1156       add_block (b, top_stack->cur_st);
   1157       break;
   1158 
   1159     case stEnd:		/* end (of anything) */
   1160       if (sh->sc == scInfo || SC_IS_COMMON (sh->sc))
   1161 	{
   1162 	  /* Finished with type */
   1163 	  top_stack->cur_type = 0;
   1164 	}
   1165       else if (sh->sc == scText &&
   1166 	       (top_stack->blocktype == stProc ||
   1167 		top_stack->blocktype == stStaticProc))
   1168 	{
   1169 	  /* Finished with procedure */
   1170 	  const struct blockvector *bv
   1171 	    = SYMTAB_BLOCKVECTOR (top_stack->cur_st);
   1172 	  struct mdebug_extra_func_info *e;
   1173 	  struct block *b = top_stack->cur_block;
   1174 	  struct type *ftype = top_stack->cur_type;
   1175 	  int i;
   1176 
   1177 	  BLOCK_END (top_stack->cur_block) += sh->value;	/* size */
   1178 
   1179 	  /* Make up special symbol to contain procedure specific info.  */
   1180 	  s = new_symbol (MDEBUG_EFI_SYMBOL_NAME);
   1181 	  SYMBOL_DOMAIN (s) = LABEL_DOMAIN;
   1182 	  SYMBOL_ACLASS_INDEX (s) = LOC_CONST;
   1183 	  SYMBOL_TYPE (s) = objfile_type (mdebugread_objfile)->builtin_void;
   1184 	  e = ((struct mdebug_extra_func_info *)
   1185 	       obstack_alloc (&mdebugread_objfile->objfile_obstack,
   1186 			      sizeof (struct mdebug_extra_func_info)));
   1187 	  memset (e, 0, sizeof (struct mdebug_extra_func_info));
   1188 	  SYMBOL_VALUE_BYTES (s) = (gdb_byte *) e;
   1189 	  e->numargs = top_stack->numargs;
   1190 	  e->pdr.framereg = -1;
   1191 	  add_symbol (s, top_stack->cur_st, top_stack->cur_block);
   1192 
   1193 	  /* f77 emits proc-level with address bounds==[0,0],
   1194 	     So look for such child blocks, and patch them.  */
   1195 	  for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); i++)
   1196 	    {
   1197 	      struct block *b_bad = BLOCKVECTOR_BLOCK (bv, i);
   1198 
   1199 	      if (BLOCK_SUPERBLOCK (b_bad) == b
   1200 		  && BLOCK_START (b_bad) == top_stack->procadr
   1201 		  && BLOCK_END (b_bad) == top_stack->procadr)
   1202 		{
   1203 		  BLOCK_START (b_bad) = BLOCK_START (b);
   1204 		  BLOCK_END (b_bad) = BLOCK_END (b);
   1205 		}
   1206 	    }
   1207 
   1208 	  if (TYPE_NFIELDS (ftype) <= 0)
   1209 	    {
   1210 	      /* No parameter type information is recorded with the function's
   1211 	         type.  Set that from the type of the parameter symbols.  */
   1212 	      int nparams = top_stack->numargs;
   1213 	      int iparams;
   1214 	      struct symbol *sym;
   1215 
   1216 	      if (nparams > 0)
   1217 		{
   1218 		  struct block_iterator iter;
   1219 
   1220 		  TYPE_NFIELDS (ftype) = nparams;
   1221 		  TYPE_FIELDS (ftype) = (struct field *)
   1222 		    TYPE_ALLOC (ftype, nparams * sizeof (struct field));
   1223 
   1224 		  iparams = 0;
   1225 		  ALL_BLOCK_SYMBOLS (b, iter, sym)
   1226 		    {
   1227 		      if (iparams == nparams)
   1228 			break;
   1229 
   1230 		      if (SYMBOL_IS_ARGUMENT (sym))
   1231 			{
   1232 			  TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym);
   1233 			  TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
   1234 			  iparams++;
   1235 			}
   1236 		    }
   1237 		}
   1238 	    }
   1239 	}
   1240       else if (sh->sc == scText && top_stack->blocktype == stBlock)
   1241 	{
   1242 	  /* End of (code) block.  The value of the symbol is the
   1243 	     displacement from the procedure`s start address of the
   1244 	     end of this block.  */
   1245 	  BLOCK_END (top_stack->cur_block) = sh->value + top_stack->procadr;
   1246 	}
   1247       else if (sh->sc == scText && top_stack->blocktype == stNil)
   1248 	{
   1249 	  /* End of outermost block.  Pop parse stack and ignore.  The
   1250 	     following stEnd of stProc will take care of the block.  */
   1251 	  ;
   1252 	}
   1253       else if (sh->sc == scText && top_stack->blocktype == stFile)
   1254 	{
   1255 	  /* End of file.  Pop parse stack and ignore.  Higher
   1256 	     level code deals with this.  */
   1257 	  ;
   1258 	}
   1259       else
   1260 	complaint (&symfile_complaints,
   1261 		   _("stEnd with storage class %d not handled"), sh->sc);
   1262 
   1263       pop_parse_stack ();	/* Restore previous lexical context.  */
   1264       break;
   1265 
   1266     case stMember:		/* member of struct or union */
   1267       f = &TYPE_FIELDS (top_stack->cur_type)[top_stack->cur_field++];
   1268       FIELD_NAME (*f) = name;
   1269       SET_FIELD_BITPOS (*f, sh->value);
   1270       bitsize = 0;
   1271       FIELD_TYPE (*f) = parse_type (cur_fd, ax, sh->index,
   1272 				    &bitsize, bigend, name);
   1273       FIELD_BITSIZE (*f) = bitsize;
   1274       break;
   1275 
   1276     case stIndirect:		/* forward declaration on Irix5 */
   1277       /* Forward declarations from Irix5 cc are handled by cross_ref,
   1278          skip them.  */
   1279       break;
   1280 
   1281     case stTypedef:		/* type definition */
   1282       found_ecoff_debugging_info = 1;
   1283 
   1284       /* Typedefs for forward declarations and opaque structs from alpha cc
   1285          are handled by cross_ref, skip them.  */
   1286       if (sh->iss == 0)
   1287 	break;
   1288 
   1289       /* Parse the type or use the pending type.  */
   1290       pend = is_pending_symbol (cur_fdr, ext_sh);
   1291       if (pend == (struct mdebug_pending *) NULL)
   1292 	{
   1293 	  t = parse_type (cur_fd, ax, sh->index, (int *) NULL, bigend, name);
   1294 	  add_pending (cur_fdr, ext_sh, t);
   1295 	}
   1296       else
   1297 	t = pend->t;
   1298 
   1299       /* Mips cc puts out a typedef with the name of the struct for forward
   1300          declarations.  These should not go into the symbol table and
   1301          TYPE_NAME should not be set for them.
   1302          They can't be distinguished from an intentional typedef to
   1303          the same name however:
   1304          x.h:
   1305          struct x { int ix; int jx; };
   1306          struct xx;
   1307          x.c:
   1308          typedef struct x x;
   1309          struct xx {int ixx; int jxx; };
   1310          generates a cross referencing stTypedef for x and xx.
   1311          The user visible effect of this is that the type of a pointer
   1312          to struct foo sometimes is given as `foo *' instead of `struct foo *'.
   1313          The problem is fixed with alpha cc and Irix5 cc.  */
   1314 
   1315       /* However if the typedef cross references to an opaque aggregate, it
   1316          is safe to omit it from the symbol table.  */
   1317 
   1318       if (has_opaque_xref (cur_fdr, sh))
   1319 	break;
   1320       s = new_symbol (name);
   1321       SYMBOL_DOMAIN (s) = VAR_DOMAIN;
   1322       SYMBOL_ACLASS_INDEX (s) = LOC_TYPEDEF;
   1323       SYMBOL_BLOCK_VALUE (s) = top_stack->cur_block;
   1324       SYMBOL_TYPE (s) = t;
   1325       add_symbol (s, top_stack->cur_st, top_stack->cur_block);
   1326 
   1327       /* Incomplete definitions of structs should not get a name.  */
   1328       if (TYPE_NAME (SYMBOL_TYPE (s)) == NULL
   1329 	  && (TYPE_NFIELDS (SYMBOL_TYPE (s)) != 0
   1330 	      || (TYPE_CODE (SYMBOL_TYPE (s)) != TYPE_CODE_STRUCT
   1331 		  && TYPE_CODE (SYMBOL_TYPE (s)) != TYPE_CODE_UNION)))
   1332 	{
   1333 	  if (TYPE_CODE (SYMBOL_TYPE (s)) == TYPE_CODE_PTR
   1334 	      || TYPE_CODE (SYMBOL_TYPE (s)) == TYPE_CODE_FUNC)
   1335 	    {
   1336 	      /* If we are giving a name to a type such as "pointer to
   1337 	         foo" or "function returning foo", we better not set
   1338 	         the TYPE_NAME.  If the program contains "typedef char
   1339 	         *caddr_t;", we don't want all variables of type char
   1340 	         * to print as caddr_t.  This is not just a
   1341 	         consequence of GDB's type management; CC and GCC (at
   1342 	         least through version 2.4) both output variables of
   1343 	         either type char * or caddr_t with the type
   1344 	         refering to the stTypedef symbol for caddr_t.  If a future
   1345 	         compiler cleans this up it GDB is not ready for it
   1346 	         yet, but if it becomes ready we somehow need to
   1347 	         disable this check (without breaking the PCC/GCC2.4
   1348 	         case).
   1349 
   1350 	         Sigh.
   1351 
   1352 	         Fortunately, this check seems not to be necessary
   1353 	         for anything except pointers or functions.  */
   1354 	    }
   1355 	  else
   1356 	    TYPE_NAME (SYMBOL_TYPE (s)) = SYMBOL_LINKAGE_NAME (s);
   1357 	}
   1358       break;
   1359 
   1360     case stFile:		/* file name */
   1361       push_parse_stack ();
   1362       top_stack->blocktype = sh->st;
   1363       break;
   1364 
   1365       /* I`ve never seen these for C */
   1366     case stRegReloc:
   1367       break;			/* register relocation */
   1368     case stForward:
   1369       break;			/* forwarding address */
   1370     case stConstant:
   1371       break;			/* constant */
   1372     default:
   1373       complaint (&symfile_complaints, _("unknown symbol type 0x%x"), sh->st);
   1374       break;
   1375     }
   1376 
   1377   return count;
   1378 }
   1379 
   1380 /* Basic types.  */
   1381 
   1382 static const struct objfile_data *basic_type_data;
   1383 
   1384 static struct type *
   1385 basic_type (int bt, struct objfile *objfile)
   1386 {
   1387   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   1388   struct type **map_bt
   1389     = (struct type **) objfile_data (objfile, basic_type_data);
   1390   struct type *tp;
   1391 
   1392   if (bt >= btMax)
   1393     return NULL;
   1394 
   1395   if (!map_bt)
   1396     {
   1397       map_bt = OBSTACK_CALLOC (&objfile->objfile_obstack,
   1398 			       btMax, struct type *);
   1399       set_objfile_data (objfile, basic_type_data, map_bt);
   1400     }
   1401 
   1402   if (map_bt[bt])
   1403     return map_bt[bt];
   1404 
   1405   switch (bt)
   1406     {
   1407     case btNil:
   1408       tp = objfile_type (objfile)->builtin_void;
   1409       break;
   1410 
   1411     case btAdr:
   1412       tp = init_type (TYPE_CODE_PTR, 4, TYPE_FLAG_UNSIGNED,
   1413 		      "adr_32", objfile);
   1414       TYPE_TARGET_TYPE (tp) = objfile_type (objfile)->builtin_void;
   1415       break;
   1416 
   1417     case btChar:
   1418       tp = init_type (TYPE_CODE_INT, 1, 0,
   1419 		      "char", objfile);
   1420       break;
   1421 
   1422     case btUChar:
   1423       tp = init_type (TYPE_CODE_INT, 1, TYPE_FLAG_UNSIGNED,
   1424 		      "unsigned char", objfile);
   1425       break;
   1426 
   1427     case btShort:
   1428       tp = init_type (TYPE_CODE_INT, 2, 0,
   1429 		      "short", objfile);
   1430       break;
   1431 
   1432     case btUShort:
   1433       tp = init_type (TYPE_CODE_INT, 2, TYPE_FLAG_UNSIGNED,
   1434 		      "unsigned short", objfile);
   1435       break;
   1436 
   1437     case btInt:
   1438       tp = init_type (TYPE_CODE_INT, 4, 0,
   1439 		      "int", objfile);
   1440       break;
   1441 
   1442    case btUInt:
   1443       tp = init_type (TYPE_CODE_INT, 4, TYPE_FLAG_UNSIGNED,
   1444 		      "unsigned int", objfile);
   1445       break;
   1446 
   1447     case btLong:
   1448       tp = init_type (TYPE_CODE_INT, 4, 0,
   1449 		      "long", objfile);
   1450       break;
   1451 
   1452     case btULong:
   1453       tp = init_type (TYPE_CODE_INT, 4, TYPE_FLAG_UNSIGNED,
   1454 		      "unsigned long", objfile);
   1455       break;
   1456 
   1457     case btFloat:
   1458       tp = init_type (TYPE_CODE_FLT,
   1459 		      gdbarch_float_bit (gdbarch) / TARGET_CHAR_BIT, 0,
   1460 		      "float", objfile);
   1461       break;
   1462 
   1463     case btDouble:
   1464       tp = init_type (TYPE_CODE_FLT,
   1465 		      gdbarch_double_bit (gdbarch) / TARGET_CHAR_BIT, 0,
   1466 		      "double", objfile);
   1467       break;
   1468 
   1469     case btComplex:
   1470       tp = init_type (TYPE_CODE_COMPLEX,
   1471 		      2 * gdbarch_float_bit (gdbarch) / TARGET_CHAR_BIT, 0,
   1472 		      "complex", objfile);
   1473       TYPE_TARGET_TYPE (tp) = basic_type (btFloat, objfile);
   1474       break;
   1475 
   1476     case btDComplex:
   1477       tp = init_type (TYPE_CODE_COMPLEX,
   1478 		      2 * gdbarch_double_bit (gdbarch) / TARGET_CHAR_BIT, 0,
   1479 		      "double complex", objfile);
   1480       TYPE_TARGET_TYPE (tp) = basic_type (btDouble, objfile);
   1481       break;
   1482 
   1483     case btFixedDec:
   1484       /* We use TYPE_CODE_INT to print these as integers.  Does this do any
   1485 	 good?  Would we be better off with TYPE_CODE_ERROR?  Should
   1486 	 TYPE_CODE_ERROR print things in hex if it knows the size?  */
   1487       tp = init_type (TYPE_CODE_INT,
   1488 		      gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT, 0,
   1489 		      "fixed decimal", objfile);
   1490       break;
   1491 
   1492     case btFloatDec:
   1493       tp = init_type (TYPE_CODE_ERROR,
   1494 		      gdbarch_double_bit (gdbarch) / TARGET_CHAR_BIT, 0,
   1495 		      "floating decimal", objfile);
   1496       break;
   1497 
   1498     case btString:
   1499       /* Is a "string" the way btString means it the same as TYPE_CODE_STRING?
   1500 	 FIXME.  */
   1501       tp = init_type (TYPE_CODE_STRING, 1, 0,
   1502 		      "string", objfile);
   1503       break;
   1504 
   1505     case btVoid:
   1506       tp = objfile_type (objfile)->builtin_void;
   1507       break;
   1508 
   1509     case btLong64:
   1510       tp = init_type (TYPE_CODE_INT, 8, 0,
   1511 		      "long", objfile);
   1512       break;
   1513 
   1514     case btULong64:
   1515       tp = init_type (TYPE_CODE_INT, 8, TYPE_FLAG_UNSIGNED,
   1516 		      "unsigned long", objfile);
   1517       break;
   1518 
   1519     case btLongLong64:
   1520       tp = init_type (TYPE_CODE_INT, 8, 0,
   1521 		      "long long", objfile);
   1522       break;
   1523 
   1524     case btULongLong64:
   1525       tp = init_type (TYPE_CODE_INT, 8, TYPE_FLAG_UNSIGNED,
   1526 		      "unsigned long long", objfile);
   1527       break;
   1528 
   1529     case btAdr64:
   1530       tp = init_type (TYPE_CODE_PTR, 8, TYPE_FLAG_UNSIGNED,
   1531 		      "adr_64", objfile);
   1532       TYPE_TARGET_TYPE (tp) = objfile_type (objfile)->builtin_void;
   1533       break;
   1534 
   1535     case btInt64:
   1536       tp = init_type (TYPE_CODE_INT, 8, 0,
   1537 		      "int", objfile);
   1538       break;
   1539 
   1540     case btUInt64:
   1541       tp = init_type (TYPE_CODE_INT, 8, TYPE_FLAG_UNSIGNED,
   1542 		      "unsigned int", objfile);
   1543       break;
   1544 
   1545     default:
   1546       tp = NULL;
   1547       break;
   1548     }
   1549 
   1550   map_bt[bt] = tp;
   1551   return tp;
   1552 }
   1553 
   1554 /* Parse the type information provided in the raw AX entries for
   1555    the symbol SH.  Return the bitfield size in BS, in case.
   1556    We must byte-swap the AX entries before we use them; BIGEND says whether
   1557    they are big-endian or little-endian (from fh->fBigendian).  */
   1558 
   1559 static struct type *
   1560 parse_type (int fd, union aux_ext *ax, unsigned int aux_index, int *bs,
   1561 	    int bigend, char *sym_name)
   1562 {
   1563   TIR t[1];
   1564   struct type *tp = 0;
   1565   enum type_code type_code = TYPE_CODE_UNDEF;
   1566 
   1567   /* Handle undefined types, they have indexNil.  */
   1568   if (aux_index == indexNil)
   1569     return basic_type (btInt, mdebugread_objfile);
   1570 
   1571   /* Handle corrupt aux indices.  */
   1572   if (aux_index >= (debug_info->fdr + fd)->caux)
   1573     {
   1574       index_complaint (sym_name);
   1575       return basic_type (btInt, mdebugread_objfile);
   1576     }
   1577   ax += aux_index;
   1578 
   1579   /* Use aux as a type information record, map its basic type.  */
   1580   (*debug_swap->swap_tir_in) (bigend, &ax->a_ti, t);
   1581   tp = basic_type (t->bt, mdebugread_objfile);
   1582   if (tp == NULL)
   1583     {
   1584       /* Cannot use builtin types -- build our own.  */
   1585       switch (t->bt)
   1586 	{
   1587 	case btStruct:
   1588 	  type_code = TYPE_CODE_STRUCT;
   1589 	  break;
   1590 	case btUnion:
   1591 	  type_code = TYPE_CODE_UNION;
   1592 	  break;
   1593 	case btEnum:
   1594 	  type_code = TYPE_CODE_ENUM;
   1595 	  break;
   1596 	case btRange:
   1597 	  type_code = TYPE_CODE_RANGE;
   1598 	  break;
   1599 	case btSet:
   1600 	  type_code = TYPE_CODE_SET;
   1601 	  break;
   1602 	case btIndirect:
   1603 	  /* alpha cc -migrate uses this for typedefs.  The true type will
   1604 	     be obtained by crossreferencing below.  */
   1605 	  type_code = TYPE_CODE_ERROR;
   1606 	  break;
   1607 	case btTypedef:
   1608 	  /* alpha cc uses this for typedefs.  The true type will be
   1609 	     obtained by crossreferencing below.  */
   1610 	  type_code = TYPE_CODE_ERROR;
   1611 	  break;
   1612 	default:
   1613 	  basic_type_complaint (t->bt, sym_name);
   1614 	  return basic_type (btInt, mdebugread_objfile);
   1615 	}
   1616     }
   1617 
   1618   /* Move on to next aux.  */
   1619   ax++;
   1620 
   1621   if (t->fBitfield)
   1622     {
   1623       int width = AUX_GET_WIDTH (bigend, ax);
   1624 
   1625       /* Inhibit core dumps if TIR is corrupted.  */
   1626       if (bs == (int *) NULL)
   1627 	{
   1628 	  /* Alpha cc -migrate encodes char and unsigned char types
   1629 	     as short and unsigned short types with a field width of 8.
   1630 	     Enum types also have a field width which we ignore for now.  */
   1631 	  if (t->bt == btShort && width == 8)
   1632 	    tp = basic_type (btChar, mdebugread_objfile);
   1633 	  else if (t->bt == btUShort && width == 8)
   1634 	    tp = basic_type (btUChar, mdebugread_objfile);
   1635 	  else if (t->bt == btEnum)
   1636 	    ;
   1637 	  else
   1638 	    complaint (&symfile_complaints,
   1639 		       _("can't handle TIR fBitfield for %s"),
   1640 		       sym_name);
   1641 	}
   1642       else
   1643 	*bs = width;
   1644       ax++;
   1645     }
   1646 
   1647   /* A btIndirect entry cross references to an aux entry containing
   1648      the type.  */
   1649   if (t->bt == btIndirect)
   1650     {
   1651       RNDXR rn[1];
   1652       int rf;
   1653       FDR *xref_fh;
   1654       int xref_fd;
   1655 
   1656       (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, rn);
   1657       ax++;
   1658       if (rn->rfd == 0xfff)
   1659 	{
   1660 	  rf = AUX_GET_ISYM (bigend, ax);
   1661 	  ax++;
   1662 	}
   1663       else
   1664 	rf = rn->rfd;
   1665 
   1666       if (rf == -1)
   1667 	{
   1668 	  complaint (&symfile_complaints,
   1669 		     _("unable to cross ref btIndirect for %s"), sym_name);
   1670 	  return basic_type (btInt, mdebugread_objfile);
   1671 	}
   1672       xref_fh = get_rfd (fd, rf);
   1673       xref_fd = xref_fh - debug_info->fdr;
   1674       tp = parse_type (xref_fd, debug_info->external_aux + xref_fh->iauxBase,
   1675 		    rn->index, (int *) NULL, xref_fh->fBigendian, sym_name);
   1676     }
   1677 
   1678   /* All these types really point to some (common) MIPS type
   1679      definition, and only the type-qualifiers fully identify
   1680      them.  We'll make the same effort at sharing.  */
   1681   if (t->bt == btStruct ||
   1682       t->bt == btUnion ||
   1683       t->bt == btEnum ||
   1684 
   1685   /* btSet (I think) implies that the name is a tag name, not a typedef
   1686      name.  This apparently is a MIPS extension for C sets.  */
   1687       t->bt == btSet)
   1688     {
   1689       char *name;
   1690 
   1691       /* Try to cross reference this type, build new type on failure.  */
   1692       ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
   1693       if (tp == (struct type *) NULL)
   1694 	tp = init_type (type_code, 0, 0, (char *) NULL, mdebugread_objfile);
   1695 
   1696       /* DEC c89 produces cross references to qualified aggregate types,
   1697          dereference them.  */
   1698       while (TYPE_CODE (tp) == TYPE_CODE_PTR
   1699 	     || TYPE_CODE (tp) == TYPE_CODE_ARRAY)
   1700 	tp = TYPE_TARGET_TYPE (tp);
   1701 
   1702       /* Make sure that TYPE_CODE(tp) has an expected type code.
   1703          Any type may be returned from cross_ref if file indirect entries
   1704          are corrupted.  */
   1705       if (TYPE_CODE (tp) != TYPE_CODE_STRUCT
   1706 	  && TYPE_CODE (tp) != TYPE_CODE_UNION
   1707 	  && TYPE_CODE (tp) != TYPE_CODE_ENUM)
   1708 	{
   1709 	  unexpected_type_code_complaint (sym_name);
   1710 	}
   1711       else
   1712 	{
   1713 	  /* Usually, TYPE_CODE(tp) is already type_code.  The main
   1714 	     exception is if we guessed wrong re struct/union/enum.
   1715 	     But for struct vs. union a wrong guess is harmless, so
   1716 	     don't complain().  */
   1717 	  if ((TYPE_CODE (tp) == TYPE_CODE_ENUM
   1718 	       && type_code != TYPE_CODE_ENUM)
   1719 	      || (TYPE_CODE (tp) != TYPE_CODE_ENUM
   1720 		  && type_code == TYPE_CODE_ENUM))
   1721 	    {
   1722 	      bad_tag_guess_complaint (sym_name);
   1723 	    }
   1724 
   1725 	  if (TYPE_CODE (tp) != type_code)
   1726 	    {
   1727 	      TYPE_CODE (tp) = type_code;
   1728 	    }
   1729 
   1730 	  /* Do not set the tag name if it is a compiler generated tag name
   1731 	     (.Fxx or .xxfake or empty) for unnamed struct/union/enums.  */
   1732 	  if (name[0] == '.' || name[0] == '\0')
   1733 	    TYPE_TAG_NAME (tp) = NULL;
   1734 	  else if (TYPE_TAG_NAME (tp) == NULL
   1735 		   || strcmp (TYPE_TAG_NAME (tp), name) != 0)
   1736 	    TYPE_TAG_NAME (tp)
   1737 	      = ((const char *)
   1738 		 obstack_copy0 (&mdebugread_objfile->objfile_obstack,
   1739 				name, strlen (name)));
   1740 	}
   1741     }
   1742 
   1743   /* All these types really point to some (common) MIPS type
   1744      definition, and only the type-qualifiers fully identify
   1745      them.  We'll make the same effort at sharing.
   1746      FIXME: We are not doing any guessing on range types.  */
   1747   if (t->bt == btRange)
   1748     {
   1749       char *name;
   1750 
   1751       /* Try to cross reference this type, build new type on failure.  */
   1752       ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
   1753       if (tp == (struct type *) NULL)
   1754 	tp = init_type (type_code, 0, 0, (char *) NULL, mdebugread_objfile);
   1755 
   1756       /* Make sure that TYPE_CODE(tp) has an expected type code.
   1757          Any type may be returned from cross_ref if file indirect entries
   1758          are corrupted.  */
   1759       if (TYPE_CODE (tp) != TYPE_CODE_RANGE)
   1760 	{
   1761 	  unexpected_type_code_complaint (sym_name);
   1762 	}
   1763       else
   1764 	{
   1765 	  /* Usually, TYPE_CODE(tp) is already type_code.  The main
   1766 	     exception is if we guessed wrong re struct/union/enum.  */
   1767 	  if (TYPE_CODE (tp) != type_code)
   1768 	    {
   1769 	      bad_tag_guess_complaint (sym_name);
   1770 	      TYPE_CODE (tp) = type_code;
   1771 	    }
   1772 	  if (TYPE_NAME (tp) == NULL
   1773 	      || strcmp (TYPE_NAME (tp), name) != 0)
   1774 	    TYPE_NAME (tp)
   1775 	      = ((const char *)
   1776 		 obstack_copy0 (&mdebugread_objfile->objfile_obstack,
   1777 				name, strlen (name)));
   1778 	}
   1779     }
   1780   if (t->bt == btTypedef)
   1781     {
   1782       char *name;
   1783 
   1784       /* Try to cross reference this type, it should succeed.  */
   1785       ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
   1786       if (tp == (struct type *) NULL)
   1787 	{
   1788 	  complaint (&symfile_complaints,
   1789 		     _("unable to cross ref btTypedef for %s"), sym_name);
   1790 	  tp = basic_type (btInt, mdebugread_objfile);
   1791 	}
   1792     }
   1793 
   1794   /* Deal with range types.  */
   1795   if (t->bt == btRange)
   1796     {
   1797       TYPE_NFIELDS (tp) = 0;
   1798       TYPE_RANGE_DATA (tp) = ((struct range_bounds *)
   1799 			  TYPE_ZALLOC (tp, sizeof (struct range_bounds)));
   1800       TYPE_LOW_BOUND (tp) = AUX_GET_DNLOW (bigend, ax);
   1801       ax++;
   1802       TYPE_HIGH_BOUND (tp) = AUX_GET_DNHIGH (bigend, ax);
   1803       ax++;
   1804     }
   1805 
   1806   /* Parse all the type qualifiers now.  If there are more
   1807      than 6 the game will continue in the next aux.  */
   1808 
   1809   while (1)
   1810     {
   1811 #define PARSE_TQ(tq) \
   1812       if (t->tq != tqNil) \
   1813 	ax += upgrade_type(fd, &tp, t->tq, ax, bigend, sym_name); \
   1814       else \
   1815 	break;
   1816 
   1817       PARSE_TQ (tq0);
   1818       PARSE_TQ (tq1);
   1819       PARSE_TQ (tq2);
   1820       PARSE_TQ (tq3);
   1821       PARSE_TQ (tq4);
   1822       PARSE_TQ (tq5);
   1823 #undef	PARSE_TQ
   1824 
   1825       /* mips cc 2.x and gcc never put out continued aux entries.  */
   1826       if (!t->continued)
   1827 	break;
   1828 
   1829       (*debug_swap->swap_tir_in) (bigend, &ax->a_ti, t);
   1830       ax++;
   1831     }
   1832 
   1833   /* Complain for illegal continuations due to corrupt aux entries.  */
   1834   if (t->continued)
   1835     complaint (&symfile_complaints,
   1836 	       _("illegal TIR continued for %s"), sym_name);
   1837 
   1838   return tp;
   1839 }
   1840 
   1841 /* Make up a complex type from a basic one.  Type is passed by
   1842    reference in TPP and side-effected as necessary.  The type
   1843    qualifier TQ says how to handle the aux symbols at AX for
   1844    the symbol SX we are currently analyzing.  BIGEND says whether
   1845    aux symbols are big-endian or little-endian.
   1846    Returns the number of aux symbols we parsed.  */
   1847 
   1848 static int
   1849 upgrade_type (int fd, struct type **tpp, int tq, union aux_ext *ax, int bigend,
   1850 	      char *sym_name)
   1851 {
   1852   int off;
   1853   struct type *t;
   1854 
   1855   /* Used in array processing.  */
   1856   int rf, id;
   1857   FDR *fh;
   1858   struct type *range;
   1859   struct type *indx;
   1860   int lower, upper;
   1861   RNDXR rndx;
   1862 
   1863   switch (tq)
   1864     {
   1865     case tqPtr:
   1866       t = lookup_pointer_type (*tpp);
   1867       *tpp = t;
   1868       return 0;
   1869 
   1870     case tqProc:
   1871       t = lookup_function_type (*tpp);
   1872       *tpp = t;
   1873       return 0;
   1874 
   1875     case tqArray:
   1876       off = 0;
   1877 
   1878       /* Determine and record the domain type (type of index).  */
   1879       (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, &rndx);
   1880       id = rndx.index;
   1881       rf = rndx.rfd;
   1882       if (rf == 0xfff)
   1883 	{
   1884 	  ax++;
   1885 	  rf = AUX_GET_ISYM (bigend, ax);
   1886 	  off++;
   1887 	}
   1888       fh = get_rfd (fd, rf);
   1889 
   1890       indx = parse_type (fh - debug_info->fdr,
   1891 			 debug_info->external_aux + fh->iauxBase,
   1892 			 id, (int *) NULL, bigend, sym_name);
   1893 
   1894       /* The bounds type should be an integer type, but might be anything
   1895          else due to corrupt aux entries.  */
   1896       if (TYPE_CODE (indx) != TYPE_CODE_INT)
   1897 	{
   1898 	  complaint (&symfile_complaints,
   1899 		     _("illegal array index type for %s, assuming int"),
   1900 		     sym_name);
   1901 	  indx = objfile_type (mdebugread_objfile)->builtin_int;
   1902 	}
   1903 
   1904       /* Get the bounds, and create the array type.  */
   1905       ax++;
   1906       lower = AUX_GET_DNLOW (bigend, ax);
   1907       ax++;
   1908       upper = AUX_GET_DNHIGH (bigend, ax);
   1909       ax++;
   1910       rf = AUX_GET_WIDTH (bigend, ax);	/* bit size of array element */
   1911 
   1912       range = create_static_range_type ((struct type *) NULL, indx,
   1913 					lower, upper);
   1914 
   1915       t = create_array_type ((struct type *) NULL, *tpp, range);
   1916 
   1917       /* We used to fill in the supplied array element bitsize
   1918          here if the TYPE_LENGTH of the target type was zero.
   1919          This happens for a `pointer to an array of anonymous structs',
   1920          but in this case the array element bitsize is also zero,
   1921          so nothing is gained.
   1922          And we used to check the TYPE_LENGTH of the target type against
   1923          the supplied array element bitsize.
   1924          gcc causes a mismatch for `pointer to array of object',
   1925          since the sdb directives it uses do not have a way of
   1926          specifying the bitsize, but it does no harm (the
   1927          TYPE_LENGTH should be correct) and we should be able to
   1928          ignore the erroneous bitsize from the auxiliary entry safely.
   1929          dbx seems to ignore it too.  */
   1930 
   1931       /* TYPE_TARGET_STUB now takes care of the zero TYPE_LENGTH problem.  */
   1932       if (TYPE_LENGTH (*tpp) == 0)
   1933 	TYPE_TARGET_STUB (t) = 1;
   1934 
   1935       *tpp = t;
   1936       return 4 + off;
   1937 
   1938     case tqVol:
   1939       /* Volatile -- currently ignored */
   1940       return 0;
   1941 
   1942     case tqConst:
   1943       /* Const -- currently ignored */
   1944       return 0;
   1945 
   1946     default:
   1947       complaint (&symfile_complaints, _("unknown type qualifier 0x%x"), tq);
   1948       return 0;
   1949     }
   1950 }
   1951 
   1952 
   1953 /* Parse a procedure descriptor record PR.  Note that the procedure is
   1954    parsed _after_ the local symbols, now we just insert the extra
   1955    information we need into a MDEBUG_EFI_SYMBOL_NAME symbol that has
   1956    already been placed in the procedure's main block.  Note also that
   1957    images that have been partially stripped (ld -x) have been deprived
   1958    of local symbols, and we have to cope with them here.  FIRST_OFF is
   1959    the offset of the first procedure for this FDR; we adjust the
   1960    address by this amount, but I don't know why.  SEARCH_SYMTAB is the symtab
   1961    to look for the function which contains the MDEBUG_EFI_SYMBOL_NAME symbol
   1962    in question, or NULL to use top_stack->cur_block.  */
   1963 
   1964 static void
   1965 parse_procedure (PDR *pr, struct compunit_symtab *search_symtab,
   1966 		 struct partial_symtab *pst)
   1967 {
   1968   struct symbol *s, *i;
   1969   const struct block *b;
   1970   char *sh_name;
   1971 
   1972   /* Simple rule to find files linked "-x".  */
   1973   if (cur_fdr->rss == -1)
   1974     {
   1975       if (pr->isym == -1)
   1976 	{
   1977 	  /* Static procedure at address pr->adr.  Sigh.  */
   1978 	  /* FIXME-32x64.  assuming pr->adr fits in long.  */
   1979 	  complaint (&symfile_complaints,
   1980 		     _("can't handle PDR for static proc at 0x%lx"),
   1981 		     (unsigned long) pr->adr);
   1982 	  return;
   1983 	}
   1984       else
   1985 	{
   1986 	  /* external */
   1987 	  EXTR she;
   1988 
   1989 	  (*debug_swap->swap_ext_in) (cur_bfd,
   1990 				      ((char *) debug_info->external_ext
   1991 				       + (pr->isym
   1992 					  * debug_swap->external_ext_size)),
   1993 				      &she);
   1994 	  sh_name = debug_info->ssext + she.asym.iss;
   1995 	}
   1996     }
   1997   else
   1998     {
   1999       /* Full symbols */
   2000       SYMR sh;
   2001 
   2002       (*debug_swap->swap_sym_in) (cur_bfd,
   2003 				  ((char *) debug_info->external_sym
   2004 				   + ((cur_fdr->isymBase + pr->isym)
   2005 				      * debug_swap->external_sym_size)),
   2006 				  &sh);
   2007       sh_name = debug_info->ss + cur_fdr->issBase + sh.iss;
   2008     }
   2009 
   2010   if (search_symtab != NULL)
   2011     {
   2012 #if 0
   2013       /* This loses both in the case mentioned (want a static, find a global),
   2014          but also if we are looking up a non-mangled name which happens to
   2015          match the name of a mangled function.  */
   2016       /* We have to save the cur_fdr across the call to lookup_symbol.
   2017          If the pdr is for a static function and if a global function with
   2018          the same name exists, lookup_symbol will eventually read in the symtab
   2019          for the global function and clobber cur_fdr.  */
   2020       FDR *save_cur_fdr = cur_fdr;
   2021 
   2022       s = lookup_symbol (sh_name, NULL, VAR_DOMAIN, 0);
   2023       cur_fdr = save_cur_fdr;
   2024 #else
   2025       s = mylookup_symbol
   2026 	(sh_name,
   2027 	 BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (search_symtab),
   2028 			    STATIC_BLOCK),
   2029 	 VAR_DOMAIN,
   2030 	 LOC_BLOCK);
   2031 #endif
   2032     }
   2033   else
   2034     s = mylookup_symbol (sh_name, top_stack->cur_block,
   2035 			 VAR_DOMAIN, LOC_BLOCK);
   2036 
   2037   if (s != 0)
   2038     {
   2039       b = SYMBOL_BLOCK_VALUE (s);
   2040     }
   2041   else
   2042     {
   2043       complaint (&symfile_complaints, _("PDR for %s, but no symbol"), sh_name);
   2044 #if 1
   2045       return;
   2046 #else
   2047 /* FIXME -- delete.  We can't do symbol allocation now; it's all done.  */
   2048       s = new_symbol (sh_name);
   2049       SYMBOL_DOMAIN (s) = VAR_DOMAIN;
   2050       SYMBOL_CLASS (s) = LOC_BLOCK;
   2051       /* Donno its type, hope int is ok.  */
   2052       SYMBOL_TYPE (s)
   2053 	= lookup_function_type (objfile_type (pst->objfile)->builtin_int);
   2054       add_symbol (s, top_stack->cur_st, top_stack->cur_block);
   2055       /* Won't have symbols for this one.  */
   2056       b = new_block (2);
   2057       SYMBOL_BLOCK_VALUE (s) = b;
   2058       BLOCK_FUNCTION (b) = s;
   2059       BLOCK_START (b) = pr->adr;
   2060       /* BOUND used to be the end of procedure's text, but the
   2061          argument is no longer passed in.  */
   2062       BLOCK_END (b) = bound;
   2063       BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
   2064       add_block (b, top_stack->cur_st);
   2065 #endif
   2066     }
   2067 
   2068   i = mylookup_symbol (MDEBUG_EFI_SYMBOL_NAME, b, LABEL_DOMAIN, LOC_CONST);
   2069 
   2070   if (i)
   2071     {
   2072       struct mdebug_extra_func_info *e;
   2073 
   2074       e = (struct mdebug_extra_func_info *) SYMBOL_VALUE_BYTES (i);
   2075       e->pdr = *pr;
   2076 
   2077       /* GDB expects the absolute function start address for the
   2078          procedure descriptor in e->pdr.adr.
   2079          As the address in the procedure descriptor is usually relative,
   2080          we would have to relocate e->pdr.adr with cur_fdr->adr and
   2081          ANOFFSET (pst->section_offsets, SECT_OFF_TEXT (pst->objfile)).
   2082          Unfortunately cur_fdr->adr and e->pdr.adr are both absolute
   2083          in shared libraries on some systems, and on other systems
   2084          e->pdr.adr is sometimes offset by a bogus value.
   2085          To work around these problems, we replace e->pdr.adr with
   2086          the start address of the function.  */
   2087       e->pdr.adr = BLOCK_START (b);
   2088     }
   2089 
   2090   /* It would be reasonable that functions that have been compiled
   2091      without debugging info have a btNil type for their return value,
   2092      and functions that are void and are compiled with debugging info
   2093      have btVoid.
   2094      gcc and DEC f77 put out btNil types for both cases, so btNil is mapped
   2095      to TYPE_CODE_VOID in parse_type to get the `compiled with debugging info'
   2096      case right.
   2097      The glevel field in cur_fdr could be used to determine the presence
   2098      of debugging info, but GCC doesn't always pass the -g switch settings
   2099      to the assembler and GAS doesn't set the glevel field from the -g switch
   2100      settings.
   2101      To work around these problems, the return value type of a TYPE_CODE_VOID
   2102      function is adjusted accordingly if no debugging info was found in the
   2103      compilation unit.  */
   2104 
   2105   if (processing_gcc_compilation == 0
   2106       && found_ecoff_debugging_info == 0
   2107       && TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (s))) == TYPE_CODE_VOID)
   2108     SYMBOL_TYPE (s) = objfile_type (mdebugread_objfile)->nodebug_text_symbol;
   2109 }
   2110 
   2111 /* Parse the external symbol ES.  Just call parse_symbol() after
   2112    making sure we know where the aux are for it.
   2113    BIGEND says whether aux entries are big-endian or little-endian.
   2114 
   2115    This routine clobbers top_stack->cur_block and ->cur_st.  */
   2116 
   2117 static void parse_external (EXTR *, int, struct section_offsets *,
   2118 			    struct objfile *);
   2119 
   2120 static void
   2121 parse_external (EXTR *es, int bigend, struct section_offsets *section_offsets,
   2122 		struct objfile *objfile)
   2123 {
   2124   union aux_ext *ax;
   2125 
   2126   if (es->ifd != ifdNil)
   2127     {
   2128       cur_fd = es->ifd;
   2129       cur_fdr = debug_info->fdr + cur_fd;
   2130       ax = debug_info->external_aux + cur_fdr->iauxBase;
   2131     }
   2132   else
   2133     {
   2134       cur_fdr = debug_info->fdr;
   2135       ax = 0;
   2136     }
   2137 
   2138   /* Reading .o files */
   2139   if (SC_IS_UNDEF (es->asym.sc) || es->asym.sc == scNil)
   2140     {
   2141       char *what;
   2142       switch (es->asym.st)
   2143 	{
   2144 	case stNil:
   2145 	  /* These are generated for static symbols in .o files,
   2146 	     ignore them.  */
   2147 	  return;
   2148 	case stStaticProc:
   2149 	case stProc:
   2150 	  what = "procedure";
   2151 	  n_undef_procs++;
   2152 	  break;
   2153 	case stGlobal:
   2154 	  what = "variable";
   2155 	  n_undef_vars++;
   2156 	  break;
   2157 	case stLabel:
   2158 	  what = "label";
   2159 	  n_undef_labels++;
   2160 	  break;
   2161 	default:
   2162 	  what = "symbol";
   2163 	  break;
   2164 	}
   2165       n_undef_symbols++;
   2166       /* FIXME:  Turn this into a complaint?  */
   2167       if (info_verbose)
   2168 	printf_filtered (_("Warning: %s `%s' is undefined (in %s)\n"),
   2169 			 what, debug_info->ssext + es->asym.iss,
   2170 			 fdr_name (cur_fdr));
   2171       return;
   2172     }
   2173 
   2174   switch (es->asym.st)
   2175     {
   2176     case stProc:
   2177     case stStaticProc:
   2178       /* There is no need to parse the external procedure symbols.
   2179          If they are from objects compiled without -g, their index will
   2180          be indexNil, and the symbol definition from the minimal symbol
   2181          is preferrable (yielding a function returning int instead of int).
   2182          If the index points to a local procedure symbol, the local
   2183          symbol already provides the correct type.
   2184          Note that the index of the external procedure symbol points
   2185          to the local procedure symbol in the local symbol table, and
   2186          _not_ to the auxiliary symbol info.  */
   2187       break;
   2188     case stGlobal:
   2189     case stLabel:
   2190       /* Global common symbols are resolved by the runtime loader,
   2191          ignore them.  */
   2192       if (SC_IS_COMMON (es->asym.sc))
   2193 	break;
   2194 
   2195       /* Note that the case of a symbol with indexNil must be handled
   2196          anyways by parse_symbol().  */
   2197       parse_symbol (&es->asym, ax, (char *) NULL,
   2198 		    bigend, section_offsets, objfile);
   2199       break;
   2200     default:
   2201       break;
   2202     }
   2203 }
   2204 
   2205 /* Parse the line number info for file descriptor FH into
   2206    GDB's linetable LT.  MIPS' encoding requires a little bit
   2207    of magic to get things out.  Note also that MIPS' line
   2208    numbers can go back and forth, apparently we can live
   2209    with that and do not need to reorder our linetables.  */
   2210 
   2211 static void parse_lines (FDR *, PDR *, struct linetable *, int,
   2212 			 struct partial_symtab *, CORE_ADDR);
   2213 
   2214 static void
   2215 parse_lines (FDR *fh, PDR *pr, struct linetable *lt, int maxlines,
   2216 	     struct partial_symtab *pst, CORE_ADDR lowest_pdr_addr)
   2217 {
   2218   unsigned char *base;
   2219   int j, k;
   2220   int delta, count, lineno = 0;
   2221 
   2222   if (fh->cbLine == 0)
   2223     return;
   2224 
   2225   /* Scan by procedure descriptors.  */
   2226   k = 0;
   2227   for (j = 0; j < fh->cpd; j++, pr++)
   2228     {
   2229       CORE_ADDR l;
   2230       CORE_ADDR adr;
   2231       unsigned char *halt;
   2232 
   2233       /* No code for this one.  */
   2234       if (pr->iline == ilineNil ||
   2235 	  pr->lnLow == -1 || pr->lnHigh == -1)
   2236 	continue;
   2237 
   2238       /* Determine start and end address of compressed line bytes for
   2239          this procedure.  */
   2240       base = debug_info->line + fh->cbLineOffset;
   2241       if (j != (fh->cpd - 1))
   2242 	halt = base + pr[1].cbLineOffset;
   2243       else
   2244 	halt = base + fh->cbLine;
   2245       base += pr->cbLineOffset;
   2246 
   2247       adr = pst->textlow + pr->adr - lowest_pdr_addr;
   2248 
   2249       l = adr >> 2;		/* in words */
   2250       for (lineno = pr->lnLow; base < halt;)
   2251 	{
   2252 	  count = *base & 0x0f;
   2253 	  delta = *base++ >> 4;
   2254 	  if (delta >= 8)
   2255 	    delta -= 16;
   2256 	  if (delta == -8)
   2257 	    {
   2258 	      delta = (base[0] << 8) | base[1];
   2259 	      if (delta >= 0x8000)
   2260 		delta -= 0x10000;
   2261 	      base += 2;
   2262 	    }
   2263 	  lineno += delta;	/* first delta is 0 */
   2264 
   2265 	  /* Complain if the line table overflows.  Could happen
   2266 	     with corrupt binaries.  */
   2267 	  if (lt->nitems >= maxlines)
   2268 	    {
   2269 	      complaint (&symfile_complaints,
   2270 			 _("guessed size of linetable for %s incorrectly"),
   2271 			 fdr_name (fh));
   2272 	      break;
   2273 	    }
   2274 	  k = add_line (lt, lineno, l, k);
   2275 	  l += count + 1;
   2276 	}
   2277     }
   2278 }
   2279 
   2280 static void
   2282 function_outside_compilation_unit_complaint (const char *arg1)
   2283 {
   2284   complaint (&symfile_complaints,
   2285 	     _("function `%s' appears to be defined "
   2286 	       "outside of all compilation units"),
   2287 	     arg1);
   2288 }
   2289 
   2290 /* Use the STORAGE_CLASS to compute which section the given symbol
   2291    belongs to, and then records this new minimal symbol.  */
   2292 
   2293 static void
   2294 record_minimal_symbol (const char *name, const CORE_ADDR address,
   2295                        enum minimal_symbol_type ms_type, int storage_class,
   2296                        struct objfile *objfile)
   2297 {
   2298   int section;
   2299 
   2300   switch (storage_class)
   2301     {
   2302       case scText:
   2303         section = SECT_OFF_TEXT (objfile);
   2304         break;
   2305       case scData:
   2306         section = SECT_OFF_DATA (objfile);
   2307         break;
   2308       case scBss:
   2309         section = SECT_OFF_BSS (objfile);
   2310         break;
   2311       case scSData:
   2312         section = get_section_index (objfile, ".sdata");
   2313         break;
   2314       case scSBss:
   2315         section = get_section_index (objfile, ".sbss");
   2316         break;
   2317       case scRData:
   2318         section = get_section_index (objfile, ".rdata");
   2319         break;
   2320       case scInit:
   2321         section = get_section_index (objfile, ".init");
   2322         break;
   2323       case scXData:
   2324         section = get_section_index (objfile, ".xdata");
   2325         break;
   2326       case scPData:
   2327         section = get_section_index (objfile, ".pdata");
   2328         break;
   2329       case scFini:
   2330         section = get_section_index (objfile, ".fini");
   2331         break;
   2332       case scRConst:
   2333         section = get_section_index (objfile, ".rconst");
   2334         break;
   2335 #ifdef scTlsData
   2336       case scTlsData:
   2337         section = get_section_index (objfile, ".tlsdata");
   2338         break;
   2339 #endif
   2340 #ifdef scTlsBss
   2341       case scTlsBss:
   2342         section = get_section_index (objfile, ".tlsbss");
   2343         break;
   2344 #endif
   2345       default:
   2346         /* This kind of symbol is not associated to a section.  */
   2347         section = -1;
   2348     }
   2349 
   2350   prim_record_minimal_symbol_and_info (name, address, ms_type,
   2351                                        section, objfile);
   2352 }
   2353 
   2354 /* Master parsing procedure for first-pass reading of file symbols
   2355    into a partial_symtab.  */
   2356 
   2357 static void
   2358 parse_partial_symbols (struct objfile *objfile)
   2359 {
   2360   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   2361   const bfd_size_type external_sym_size = debug_swap->external_sym_size;
   2362   const bfd_size_type external_rfd_size = debug_swap->external_rfd_size;
   2363   const bfd_size_type external_ext_size = debug_swap->external_ext_size;
   2364   void (*const swap_ext_in) (bfd *, void *, EXTR *) = debug_swap->swap_ext_in;
   2365   void (*const swap_sym_in) (bfd *, void *, SYMR *) = debug_swap->swap_sym_in;
   2366   void (*const swap_rfd_in) (bfd *, void *, RFDT *) = debug_swap->swap_rfd_in;
   2367   int f_idx, s_idx;
   2368   HDRR *hdr = &debug_info->symbolic_header;
   2369   /* Running pointers */
   2370   FDR *fh;
   2371   char *ext_out;
   2372   char *ext_out_end;
   2373   EXTR *ext_block;
   2374   EXTR *ext_in;
   2375   EXTR *ext_in_end;
   2376   SYMR sh;
   2377   struct partial_symtab *pst;
   2378   int textlow_not_set = 1;
   2379 
   2380   /* List of current psymtab's include files.  */
   2381   const char **psymtab_include_list;
   2382   int includes_allocated;
   2383   int includes_used;
   2384   EXTR *extern_tab;
   2385   struct pst_map *fdr_to_pst;
   2386   /* Index within current psymtab dependency list.  */
   2387   struct partial_symtab **dependency_list;
   2388   int dependencies_used, dependencies_allocated;
   2389   struct cleanup *old_chain;
   2390   char *name;
   2391   enum language prev_language;
   2392   asection *text_sect;
   2393   int relocatable = 0;
   2394 
   2395   /* Irix 5.2 shared libraries have a fh->adr field of zero, but
   2396      the shared libraries are prelinked at a high memory address.
   2397      We have to adjust the start address of the object file for this case,
   2398      by setting it to the start address of the first procedure in the file.
   2399      But we should do no adjustments if we are debugging a .o file, where
   2400      the text section (and fh->adr) really starts at zero.  */
   2401   text_sect = bfd_get_section_by_name (cur_bfd, ".text");
   2402   if (text_sect != NULL
   2403       && (bfd_get_section_flags (cur_bfd, text_sect) & SEC_RELOC))
   2404     relocatable = 1;
   2405 
   2406   extern_tab = (EXTR *) obstack_alloc (&objfile->objfile_obstack,
   2407 				       sizeof (EXTR) * hdr->iextMax);
   2408 
   2409   includes_allocated = 30;
   2410   includes_used = 0;
   2411   psymtab_include_list = (const char **) alloca (includes_allocated *
   2412 						 sizeof (const char *));
   2413   next_symbol_text_func = mdebug_next_symbol_text;
   2414 
   2415   dependencies_allocated = 30;
   2416   dependencies_used = 0;
   2417   dependency_list =
   2418     (struct partial_symtab **) alloca (dependencies_allocated *
   2419 				       sizeof (struct partial_symtab *));
   2420 
   2421   set_last_source_file (NULL);
   2422 
   2423   /*
   2424    * Big plan:
   2425    *
   2426    * Only parse the Local and External symbols, and the Relative FDR.
   2427    * Fixup enough of the loader symtab to be able to use it.
   2428    * Allocate space only for the file's portions we need to
   2429    * look at.  (XXX)
   2430    */
   2431 
   2432   max_gdbinfo = 0;
   2433   max_glevel = MIN_GLEVEL;
   2434 
   2435   /* Allocate the map FDR -> PST.
   2436      Minor hack: -O3 images might claim some global data belongs
   2437      to FDR -1.  We`ll go along with that.  */
   2438   fdr_to_pst = XCNEWVEC (struct pst_map, hdr->ifdMax + 1);
   2439   old_chain = make_cleanup (xfree, fdr_to_pst);
   2440   fdr_to_pst++;
   2441   {
   2442     struct partial_symtab *pst = new_psymtab ("", objfile);
   2443 
   2444     fdr_to_pst[-1].pst = pst;
   2445     FDR_IDX (pst) = -1;
   2446   }
   2447 
   2448   /* Allocate the global pending list.  */
   2449   pending_list =
   2450     ((struct mdebug_pending **)
   2451      obstack_alloc (&objfile->objfile_obstack,
   2452 		    hdr->ifdMax * sizeof (struct mdebug_pending *)));
   2453   memset (pending_list, 0,
   2454 	  hdr->ifdMax * sizeof (struct mdebug_pending *));
   2455 
   2456   /* Pass 0 over external syms: swap them in.  */
   2457   ext_block = XNEWVEC (EXTR, hdr->iextMax);
   2458   make_cleanup (xfree, ext_block);
   2459 
   2460   ext_out = (char *) debug_info->external_ext;
   2461   ext_out_end = ext_out + hdr->iextMax * external_ext_size;
   2462   ext_in = ext_block;
   2463   for (; ext_out < ext_out_end; ext_out += external_ext_size, ext_in++)
   2464     (*swap_ext_in) (cur_bfd, ext_out, ext_in);
   2465 
   2466   /* Pass 1 over external syms: Presize and partition the list.  */
   2467   ext_in = ext_block;
   2468   ext_in_end = ext_in + hdr->iextMax;
   2469   for (; ext_in < ext_in_end; ext_in++)
   2470     {
   2471       /* See calls to complain below.  */
   2472       if (ext_in->ifd >= -1
   2473 	  && ext_in->ifd < hdr->ifdMax
   2474 	  && ext_in->asym.iss >= 0
   2475 	  && ext_in->asym.iss < hdr->issExtMax)
   2476 	fdr_to_pst[ext_in->ifd].n_globals++;
   2477     }
   2478 
   2479   /* Pass 1.5 over files:  partition out global symbol space.  */
   2480   s_idx = 0;
   2481   for (f_idx = -1; f_idx < hdr->ifdMax; f_idx++)
   2482     {
   2483       fdr_to_pst[f_idx].globals_offset = s_idx;
   2484       s_idx += fdr_to_pst[f_idx].n_globals;
   2485       fdr_to_pst[f_idx].n_globals = 0;
   2486     }
   2487 
   2488   /* ECOFF in ELF:
   2489 
   2490      For ECOFF in ELF, we skip the creation of the minimal symbols.
   2491      The ECOFF symbols should be a subset of the Elf symbols, and the
   2492      section information of the elf symbols will be more accurate.
   2493      FIXME!  What about Irix 5's native linker?
   2494 
   2495      By default, Elf sections which don't exist in ECOFF
   2496      get put in ECOFF's absolute section by the gnu linker.
   2497      Since absolute sections don't get relocated, we
   2498      end up calculating an address different from that of
   2499      the symbol's minimal symbol (created earlier from the
   2500      Elf symtab).
   2501 
   2502      To fix this, either :
   2503      1) don't create the duplicate symbol
   2504      (assumes ECOFF symtab is a subset of the ELF symtab;
   2505      assumes no side-effects result from ignoring ECOFF symbol)
   2506      2) create it, only if lookup for existing symbol in ELF's minimal
   2507      symbols fails
   2508      (inefficient;
   2509      assumes no side-effects result from ignoring ECOFF symbol)
   2510      3) create it, but lookup ELF's minimal symbol and use it's section
   2511      during relocation, then modify "uniqify" phase to merge and
   2512      eliminate the duplicate symbol
   2513      (highly inefficient)
   2514 
   2515      I've implemented #1 here...
   2516      Skip the creation of the minimal symbols based on the ECOFF
   2517      symbol table.  */
   2518 
   2519   /* Pass 2 over external syms: fill in external symbols.  */
   2520   ext_in = ext_block;
   2521   ext_in_end = ext_in + hdr->iextMax;
   2522   for (; ext_in < ext_in_end; ext_in++)
   2523     {
   2524       enum minimal_symbol_type ms_type = mst_text;
   2525       CORE_ADDR svalue = ext_in->asym.value;
   2526 
   2527       /* The Irix 5 native tools seem to sometimes generate bogus
   2528          external symbols.  */
   2529       if (ext_in->ifd < -1 || ext_in->ifd >= hdr->ifdMax)
   2530 	{
   2531 	  complaint (&symfile_complaints,
   2532 		     _("bad ifd for external symbol: %d (max %ld)"),
   2533 		     ext_in->ifd, hdr->ifdMax);
   2534 	  continue;
   2535 	}
   2536       if (ext_in->asym.iss < 0 || ext_in->asym.iss >= hdr->issExtMax)
   2537 	{
   2538 	  complaint (&symfile_complaints,
   2539 		     _("bad iss for external symbol: %ld (max %ld)"),
   2540 		     ext_in->asym.iss, hdr->issExtMax);
   2541 	  continue;
   2542 	}
   2543 
   2544       extern_tab[fdr_to_pst[ext_in->ifd].globals_offset
   2545 		 + fdr_to_pst[ext_in->ifd].n_globals++] = *ext_in;
   2546 
   2547 
   2548       if (SC_IS_UNDEF (ext_in->asym.sc) || ext_in->asym.sc == scNil)
   2549 	continue;
   2550 
   2551 
   2552       /* Pass 3 over files, over local syms: fill in static symbols.  */
   2553       name = debug_info->ssext + ext_in->asym.iss;
   2554 
   2555       /* Process ECOFF Symbol Types and Storage Classes.  */
   2556       switch (ext_in->asym.st)
   2557 	{
   2558 	case stProc:
   2559 	  /* Beginnning of Procedure */
   2560 	  break;
   2561 	case stStaticProc:
   2562 	  /* Load time only static procs */
   2563 	  ms_type = mst_file_text;
   2564 	  break;
   2565 	case stGlobal:
   2566 	  /* External symbol */
   2567 	  if (SC_IS_COMMON (ext_in->asym.sc))
   2568 	    {
   2569 	      /* The value of a common symbol is its size, not its address.
   2570 	         Ignore it.  */
   2571 	      continue;
   2572 	    }
   2573 	  else if (SC_IS_DATA (ext_in->asym.sc))
   2574 	    {
   2575 	      ms_type = mst_data;
   2576 	    }
   2577 	  else if (SC_IS_BSS (ext_in->asym.sc))
   2578 	    {
   2579 	      ms_type = mst_bss;
   2580 	    }
   2581           else if (SC_IS_SBSS (ext_in->asym.sc))
   2582             {
   2583               ms_type = mst_bss;
   2584             }
   2585 	  else
   2586 	    ms_type = mst_abs;
   2587 	  break;
   2588 	case stLabel:
   2589 	  /* Label */
   2590 
   2591           /* On certain platforms, some extra label symbols can be
   2592              generated by the linker.  One possible usage for this kind
   2593              of symbols is to represent the address of the begining of a
   2594              given section.  For instance, on Tru64 5.1, the address of
   2595              the _ftext label is the start address of the .text section.
   2596 
   2597              The storage class of these symbols is usually directly
   2598              related to the section to which the symbol refers.  For
   2599              instance, on Tru64 5.1, the storage class for the _fdata
   2600              label is scData, refering to the .data section.
   2601 
   2602              It is actually possible that the section associated to the
   2603              storage class of the label does not exist.  On True64 5.1
   2604              for instance, the libm.so shared library does not contain
   2605              any .data section, although it contains a _fpdata label
   2606              which storage class is scData...  Since these symbols are
   2607              usually useless for the debugger user anyway, we just
   2608              discard these symbols.  */
   2609 
   2610 	  if (SC_IS_TEXT (ext_in->asym.sc))
   2611 	    {
   2612               if (objfile->sect_index_text == -1)
   2613                 continue;
   2614 
   2615 	      ms_type = mst_file_text;
   2616 	    }
   2617 	  else if (SC_IS_DATA (ext_in->asym.sc))
   2618 	    {
   2619               if (objfile->sect_index_data == -1)
   2620                 continue;
   2621 
   2622 	      ms_type = mst_file_data;
   2623 	    }
   2624 	  else if (SC_IS_BSS (ext_in->asym.sc))
   2625 	    {
   2626               if (objfile->sect_index_bss == -1)
   2627                 continue;
   2628 
   2629 	      ms_type = mst_file_bss;
   2630 	    }
   2631           else if (SC_IS_SBSS (ext_in->asym.sc))
   2632             {
   2633               const int sbss_sect_index = get_section_index (objfile, ".sbss");
   2634 
   2635               if (sbss_sect_index == -1)
   2636                 continue;
   2637 
   2638               ms_type = mst_file_bss;
   2639             }
   2640 	  else
   2641 	    ms_type = mst_abs;
   2642 	  break;
   2643 	case stLocal:
   2644 	case stNil:
   2645 	  /* The alpha has the section start addresses in stLocal symbols
   2646 	     whose name starts with a `.'.  Skip those but complain for all
   2647 	     other stLocal symbols.
   2648 	     Irix6 puts the section start addresses in stNil symbols, skip
   2649 	     those too.  */
   2650 	  if (name[0] == '.')
   2651 	    continue;
   2652 	  /* Fall through.  */
   2653 	default:
   2654 	  ms_type = mst_unknown;
   2655 	  unknown_ext_complaint (name);
   2656 	}
   2657       if (!ECOFF_IN_ELF (cur_bfd))
   2658         record_minimal_symbol (name, svalue, ms_type, ext_in->asym.sc,
   2659                                objfile);
   2660     }
   2661 
   2662   /* Pass 3 over files, over local syms: fill in static symbols.  */
   2663   for (f_idx = 0; f_idx < hdr->ifdMax; f_idx++)
   2664     {
   2665       struct partial_symtab *save_pst;
   2666       EXTR *ext_ptr;
   2667       CORE_ADDR textlow;
   2668 
   2669       cur_fdr = fh = debug_info->fdr + f_idx;
   2670 
   2671       if (fh->csym == 0)
   2672 	{
   2673 	  fdr_to_pst[f_idx].pst = NULL;
   2674 	  continue;
   2675 	}
   2676 
   2677       /* Determine the start address for this object file from the
   2678          file header and relocate it, except for Irix 5.2 zero fh->adr.  */
   2679       if (fh->cpd)
   2680 	{
   2681 	  textlow = fh->adr;
   2682 	  if (relocatable || textlow != 0)
   2683 	    textlow += ANOFFSET (objfile->section_offsets,
   2684 				 SECT_OFF_TEXT (objfile));
   2685 	}
   2686       else
   2687 	textlow = 0;
   2688       pst = start_psymtab_common (objfile,
   2689 				  fdr_name (fh),
   2690 				  textlow,
   2691 				  objfile->global_psymbols.next,
   2692 				  objfile->static_psymbols.next);
   2693       pst->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
   2694 						sizeof (struct symloc));
   2695       memset (pst->read_symtab_private, 0, sizeof (struct symloc));
   2696 
   2697       save_pst = pst;
   2698       FDR_IDX (pst) = f_idx;
   2699       CUR_BFD (pst) = cur_bfd;
   2700       DEBUG_SWAP (pst) = debug_swap;
   2701       DEBUG_INFO (pst) = debug_info;
   2702       PENDING_LIST (pst) = pending_list;
   2703 
   2704       /* The way to turn this into a symtab is to call...  */
   2705       pst->read_symtab = mdebug_read_symtab;
   2706 
   2707       /* Set up language for the pst.
   2708          The language from the FDR is used if it is unambigious (e.g. cfront
   2709          with native cc and g++ will set the language to C).
   2710          Otherwise we have to deduce the language from the filename.
   2711          Native ecoff has every header file in a separate FDR, so
   2712          deduce_language_from_filename will return language_unknown for
   2713          a header file, which is not what we want.
   2714          But the FDRs for the header files are after the FDR for the source
   2715          file, so we can assign the language of the source file to the
   2716          following header files.  Then we save the language in the private
   2717          pst data so that we can reuse it when building symtabs.  */
   2718       prev_language = psymtab_language;
   2719 
   2720       switch (fh->lang)
   2721 	{
   2722 	case langCplusplusV2:
   2723 	  psymtab_language = language_cplus;
   2724 	  break;
   2725 	default:
   2726 	  psymtab_language = deduce_language_from_filename (fdr_name (fh));
   2727 	  break;
   2728 	}
   2729       if (psymtab_language == language_unknown)
   2730 	psymtab_language = prev_language;
   2731       PST_PRIVATE (pst)->pst_language = psymtab_language;
   2732 
   2733       pst->texthigh = pst->textlow;
   2734 
   2735       /* For stabs-in-ecoff files, the second symbol must be @stab.
   2736          This symbol is emitted by mips-tfile to signal that the
   2737          current object file uses encapsulated stabs instead of mips
   2738          ecoff for local symbols.  (It is the second symbol because
   2739          the first symbol is the stFile used to signal the start of a
   2740          file).  */
   2741       processing_gcc_compilation = 0;
   2742       if (fh->csym >= 2)
   2743 	{
   2744 	  (*swap_sym_in) (cur_bfd,
   2745 			  ((char *) debug_info->external_sym
   2746 			   + (fh->isymBase + 1) * external_sym_size),
   2747 			  &sh);
   2748 	  if (strcmp (debug_info->ss + fh->issBase + sh.iss,
   2749 		      stabs_symbol) == 0)
   2750 	    processing_gcc_compilation = 2;
   2751 	}
   2752 
   2753       if (processing_gcc_compilation != 0)
   2754 	{
   2755 	  for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
   2756 	    {
   2757 	      int type_code;
   2758 	      const char *namestring;
   2759 
   2760 	      (*swap_sym_in) (cur_bfd,
   2761 			      (((char *) debug_info->external_sym)
   2762 			    + (fh->isymBase + cur_sdx) * external_sym_size),
   2763 			      &sh);
   2764 	      type_code = ECOFF_UNMARK_STAB (sh.index);
   2765 	      if (!ECOFF_IS_STAB (&sh))
   2766 		{
   2767 		  if (sh.st == stProc || sh.st == stStaticProc)
   2768 		    {
   2769 		      CORE_ADDR procaddr;
   2770 		      long isym;
   2771 
   2772 		      if (sh.st == stStaticProc)
   2773 			{
   2774 			  namestring = debug_info->ss + fh->issBase + sh.iss;
   2775                           record_minimal_symbol (namestring, sh.value,
   2776                                                  mst_file_text, sh.sc,
   2777                                                  objfile);
   2778 			}
   2779 		      sh.value += ANOFFSET (objfile->section_offsets,
   2780 					    SECT_OFF_TEXT (objfile));
   2781 		      procaddr = sh.value;
   2782 
   2783 		      isym = AUX_GET_ISYM (fh->fBigendian,
   2784 					   (debug_info->external_aux
   2785 					    + fh->iauxBase
   2786 					    + sh.index));
   2787 		      (*swap_sym_in) (cur_bfd,
   2788 				      ((char *) debug_info->external_sym
   2789 				       + ((fh->isymBase + isym - 1)
   2790 					  * external_sym_size)),
   2791 				      &sh);
   2792 		      if (sh.st == stEnd)
   2793 			{
   2794 			  CORE_ADDR high = procaddr + sh.value;
   2795 
   2796 			  /* Kludge for Irix 5.2 zero fh->adr.  */
   2797 			  if (!relocatable
   2798 			  && (pst->textlow == 0 || procaddr < pst->textlow))
   2799 			    pst->textlow = procaddr;
   2800 			  if (high > pst->texthigh)
   2801 			    pst->texthigh = high;
   2802 			}
   2803 		    }
   2804 		  else if (sh.st == stStatic)
   2805 		    {
   2806 		      switch (sh.sc)
   2807 			{
   2808 			case scUndefined:
   2809 			case scSUndefined:
   2810 			case scNil:
   2811 			case scAbs:
   2812 			  break;
   2813 
   2814 			case scData:
   2815 			case scSData:
   2816 			case scRData:
   2817 			case scPData:
   2818 			case scXData:
   2819 			  namestring = debug_info->ss + fh->issBase + sh.iss;
   2820                           record_minimal_symbol (namestring, sh.value,
   2821                                                  mst_file_data, sh.sc,
   2822                                                  objfile);
   2823 			  sh.value += ANOFFSET (objfile->section_offsets,
   2824 						SECT_OFF_DATA (objfile));
   2825 			  break;
   2826 
   2827 			default:
   2828 			  /* FIXME!  Shouldn't this use cases for bss,
   2829 			     then have the default be abs?  */
   2830 			  namestring = debug_info->ss + fh->issBase + sh.iss;
   2831                           record_minimal_symbol (namestring, sh.value,
   2832                                                  mst_file_bss, sh.sc,
   2833                                                  objfile);
   2834 			  sh.value += ANOFFSET (objfile->section_offsets,
   2835 						SECT_OFF_BSS (objfile));
   2836 			  break;
   2837 			}
   2838 		    }
   2839 		  continue;
   2840 		}
   2841 	      /* Handle stabs continuation.  */
   2842 	      {
   2843 		char *stabstring = debug_info->ss + fh->issBase + sh.iss;
   2844 		int len = strlen (stabstring);
   2845 
   2846 		while (stabstring[len - 1] == '\\')
   2847 		  {
   2848 		    SYMR sh2;
   2849 		    char *stabstring1 = stabstring;
   2850 		    char *stabstring2;
   2851 		    int len2;
   2852 
   2853 		    /* Ignore continuation char from 1st string.  */
   2854 		    len--;
   2855 
   2856 		    /* Read next stabstring.  */
   2857 		    cur_sdx++;
   2858 		    (*swap_sym_in) (cur_bfd,
   2859 				    (((char *) debug_info->external_sym)
   2860 				     + (fh->isymBase + cur_sdx)
   2861 				     * external_sym_size),
   2862 				    &sh2);
   2863 		    stabstring2 = debug_info->ss + fh->issBase + sh2.iss;
   2864 		    len2 = strlen (stabstring2);
   2865 
   2866 		    /* Concatinate stabstring2 with stabstring1.  */
   2867 		    if (stabstring
   2868 		     && stabstring != debug_info->ss + fh->issBase + sh.iss)
   2869 		      stabstring
   2870 			= (char *) xrealloc (stabstring, len + len2 + 1);
   2871 		    else
   2872 		      {
   2873 			stabstring = (char *) xmalloc (len + len2 + 1);
   2874 			strcpy (stabstring, stabstring1);
   2875 		      }
   2876 		    strcpy (stabstring + len, stabstring2);
   2877 		    len += len2;
   2878 		  }
   2879 
   2880 		switch (type_code)
   2881 		  {
   2882 		    char *p;
   2883 
   2884 		    /* Standard, external, non-debugger, symbols.  */
   2885 
   2886 		  case N_TEXT | N_EXT:
   2887 		  case N_NBTEXT | N_EXT:
   2888 		    sh.value += ANOFFSET (objfile->section_offsets,
   2889 					  SECT_OFF_TEXT (objfile));
   2890 		    goto record_it;
   2891 
   2892 		  case N_DATA | N_EXT:
   2893 		  case N_NBDATA | N_EXT:
   2894 		    sh.value += ANOFFSET (objfile->section_offsets,
   2895 					  SECT_OFF_DATA (objfile));
   2896 		    goto record_it;
   2897 
   2898 		  case N_BSS:
   2899 		  case N_BSS | N_EXT:
   2900 		  case N_NBBSS | N_EXT:
   2901 		  case N_SETV | N_EXT:		/* FIXME, is this in BSS?  */
   2902 		    sh.value += ANOFFSET (objfile->section_offsets,
   2903 					  SECT_OFF_BSS (objfile));
   2904 		    goto record_it;
   2905 
   2906 		  case N_ABS | N_EXT:
   2907 		  record_it:
   2908 		    continue;
   2909 
   2910 		  /* Standard, local, non-debugger, symbols.  */
   2911 
   2912 		  case N_NBTEXT:
   2913 
   2914 		    /* We need to be able to deal with both N_FN or
   2915 		       N_TEXT, because we have no way of knowing
   2916 		       whether the sys-supplied ld or GNU ld was used
   2917 		       to make the executable.  Sequents throw in
   2918 		       another wrinkle -- they renumbered N_FN.  */
   2919 
   2920 		  case N_FN:
   2921 		  case N_FN_SEQ:
   2922 		  case N_TEXT:
   2923 		    continue;
   2924 
   2925 		  case N_DATA:
   2926 		    sh.value += ANOFFSET (objfile->section_offsets,
   2927 					  SECT_OFF_DATA (objfile));
   2928 		    goto record_it;
   2929 
   2930 		  case N_UNDF | N_EXT:
   2931 		    continue;		/* Just undefined, not COMMON.  */
   2932 
   2933 		  case N_UNDF:
   2934 		    continue;
   2935 
   2936 		    /* Lots of symbol types we can just ignore.  */
   2937 
   2938 		  case N_ABS:
   2939 		  case N_NBDATA:
   2940 		  case N_NBBSS:
   2941 		    continue;
   2942 
   2943 		    /* Keep going . . .  */
   2944 
   2945 		    /*
   2946 		     * Special symbol types for GNU
   2947 		     */
   2948 		  case N_INDR:
   2949 		  case N_INDR | N_EXT:
   2950 		  case N_SETA:
   2951 		  case N_SETA | N_EXT:
   2952 		  case N_SETT:
   2953 		  case N_SETT | N_EXT:
   2954 		  case N_SETD:
   2955 		  case N_SETD | N_EXT:
   2956 		  case N_SETB:
   2957 		  case N_SETB | N_EXT:
   2958 		  case N_SETV:
   2959 		    continue;
   2960 
   2961 		    /*
   2962 		     * Debugger symbols
   2963 		     */
   2964 
   2965 		  case N_SO:
   2966 		    {
   2967 		      static int prev_so_symnum = -10;
   2968 		      const char *p;
   2969 
   2970 		      /* A zero value is probably an indication for the
   2971 			 SunPRO 3.0 compiler.  dbx_end_psymtab explicitly tests
   2972 			 for zero, so don't relocate it.  */
   2973 
   2974 		      if (sh.value == 0
   2975 			  && gdbarch_sofun_address_maybe_missing (gdbarch))
   2976 			textlow_not_set = 1;
   2977 		      else
   2978 			textlow_not_set = 0;
   2979 
   2980 		      if (prev_so_symnum != symnum - 1)
   2981 			{		/* Here if prev stab wasn't N_SO.  */
   2982 			  if (pst)
   2983 			    {
   2984 			      pst = (struct partial_symtab *) 0;
   2985 			      includes_used = 0;
   2986 			      dependencies_used = 0;
   2987 			    }
   2988 			}
   2989 
   2990 		      prev_so_symnum = symnum;
   2991 
   2992 		      /* End the current partial symtab and start a
   2993 			 new one.  */
   2994 
   2995 		      /* SET_NAMESTRING ();*/
   2996 		      namestring = stabstring;
   2997 
   2998 		      /* Null name means end of .o file.  Don't start a new
   2999 			 one.  */
   3000 		      if (*namestring == '\000')
   3001 			continue;
   3002 
   3003 		      /* Some compilers (including gcc) emit a pair of
   3004 			 initial N_SOs.  The first one is a directory name;
   3005 			 the second the file name.  If pst exists, is
   3006 			 empty, and has a filename ending in '/', we assume
   3007 			 the previous N_SO was a directory name.  */
   3008 		      p = lbasename (namestring);
   3009 		      if (p != namestring && *p == '\000')
   3010 			continue;		/* Simply ignore directory
   3011 						   name SOs.  */
   3012 
   3013 		      /* Some other compilers (C++ ones in particular) emit
   3014 			 useless SOs for non-existant .c files.  We ignore
   3015 			 all subsequent SOs that immediately follow the
   3016 			 first.  */
   3017 
   3018 		      if (!pst)
   3019 			pst = save_pst;
   3020 		      continue;
   3021 		    }
   3022 
   3023 		  case N_BINCL:
   3024 		    continue;
   3025 
   3026 		  case N_SOL:
   3027 		    {
   3028 		      enum language tmp_language;
   3029 
   3030 		      /* Mark down an include file in the current psymtab.  */
   3031 
   3032 		      /* SET_NAMESTRING (); */
   3033 		      namestring = stabstring;
   3034 
   3035 		      tmp_language
   3036 			= deduce_language_from_filename (namestring);
   3037 
   3038 		      /* Only change the psymtab's language if we've
   3039 			 learned something useful (eg. tmp_language is not
   3040 			 language_unknown).  In addition, to match what
   3041 			 start_subfile does, never change from C++ to
   3042 			 C.  */
   3043 		      if (tmp_language != language_unknown
   3044 			  && (tmp_language != language_c
   3045 			      || psymtab_language != language_cplus))
   3046 			psymtab_language = tmp_language;
   3047 
   3048 		      /* In C++, one may expect the same filename to come
   3049 			 round many times, when code is coming alternately
   3050 			 from the main file and from inline functions in
   3051 			 other files.  So I check to see if this is a file
   3052 			 we've seen before -- either the main source file,
   3053 			 or a previously included file.
   3054 
   3055 			 This seems to be a lot of time to be spending on
   3056 			 N_SOL, but things like "break c-exp.y:435" need to
   3057 			 work (I suppose the psymtab_include_list could be
   3058 			 hashed or put in a binary tree, if profiling shows
   3059 			 this is a major hog).  */
   3060 		      if (pst && filename_cmp (namestring, pst->filename) == 0)
   3061 			continue;
   3062 
   3063 		      {
   3064 			int i;
   3065 
   3066 			for (i = 0; i < includes_used; i++)
   3067 			  if (filename_cmp (namestring,
   3068 					    psymtab_include_list[i]) == 0)
   3069 			    {
   3070 			      i = -1;
   3071 			      break;
   3072 			    }
   3073 			if (i == -1)
   3074 			  continue;
   3075 		      }
   3076 
   3077 		      psymtab_include_list[includes_used++] = namestring;
   3078 		      if (includes_used >= includes_allocated)
   3079 			{
   3080 			  const char **orig = psymtab_include_list;
   3081 
   3082 			  psymtab_include_list = (const char **)
   3083 			    alloca ((includes_allocated *= 2) *
   3084 				    sizeof (const char *));
   3085 			  memcpy (psymtab_include_list, orig,
   3086 				  includes_used * sizeof (const char *));
   3087 			}
   3088 		      continue;
   3089 		    }
   3090 		  case N_LSYM:	    /* Typedef or automatic variable.  */
   3091 		  case N_STSYM:	    /* Data seg var -- static  */
   3092 		  case N_LCSYM:	    /* BSS      "  */
   3093 		  case N_ROSYM:	    /* Read-only data seg var -- static.  */
   3094 		  case N_NBSTS:	    /* Gould nobase.  */
   3095 		  case N_NBLCS:	    /* symbols.  */
   3096 		  case N_FUN:
   3097 		  case N_GSYM:	    /* Global (extern) variable; can be
   3098 				       data or bss (sigh FIXME).  */
   3099 
   3100 		    /* Following may probably be ignored; I'll leave them here
   3101 		       for now (until I do Pascal and Modula 2 extensions).  */
   3102 
   3103 		  case N_PC:	    /* I may or may not need this; I
   3104 				       suspect not.  */
   3105 		  case N_M2C:	    /* I suspect that I can ignore this
   3106 				       here.  */
   3107 		  case N_SCOPE:	    /* Same.  */
   3108 
   3109 		    /*    SET_NAMESTRING (); */
   3110 		    namestring = stabstring;
   3111 		    p = (char *) strchr (namestring, ':');
   3112 		    if (!p)
   3113 		      continue;	    /* Not a debugging symbol.  */
   3114 
   3115 
   3116 
   3117 		    /* Main processing section for debugging symbols which
   3118 		       the initial read through the symbol tables needs to
   3119 		       worry about.  If we reach this point, the symbol
   3120 		       which we are considering is definitely one we are
   3121 		       interested in.  p must also contain the (valid)
   3122 		       index into the namestring which indicates the
   3123 		       debugging type symbol.  */
   3124 
   3125 		    switch (p[1])
   3126 		      {
   3127 		      case 'S':
   3128 			sh.value += ANOFFSET (objfile->section_offsets,
   3129 					      SECT_OFF_DATA (objfile));
   3130 
   3131 			if (gdbarch_static_transform_name_p (gdbarch))
   3132 			  namestring = gdbarch_static_transform_name
   3133 					 (gdbarch, namestring);
   3134 
   3135 			add_psymbol_to_list (namestring, p - namestring, 1,
   3136 					     VAR_DOMAIN, LOC_STATIC,
   3137 					     &objfile->static_psymbols,
   3138 					     sh.value,
   3139 					     psymtab_language, objfile);
   3140 			continue;
   3141 		      case 'G':
   3142 			sh.value += ANOFFSET (objfile->section_offsets,
   3143 					      SECT_OFF_DATA (objfile));
   3144 			/* The addresses in these entries are reported
   3145 			   to be wrong.  See the code that reads 'G's
   3146 			   for symtabs.  */
   3147 			add_psymbol_to_list (namestring, p - namestring, 1,
   3148 					     VAR_DOMAIN, LOC_STATIC,
   3149 					     &objfile->global_psymbols,
   3150 					     sh.value,
   3151 					     psymtab_language, objfile);
   3152 			continue;
   3153 
   3154 		      case 'T':
   3155 			/* When a 'T' entry is defining an anonymous enum, it
   3156 			   may have a name which is the empty string, or a
   3157 			   single space.  Since they're not really defining a
   3158 			   symbol, those shouldn't go in the partial symbol
   3159 			   table.  We do pick up the elements of such enums at
   3160 			   'check_enum:', below.  */
   3161 			if (p >= namestring + 2
   3162 			    || (p == namestring + 1
   3163 				&& namestring[0] != ' '))
   3164 			  {
   3165 			    add_psymbol_to_list (namestring, p - namestring, 1,
   3166 						 STRUCT_DOMAIN, LOC_TYPEDEF,
   3167 						 &objfile->static_psymbols,
   3168 						 0, psymtab_language, objfile);
   3169 			    if (p[2] == 't')
   3170 			      {
   3171 				/* Also a typedef with the same name.  */
   3172 				add_psymbol_to_list (namestring,
   3173 						     p - namestring, 1,
   3174 						     VAR_DOMAIN, LOC_TYPEDEF,
   3175 						     &objfile->static_psymbols,
   3176 						     0, psymtab_language,
   3177 						     objfile);
   3178 				p += 1;
   3179 			      }
   3180 			  }
   3181 			goto check_enum;
   3182 		      case 't':
   3183 			if (p != namestring)	/* a name is there, not
   3184 						   just :T...  */
   3185 			  {
   3186 			    add_psymbol_to_list (namestring, p - namestring, 1,
   3187 						 VAR_DOMAIN, LOC_TYPEDEF,
   3188 						 &objfile->static_psymbols,
   3189 						 0, psymtab_language, objfile);
   3190 			  }
   3191 		      check_enum:
   3192 			/* If this is an enumerated type, we need to add
   3193 			   all the enum constants to the partial symbol
   3194 			   table.  This does not cover enums without names,
   3195 			   e.g. "enum {a, b} c;" in C, but fortunately
   3196 			   those are rare.  There is no way for GDB to find
   3197 			   those from the enum type without spending too
   3198 			   much time on it.  Thus to solve this problem,
   3199 			   the compiler needs to put out the enum in a
   3200 			   nameless type.  GCC2 does this.  */
   3201 
   3202 			/* We are looking for something of the form
   3203 			   <name> ":" ("t" | "T") [<number> "="] "e"
   3204 			   {<constant> ":" <value> ","} ";".  */
   3205 
   3206 			/* Skip over the colon and the 't' or 'T'.  */
   3207 			p += 2;
   3208 			/* This type may be given a number.  Also, numbers
   3209 			   can come in pairs like (0,26).  Skip over it.  */
   3210 			while ((*p >= '0' && *p <= '9')
   3211 			       || *p == '(' || *p == ',' || *p == ')'
   3212 			       || *p == '=')
   3213 			  p++;
   3214 
   3215 			if (*p++ == 'e')
   3216 			  {
   3217 			    /* The aix4 compiler emits extra crud before
   3218 			       the members.  */
   3219 			    if (*p == '-')
   3220 			      {
   3221 				/* Skip over the type (?).  */
   3222 				while (*p != ':')
   3223 				  p++;
   3224 
   3225 				/* Skip over the colon.  */
   3226 				p++;
   3227 			      }
   3228 
   3229 			    /* We have found an enumerated type.  */
   3230 			    /* According to comments in read_enum_type
   3231 			       a comma could end it instead of a semicolon.
   3232 			       I don't know where that happens.
   3233 			       Accept either.  */
   3234 			    while (*p && *p != ';' && *p != ',')
   3235 			      {
   3236 				char *q;
   3237 
   3238 				/* Check for and handle cretinous dbx
   3239 				   symbol name continuation!  */
   3240 				if (*p == '\\' || (*p == '?' && p[1] == '\0'))
   3241 				  p = next_symbol_text (objfile);
   3242 
   3243 				/* Point to the character after the name
   3244 				   of the enum constant.  */
   3245 				for (q = p; *q && *q != ':'; q++)
   3246 				  ;
   3247 				/* Note that the value doesn't matter for
   3248 				   enum constants in psymtabs, just in
   3249 				   symtabs.  */
   3250 				add_psymbol_to_list (p, q - p, 1,
   3251 						     VAR_DOMAIN, LOC_CONST,
   3252 						     &objfile->static_psymbols,
   3253 						     0, psymtab_language,
   3254 						     objfile);
   3255 				/* Point past the name.  */
   3256 				p = q;
   3257 				/* Skip over the value.  */
   3258 				while (*p && *p != ',')
   3259 				  p++;
   3260 				/* Advance past the comma.  */
   3261 				if (*p)
   3262 				  p++;
   3263 			      }
   3264 			  }
   3265 			continue;
   3266 		      case 'c':
   3267 			/* Constant, e.g. from "const" in Pascal.  */
   3268 			add_psymbol_to_list (namestring, p - namestring, 1,
   3269 					     VAR_DOMAIN, LOC_CONST,
   3270 					     &objfile->static_psymbols,
   3271 					     0, psymtab_language, objfile);
   3272 			continue;
   3273 
   3274 		      case 'f':
   3275 			if (! pst)
   3276 			  {
   3277 			    int name_len = p - namestring;
   3278 			    char *name = (char *) xmalloc (name_len + 1);
   3279 
   3280 			    memcpy (name, namestring, name_len);
   3281 			    name[name_len] = '\0';
   3282 			    function_outside_compilation_unit_complaint (name);
   3283 			    xfree (name);
   3284 			  }
   3285 			sh.value += ANOFFSET (objfile->section_offsets,
   3286 					      SECT_OFF_TEXT (objfile));
   3287 			add_psymbol_to_list (namestring, p - namestring, 1,
   3288 					     VAR_DOMAIN, LOC_BLOCK,
   3289 					     &objfile->static_psymbols,
   3290 					     sh.value,
   3291 					     psymtab_language, objfile);
   3292 			continue;
   3293 
   3294 			/* Global functions were ignored here, but now they
   3295 			   are put into the global psymtab like one would
   3296 			   expect.  They're also in the minimal symbol
   3297 			   table.  */
   3298 		      case 'F':
   3299 			if (! pst)
   3300 			  {
   3301 			    int name_len = p - namestring;
   3302 			    char *name = (char *) xmalloc (name_len + 1);
   3303 
   3304 			    memcpy (name, namestring, name_len);
   3305 			    name[name_len] = '\0';
   3306 			    function_outside_compilation_unit_complaint (name);
   3307 			    xfree (name);
   3308 			  }
   3309 			sh.value += ANOFFSET (objfile->section_offsets,
   3310 					      SECT_OFF_TEXT (objfile));
   3311 			add_psymbol_to_list (namestring, p - namestring, 1,
   3312 					     VAR_DOMAIN, LOC_BLOCK,
   3313 					     &objfile->global_psymbols,
   3314 					     sh.value,
   3315 					     psymtab_language, objfile);
   3316 			continue;
   3317 
   3318 			/* Two things show up here (hopefully); static
   3319 			   symbols of local scope (static used inside
   3320 			   braces) or extensions of structure symbols.  We
   3321 			   can ignore both.  */
   3322 		      case 'V':
   3323 		      case '(':
   3324 		      case '0':
   3325 		      case '1':
   3326 		      case '2':
   3327 		      case '3':
   3328 		      case '4':
   3329 		      case '5':
   3330 		      case '6':
   3331 		      case '7':
   3332 		      case '8':
   3333 		      case '9':
   3334 		      case '-':
   3335 		      case '#':		/* For symbol identification (used
   3336 					   in live ranges).  */
   3337 			continue;
   3338 
   3339 		      case ':':
   3340 			/* It is a C++ nested symbol.  We don't need to
   3341 			   record it (I don't think); if we try to look up
   3342 			   foo::bar::baz, then symbols for the symtab
   3343 			   containing foo should get read in, I think.  */
   3344 			/* Someone says sun cc puts out symbols like
   3345 			   /foo/baz/maclib::/usr/local/bin/maclib,
   3346 			   which would get here with a symbol type of ':'.  */
   3347 			continue;
   3348 
   3349 		      default:
   3350 			/* Unexpected symbol descriptor.  The second and
   3351 			   subsequent stabs of a continued stab can show up
   3352 			   here.  The question is whether they ever can
   3353 			   mimic a normal stab--it would be nice if not,
   3354 			   since we certainly don't want to spend the time
   3355 			   searching to the end of every string looking for
   3356 			   a backslash.  */
   3357 
   3358 			complaint (&symfile_complaints,
   3359 				   _("unknown symbol descriptor `%c'"), p[1]);
   3360 
   3361 			/* Ignore it; perhaps it is an extension that we don't
   3362 			   know about.  */
   3363 			continue;
   3364 		      }
   3365 
   3366 		  case N_EXCL:
   3367 		    continue;
   3368 
   3369 		  case N_ENDM:
   3370 		    /* Solaris 2 end of module, finish current partial
   3371 		       symbol table.  dbx_end_psymtab will set
   3372 		       pst->texthigh to the proper value, which is
   3373 		       necessary if a module compiled without
   3374 		       debugging info follows this module.  */
   3375 		    if (pst
   3376 			&& gdbarch_sofun_address_maybe_missing (gdbarch))
   3377 		      {
   3378 			pst = (struct partial_symtab *) 0;
   3379 			includes_used = 0;
   3380 			dependencies_used = 0;
   3381 		      }
   3382 		    continue;
   3383 
   3384 		  case N_RBRAC:
   3385 		    if (sh.value > save_pst->texthigh)
   3386 		      save_pst->texthigh = sh.value;
   3387 		    continue;
   3388 		  case N_EINCL:
   3389 		  case N_DSLINE:
   3390 		  case N_BSLINE:
   3391 		  case N_SSYM:		/* Claim: Structure or union
   3392 					   element.  Hopefully, I can
   3393 					   ignore this.  */
   3394 		  case N_ENTRY:		/* Alternate entry point; can
   3395 					   ignore.  */
   3396 		  case N_MAIN:		/* Can definitely ignore this.   */
   3397 		  case N_CATCH:		/* These are GNU C++ extensions.  */
   3398 		  case N_EHDECL:	/* that can safely be ignored here.  */
   3399 		  case N_LENG:
   3400 		  case N_BCOMM:
   3401 		  case N_ECOMM:
   3402 		  case N_ECOML:
   3403 		  case N_FNAME:
   3404 		  case N_SLINE:
   3405 		  case N_RSYM:
   3406 		  case N_PSYM:
   3407 		  case N_LBRAC:
   3408 		  case N_NSYMS:		/* Ultrix 4.0: symbol count */
   3409 		  case N_DEFD:			/* GNU Modula-2 */
   3410 		  case N_ALIAS:		/* SunPro F77: alias name, ignore
   3411 					   for now.  */
   3412 
   3413 		  case N_OBJ:		/* Useless types from Solaris.  */
   3414 		  case N_OPT:
   3415 		    /* These symbols aren't interesting; don't worry about
   3416 		       them.  */
   3417 
   3418 		    continue;
   3419 
   3420 		  default:
   3421 		    /* If we haven't found it yet, ignore it.  It's
   3422 		       probably some new type we don't know about yet.  */
   3423 		    complaint (&symfile_complaints,
   3424 			       _("unknown symbol type %s"),
   3425 			       hex_string (type_code)); /* CUR_SYMBOL_TYPE */
   3426 		    continue;
   3427 		  }
   3428 		if (stabstring
   3429 		    && stabstring != debug_info->ss + fh->issBase + sh.iss)
   3430 		  xfree (stabstring);
   3431 	      }
   3432 	      /* end - Handle continuation */
   3433 	    }
   3434 	}
   3435       else
   3436 	{
   3437 	  for (cur_sdx = 0; cur_sdx < fh->csym;)
   3438 	    {
   3439 	      char *name;
   3440 	      enum address_class theclass;
   3441 	      CORE_ADDR minsym_value;
   3442 
   3443 	      (*swap_sym_in) (cur_bfd,
   3444 			      ((char *) debug_info->external_sym
   3445 			       + ((fh->isymBase + cur_sdx)
   3446 				  * external_sym_size)),
   3447 			      &sh);
   3448 
   3449 	      if (ECOFF_IS_STAB (&sh))
   3450 		{
   3451 		  cur_sdx++;
   3452 		  continue;
   3453 		}
   3454 
   3455 	      /* Non absolute static symbols go into the minimal table.  */
   3456 	      if (SC_IS_UNDEF (sh.sc) || sh.sc == scNil
   3457 		  || (sh.index == indexNil
   3458 		      && (sh.st != stStatic || sh.sc == scAbs)))
   3459 		{
   3460 		  /* FIXME, premature?  */
   3461 		  cur_sdx++;
   3462 		  continue;
   3463 		}
   3464 
   3465 	      name = debug_info->ss + fh->issBase + sh.iss;
   3466 
   3467 	      minsym_value = sh.value;
   3468 
   3469 	      switch (sh.sc)
   3470 		{
   3471 		case scText:
   3472 		case scRConst:
   3473 		  /* The value of a stEnd symbol is the displacement from the
   3474 		     corresponding start symbol value, do not relocate it.  */
   3475 		  if (sh.st != stEnd)
   3476 		    sh.value += ANOFFSET (objfile->section_offsets,
   3477 					  SECT_OFF_TEXT (objfile));
   3478 		  break;
   3479 		case scData:
   3480 		case scSData:
   3481 		case scRData:
   3482 		case scPData:
   3483 		case scXData:
   3484 		  sh.value += ANOFFSET (objfile->section_offsets,
   3485 					SECT_OFF_DATA (objfile));
   3486 		  break;
   3487 		case scBss:
   3488 		case scSBss:
   3489 		  sh.value += ANOFFSET (objfile->section_offsets,
   3490 					SECT_OFF_BSS (objfile));
   3491 		  break;
   3492 		}
   3493 
   3494 	      switch (sh.st)
   3495 		{
   3496 		  CORE_ADDR high;
   3497 		  CORE_ADDR procaddr;
   3498 		  int new_sdx;
   3499 
   3500 		case stStaticProc:
   3501 		  prim_record_minimal_symbol_and_info (name, minsym_value,
   3502 						       mst_file_text,
   3503 						       SECT_OFF_TEXT (objfile),
   3504 						       objfile);
   3505 
   3506 		  /* FALLTHROUGH */
   3507 
   3508 		case stProc:
   3509 		  /* Ignore all parameter symbol records.  */
   3510 		  if (sh.index >= hdr->iauxMax)
   3511 		    {
   3512 		      /* Should not happen, but does when cross-compiling
   3513 		         with the MIPS compiler.  FIXME -- pull later.  */
   3514 		      index_complaint (name);
   3515 		      new_sdx = cur_sdx + 1;	/* Don't skip at all.  */
   3516 		    }
   3517 		  else
   3518 		    new_sdx = AUX_GET_ISYM (fh->fBigendian,
   3519 					    (debug_info->external_aux
   3520 					     + fh->iauxBase
   3521 					     + sh.index));
   3522 
   3523 		  if (new_sdx <= cur_sdx)
   3524 		    {
   3525 		      /* This should not happen either... FIXME.  */
   3526 		      complaint (&symfile_complaints,
   3527 				 _("bad proc end in aux found from symbol %s"),
   3528 				 name);
   3529 		      new_sdx = cur_sdx + 1;	/* Don't skip backward.  */
   3530 		    }
   3531 
   3532                   /* For stProc symbol records, we need to check the
   3533                      storage class as well, as only (stProc, scText)
   3534                      entries represent "real" procedures - See the
   3535                      Compaq document titled "Object File / Symbol Table
   3536                      Format Specification" for more information.  If the
   3537                      storage class is not scText, we discard the whole
   3538                      block of symbol records for this stProc.  */
   3539                   if (sh.st == stProc && sh.sc != scText)
   3540                     goto skip;
   3541 
   3542 		  /* Usually there is a local and a global stProc symbol
   3543 		     for a function.  This means that the function name
   3544 		     has already been entered into the mimimal symbol table
   3545 		     while processing the global symbols in pass 2 above.
   3546 		     One notable exception is the PROGRAM name from
   3547 		     f77 compiled executables, it is only put out as
   3548 		     local stProc symbol, and a global MAIN__ stProc symbol
   3549 		     points to it.  It doesn't matter though, as gdb is
   3550 		     still able to find the PROGRAM name via the partial
   3551 		     symbol table, and the MAIN__ symbol via the minimal
   3552 		     symbol table.  */
   3553 		  if (sh.st == stProc)
   3554 		    add_psymbol_to_list (name, strlen (name), 1,
   3555 					 VAR_DOMAIN, LOC_BLOCK,
   3556 					 &objfile->global_psymbols,
   3557 					 sh.value, psymtab_language, objfile);
   3558 		  else
   3559 		    add_psymbol_to_list (name, strlen (name), 1,
   3560 					 VAR_DOMAIN, LOC_BLOCK,
   3561 					 &objfile->static_psymbols,
   3562 					 sh.value, psymtab_language, objfile);
   3563 
   3564 		  procaddr = sh.value;
   3565 
   3566 		  cur_sdx = new_sdx;
   3567 		  (*swap_sym_in) (cur_bfd,
   3568 				  ((char *) debug_info->external_sym
   3569 				   + ((fh->isymBase + cur_sdx - 1)
   3570 				      * external_sym_size)),
   3571 				  &sh);
   3572 		  if (sh.st != stEnd)
   3573 		    continue;
   3574 
   3575 		  /* Kludge for Irix 5.2 zero fh->adr.  */
   3576 		  if (!relocatable
   3577 		      && (pst->textlow == 0 || procaddr < pst->textlow))
   3578 		    pst->textlow = procaddr;
   3579 
   3580 		  high = procaddr + sh.value;
   3581 		  if (high > pst->texthigh)
   3582 		    pst->texthigh = high;
   3583 		  continue;
   3584 
   3585 		case stStatic:	/* Variable */
   3586 		  if (SC_IS_DATA (sh.sc))
   3587 		    prim_record_minimal_symbol_and_info (name, minsym_value,
   3588 							 mst_file_data,
   3589 							 SECT_OFF_DATA (objfile),
   3590 							 objfile);
   3591 		  else
   3592 		    prim_record_minimal_symbol_and_info (name, minsym_value,
   3593 							 mst_file_bss,
   3594 							 SECT_OFF_BSS (objfile),
   3595 							 objfile);
   3596 		  theclass = LOC_STATIC;
   3597 		  break;
   3598 
   3599 		case stIndirect:	/* Irix5 forward declaration */
   3600 		  /* Skip forward declarations from Irix5 cc.  */
   3601 		  goto skip;
   3602 
   3603 		case stTypedef:	/* Typedef */
   3604 		  /* Skip typedefs for forward declarations and opaque
   3605 		     structs from alpha and mips cc.  */
   3606 		  if (sh.iss == 0 || has_opaque_xref (fh, &sh))
   3607 		    goto skip;
   3608 		  theclass = LOC_TYPEDEF;
   3609 		  break;
   3610 
   3611 		case stConstant:	/* Constant decl */
   3612 		  theclass = LOC_CONST;
   3613 		  break;
   3614 
   3615 		case stUnion:
   3616 		case stStruct:
   3617 		case stEnum:
   3618 		case stBlock:	/* { }, str, un, enum */
   3619 		  /* Do not create a partial symbol for cc unnamed aggregates
   3620 		     and gcc empty aggregates.  */
   3621 		  if ((sh.sc == scInfo
   3622 		       || SC_IS_COMMON (sh.sc))
   3623 		      && sh.iss != 0
   3624 		      && sh.index != cur_sdx + 2)
   3625 		    {
   3626 		      add_psymbol_to_list (name, strlen (name), 1,
   3627 					   STRUCT_DOMAIN, LOC_TYPEDEF,
   3628 					   &objfile->static_psymbols,
   3629 					   0, psymtab_language, objfile);
   3630 		    }
   3631 		  handle_psymbol_enumerators (objfile, fh, sh.st, sh.value);
   3632 
   3633 		  /* Skip over the block.  */
   3634 		  new_sdx = sh.index;
   3635 		  if (new_sdx <= cur_sdx)
   3636 		    {
   3637 		      /* This happens with the Ultrix kernel.  */
   3638 		      complaint (&symfile_complaints,
   3639 				 _("bad aux index at block symbol %s"), name);
   3640 		      new_sdx = cur_sdx + 1;	/* Don't skip backward.  */
   3641 		    }
   3642 		  cur_sdx = new_sdx;
   3643 		  continue;
   3644 
   3645 		case stFile:	/* File headers */
   3646 		case stLabel:	/* Labels */
   3647 		case stEnd:	/* Ends of files */
   3648 		  goto skip;
   3649 
   3650 		case stLocal:	/* Local variables */
   3651 		  /* Normally these are skipped because we skip over
   3652 		     all blocks we see.  However, these can occur
   3653 		     as visible symbols in a .h file that contains code.  */
   3654 		  goto skip;
   3655 
   3656 		default:
   3657 		  /* Both complaints are valid:  one gives symbol name,
   3658 		     the other the offending symbol type.  */
   3659 		  complaint (&symfile_complaints, _("unknown local symbol %s"),
   3660 			     name);
   3661 		  complaint (&symfile_complaints, _("with type %d"), sh.st);
   3662 		  cur_sdx++;
   3663 		  continue;
   3664 		}
   3665 	      /* Use this gdb symbol.  */
   3666 	      add_psymbol_to_list (name, strlen (name), 1,
   3667 				   VAR_DOMAIN, theclass,
   3668 				   &objfile->static_psymbols,
   3669 				   sh.value, psymtab_language, objfile);
   3670 	    skip:
   3671 	      cur_sdx++;	/* Go to next file symbol.  */
   3672 	    }
   3673 
   3674 	  /* Now do enter the external symbols.  */
   3675 	  ext_ptr = &extern_tab[fdr_to_pst[f_idx].globals_offset];
   3676 	  cur_sdx = fdr_to_pst[f_idx].n_globals;
   3677 	  PST_PRIVATE (save_pst)->extern_count = cur_sdx;
   3678 	  PST_PRIVATE (save_pst)->extern_tab = ext_ptr;
   3679 	  for (; --cur_sdx >= 0; ext_ptr++)
   3680 	    {
   3681 	      enum address_class theclass;
   3682 	      SYMR *psh;
   3683 	      char *name;
   3684 	      CORE_ADDR svalue;
   3685 
   3686 	      if (ext_ptr->ifd != f_idx)
   3687 		internal_error (__FILE__, __LINE__,
   3688 				_("failed internal consistency check"));
   3689 	      psh = &ext_ptr->asym;
   3690 
   3691 	      /* Do not add undefined symbols to the partial symbol table.  */
   3692 	      if (SC_IS_UNDEF (psh->sc) || psh->sc == scNil)
   3693 		continue;
   3694 
   3695 	      svalue = psh->value;
   3696 	      switch (psh->sc)
   3697 		{
   3698 		case scText:
   3699 		case scRConst:
   3700 		  svalue += ANOFFSET (objfile->section_offsets,
   3701 				      SECT_OFF_TEXT (objfile));
   3702 		  break;
   3703 		case scData:
   3704 		case scSData:
   3705 		case scRData:
   3706 		case scPData:
   3707 		case scXData:
   3708 		  svalue += ANOFFSET (objfile->section_offsets,
   3709 				      SECT_OFF_DATA (objfile));
   3710 		  break;
   3711 		case scBss:
   3712 		case scSBss:
   3713 		  svalue += ANOFFSET (objfile->section_offsets,
   3714 				      SECT_OFF_BSS (objfile));
   3715 		  break;
   3716 		}
   3717 
   3718 	      switch (psh->st)
   3719 		{
   3720 		case stNil:
   3721 		  /* These are generated for static symbols in .o files,
   3722 		     ignore them.  */
   3723 		  continue;
   3724 		case stProc:
   3725 		case stStaticProc:
   3726 		  /* External procedure symbols have been entered
   3727 		     into the minimal symbol table in pass 2 above.
   3728 		     Ignore them, as parse_external will ignore them too.  */
   3729 		  continue;
   3730 		case stLabel:
   3731 		  theclass = LOC_LABEL;
   3732 		  break;
   3733 		default:
   3734 		  unknown_ext_complaint (debug_info->ssext + psh->iss);
   3735 		  /* Fall through, pretend it's global.  */
   3736 		case stGlobal:
   3737 		  /* Global common symbols are resolved by the runtime loader,
   3738 		     ignore them.  */
   3739 		  if (SC_IS_COMMON (psh->sc))
   3740 		    continue;
   3741 
   3742 		  theclass = LOC_STATIC;
   3743 		  break;
   3744 		}
   3745 	      name = debug_info->ssext + psh->iss;
   3746 	      add_psymbol_to_list (name, strlen (name), 1,
   3747 				   VAR_DOMAIN, theclass,
   3748 				   &objfile->global_psymbols,
   3749 				   svalue, psymtab_language, objfile);
   3750 	    }
   3751 	}
   3752 
   3753       /* Link pst to FDR.  dbx_end_psymtab returns NULL if the psymtab was
   3754          empty and put on the free list.  */
   3755       fdr_to_pst[f_idx].pst
   3756 	= dbx_end_psymtab (objfile, save_pst,
   3757 			   psymtab_include_list, includes_used,
   3758 			   -1, save_pst->texthigh,
   3759 			   dependency_list, dependencies_used,
   3760 			   textlow_not_set);
   3761       includes_used = 0;
   3762       dependencies_used = 0;
   3763 
   3764       /* The objfile has its functions reordered if this partial symbol
   3765          table overlaps any other partial symbol table.
   3766          We cannot assume a reordered objfile if a partial symbol table
   3767          is contained within another partial symbol table, as partial symbol
   3768          tables for include files with executable code are contained
   3769          within the partial symbol table for the including source file,
   3770          and we do not want to flag the objfile reordered for these cases.
   3771 
   3772          This strategy works well for Irix-5.2 shared libraries, but we
   3773          might have to use a more elaborate (and slower) algorithm for
   3774          other cases.  */
   3775       save_pst = fdr_to_pst[f_idx].pst;
   3776       if (save_pst != NULL
   3777 	  && save_pst->textlow != 0
   3778 	  && !(objfile->flags & OBJF_REORDERED))
   3779 	{
   3780 	  ALL_OBJFILE_PSYMTABS (objfile, pst)
   3781 	  {
   3782 	    if (save_pst != pst
   3783 		&& save_pst->textlow >= pst->textlow
   3784 		&& save_pst->textlow < pst->texthigh
   3785 		&& save_pst->texthigh > pst->texthigh)
   3786 	      {
   3787 		objfile->flags |= OBJF_REORDERED;
   3788 		break;
   3789 	      }
   3790 	  }
   3791 	}
   3792     }
   3793 
   3794   /* Now scan the FDRs for dependencies.  */
   3795   for (f_idx = 0; f_idx < hdr->ifdMax; f_idx++)
   3796     {
   3797       fh = f_idx + debug_info->fdr;
   3798       pst = fdr_to_pst[f_idx].pst;
   3799 
   3800       if (pst == (struct partial_symtab *) NULL)
   3801 	continue;
   3802 
   3803       /* This should catch stabs-in-ecoff.  */
   3804       if (fh->crfd <= 1)
   3805 	continue;
   3806 
   3807       /* Skip the first file indirect entry as it is a self dependency for
   3808          source files or a reverse .h -> .c dependency for header files.  */
   3809       pst->number_of_dependencies = 0;
   3810       pst->dependencies =
   3811 	((struct partial_symtab **)
   3812 	 obstack_alloc (&objfile->objfile_obstack,
   3813 			((fh->crfd - 1)
   3814 			 * sizeof (struct partial_symtab *))));
   3815       for (s_idx = 1; s_idx < fh->crfd; s_idx++)
   3816 	{
   3817 	  RFDT rh;
   3818 
   3819 	  (*swap_rfd_in) (cur_bfd,
   3820 			  ((char *) debug_info->external_rfd
   3821 			   + (fh->rfdBase + s_idx) * external_rfd_size),
   3822 			  &rh);
   3823 	  if (rh < 0 || rh >= hdr->ifdMax)
   3824 	    {
   3825 	      complaint (&symfile_complaints, _("bad file number %ld"), rh);
   3826 	      continue;
   3827 	    }
   3828 
   3829 	  /* Skip self dependencies of header files.  */
   3830 	  if (rh == f_idx)
   3831 	    continue;
   3832 
   3833 	  /* Do not add to dependeny list if psymtab was empty.  */
   3834 	  if (fdr_to_pst[rh].pst == (struct partial_symtab *) NULL)
   3835 	    continue;
   3836 	  pst->dependencies[pst->number_of_dependencies++]
   3837 	    = fdr_to_pst[rh].pst;
   3838 	}
   3839     }
   3840 
   3841   /* Remove the dummy psymtab created for -O3 images above, if it is
   3842      still empty, to enable the detection of stripped executables.  */
   3843   if (objfile->psymtabs->next == NULL
   3844       && objfile->psymtabs->number_of_dependencies == 0
   3845       && objfile->psymtabs->n_global_syms == 0
   3846       && objfile->psymtabs->n_static_syms == 0)
   3847     objfile->psymtabs = NULL;
   3848   do_cleanups (old_chain);
   3849 }
   3850 
   3851 /* If the current psymbol has an enumerated type, we need to add
   3852    all the enum constants to the partial symbol table.  */
   3853 
   3854 static void
   3855 handle_psymbol_enumerators (struct objfile *objfile, FDR *fh, int stype,
   3856 			    CORE_ADDR svalue)
   3857 {
   3858   const bfd_size_type external_sym_size = debug_swap->external_sym_size;
   3859   void (*const swap_sym_in) (bfd *, void *, SYMR *) = debug_swap->swap_sym_in;
   3860   char *ext_sym = ((char *) debug_info->external_sym
   3861 		   + ((fh->isymBase + cur_sdx + 1) * external_sym_size));
   3862   SYMR sh;
   3863   TIR tir;
   3864 
   3865   switch (stype)
   3866     {
   3867     case stEnum:
   3868       break;
   3869 
   3870     case stBlock:
   3871       /* It is an enumerated type if the next symbol entry is a stMember
   3872          and its auxiliary index is indexNil or its auxiliary entry
   3873          is a plain btNil or btVoid.
   3874          Alpha cc -migrate enums are recognized by a zero index and
   3875          a zero symbol value.
   3876          DU 4.0 cc enums are recognized by a member type of btEnum without
   3877          qualifiers and a zero symbol value.  */
   3878       (*swap_sym_in) (cur_bfd, ext_sym, &sh);
   3879       if (sh.st != stMember)
   3880 	return;
   3881 
   3882       if (sh.index == indexNil
   3883 	  || (sh.index == 0 && svalue == 0))
   3884 	break;
   3885       (*debug_swap->swap_tir_in) (fh->fBigendian,
   3886 				  &(debug_info->external_aux
   3887 				    + fh->iauxBase + sh.index)->a_ti,
   3888 				  &tir);
   3889       if ((tir.bt != btNil
   3890 	   && tir.bt != btVoid
   3891 	   && (tir.bt != btEnum || svalue != 0))
   3892 	  || tir.tq0 != tqNil)
   3893 	return;
   3894       break;
   3895 
   3896     default:
   3897       return;
   3898     }
   3899 
   3900   for (;;)
   3901     {
   3902       char *name;
   3903 
   3904       (*swap_sym_in) (cur_bfd, ext_sym, &sh);
   3905       if (sh.st != stMember)
   3906 	break;
   3907       name = debug_info->ss + cur_fdr->issBase + sh.iss;
   3908 
   3909       /* Note that the value doesn't matter for enum constants
   3910          in psymtabs, just in symtabs.  */
   3911       add_psymbol_to_list (name, strlen (name), 1,
   3912 			   VAR_DOMAIN, LOC_CONST,
   3913 			   &objfile->static_psymbols,
   3914 			   0, psymtab_language, objfile);
   3915       ext_sym += external_sym_size;
   3916     }
   3917 }
   3918 
   3919 /* Get the next symbol.  OBJFILE is unused.  */
   3920 
   3921 static char *
   3922 mdebug_next_symbol_text (struct objfile *objfile)
   3923 {
   3924   SYMR sh;
   3925 
   3926   cur_sdx++;
   3927   (*debug_swap->swap_sym_in) (cur_bfd,
   3928 			      ((char *) debug_info->external_sym
   3929 			       + ((cur_fdr->isymBase + cur_sdx)
   3930 				  * debug_swap->external_sym_size)),
   3931 			      &sh);
   3932   return debug_info->ss + cur_fdr->issBase + sh.iss;
   3933 }
   3934 
   3935 /* Ancillary function to psymtab_to_symtab().  Does all the work
   3936    for turning the partial symtab PST into a symtab, recurring
   3937    first on all dependent psymtabs.  The argument FILENAME is
   3938    only passed so we can see in debug stack traces what file
   3939    is being read.
   3940 
   3941    This function has a split personality, based on whether the
   3942    symbol table contains ordinary ecoff symbols, or stabs-in-ecoff.
   3943    The flow of control and even the memory allocation differs.  FIXME.  */
   3944 
   3945 static void
   3946 psymtab_to_symtab_1 (struct objfile *objfile,
   3947 		     struct partial_symtab *pst, const char *filename)
   3948 {
   3949   bfd_size_type external_sym_size;
   3950   bfd_size_type external_pdr_size;
   3951   void (*swap_sym_in) (bfd *, void *, SYMR *);
   3952   void (*swap_pdr_in) (bfd *, void *, PDR *);
   3953   int i;
   3954   struct compunit_symtab *cust = NULL;
   3955   FDR *fh;
   3956   struct linetable *lines;
   3957   CORE_ADDR lowest_pdr_addr = 0;
   3958   int last_symtab_ended = 0;
   3959   struct section_offsets *section_offsets = objfile->section_offsets;
   3960 
   3961   if (pst->readin)
   3962     return;
   3963   pst->readin = 1;
   3964 
   3965   /* Read in all partial symbtabs on which this one is dependent.
   3966      NOTE that we do have circular dependencies, sigh.  We solved
   3967      that by setting pst->readin before this point.  */
   3968 
   3969   for (i = 0; i < pst->number_of_dependencies; i++)
   3970     if (!pst->dependencies[i]->readin)
   3971       {
   3972 	/* Inform about additional files to be read in.  */
   3973 	if (info_verbose)
   3974 	  {
   3975 	    fputs_filtered (" ", gdb_stdout);
   3976 	    wrap_here ("");
   3977 	    fputs_filtered ("and ", gdb_stdout);
   3978 	    wrap_here ("");
   3979 	    printf_filtered ("%s...",
   3980 			     pst->dependencies[i]->filename);
   3981 	    wrap_here ("");	/* Flush output */
   3982 	    gdb_flush (gdb_stdout);
   3983 	  }
   3984 	/* We only pass the filename for debug purposes.  */
   3985 	psymtab_to_symtab_1 (objfile, pst->dependencies[i],
   3986 			     pst->dependencies[i]->filename);
   3987       }
   3988 
   3989   /* Do nothing if this is a dummy psymtab.  */
   3990 
   3991   if (pst->n_global_syms == 0 && pst->n_static_syms == 0
   3992       && pst->textlow == 0 && pst->texthigh == 0)
   3993     return;
   3994 
   3995   /* Now read the symbols for this symtab.  */
   3996 
   3997   cur_bfd = CUR_BFD (pst);
   3998   debug_swap = DEBUG_SWAP (pst);
   3999   debug_info = DEBUG_INFO (pst);
   4000   pending_list = PENDING_LIST (pst);
   4001   external_sym_size = debug_swap->external_sym_size;
   4002   external_pdr_size = debug_swap->external_pdr_size;
   4003   swap_sym_in = debug_swap->swap_sym_in;
   4004   swap_pdr_in = debug_swap->swap_pdr_in;
   4005   mdebugread_objfile = objfile;
   4006   cur_fd = FDR_IDX (pst);
   4007   fh = ((cur_fd == -1)
   4008 	? (FDR *) NULL
   4009 	: debug_info->fdr + cur_fd);
   4010   cur_fdr = fh;
   4011 
   4012   /* See comment in parse_partial_symbols about the @stabs sentinel.  */
   4013   processing_gcc_compilation = 0;
   4014   if (fh != (FDR *) NULL && fh->csym >= 2)
   4015     {
   4016       SYMR sh;
   4017 
   4018       (*swap_sym_in) (cur_bfd,
   4019 		      ((char *) debug_info->external_sym
   4020 		       + (fh->isymBase + 1) * external_sym_size),
   4021 		      &sh);
   4022       if (strcmp (debug_info->ss + fh->issBase + sh.iss,
   4023 		  stabs_symbol) == 0)
   4024 	{
   4025 	  /* We indicate that this is a GCC compilation so that certain
   4026 	     features will be enabled in stabsread/dbxread.  */
   4027 	  processing_gcc_compilation = 2;
   4028 	}
   4029     }
   4030 
   4031   if (processing_gcc_compilation != 0)
   4032     {
   4033       struct gdbarch *gdbarch = get_objfile_arch (objfile);
   4034 
   4035       /* This symbol table contains stabs-in-ecoff entries.  */
   4036 
   4037       /* Parse local symbols first.  */
   4038 
   4039       if (fh->csym <= 2)	/* FIXME, this blows psymtab->symtab ptr.  */
   4040 	{
   4041 	  mdebugread_objfile = NULL;
   4042 	  return;
   4043 	}
   4044       for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
   4045 	{
   4046 	  SYMR sh;
   4047 	  char *name;
   4048 	  CORE_ADDR valu;
   4049 
   4050 	  (*swap_sym_in) (cur_bfd,
   4051 			  (((char *) debug_info->external_sym)
   4052 			   + (fh->isymBase + cur_sdx) * external_sym_size),
   4053 			  &sh);
   4054 	  name = debug_info->ss + fh->issBase + sh.iss;
   4055 	  valu = sh.value;
   4056 	  /* XXX This is a hack.  It will go away!  */
   4057 	  if (ECOFF_IS_STAB (&sh) || (name[0] == '#'))
   4058 	    {
   4059 	      int type_code = ECOFF_UNMARK_STAB (sh.index);
   4060 
   4061 	      /* We should never get non N_STAB symbols here, but they
   4062 	         should be harmless, so keep process_one_symbol from
   4063 	         complaining about them.  */
   4064 	      if (type_code & N_STAB)
   4065 		{
   4066 		  /* If we found a trailing N_SO with no name, process
   4067                      it here instead of in process_one_symbol, so we
   4068                      can keep a handle to its symtab.  The symtab
   4069                      would otherwise be ended twice, once in
   4070                      process_one_symbol, and once after this loop.  */
   4071 		  if (type_code == N_SO
   4072 		      && get_last_source_file ()
   4073 		      && previous_stab_code != (unsigned char) N_SO
   4074 		      && *name == '\000')
   4075 		    {
   4076 		      valu += ANOFFSET (section_offsets,
   4077 					SECT_OFF_TEXT (objfile));
   4078 		      previous_stab_code = N_SO;
   4079 		      cust = end_symtab (valu, SECT_OFF_TEXT (objfile));
   4080 		      end_stabs ();
   4081 		      last_symtab_ended = 1;
   4082 		    }
   4083 		  else
   4084 		    {
   4085 		      last_symtab_ended = 0;
   4086 		      process_one_symbol (type_code, 0, valu, name,
   4087 					  section_offsets, objfile);
   4088 		    }
   4089 		}
   4090 	      /* Similarly a hack.  */
   4091 	      else if (name[0] == '#')
   4092 		{
   4093 		  process_one_symbol (N_SLINE, 0, valu, name,
   4094 				      section_offsets, objfile);
   4095 		}
   4096 	      if (type_code == N_FUN)
   4097 		{
   4098 		  /* Make up special symbol to contain
   4099 		     procedure specific info.  */
   4100 		  struct mdebug_extra_func_info *e =
   4101 		    ((struct mdebug_extra_func_info *)
   4102 		     obstack_alloc (&mdebugread_objfile->objfile_obstack,
   4103 				    sizeof (struct mdebug_extra_func_info)));
   4104 		  struct symbol *s = new_symbol (MDEBUG_EFI_SYMBOL_NAME);
   4105 
   4106 		  memset (e, 0, sizeof (struct mdebug_extra_func_info));
   4107 		  SYMBOL_DOMAIN (s) = LABEL_DOMAIN;
   4108 		  SYMBOL_ACLASS_INDEX (s) = LOC_CONST;
   4109 		  SYMBOL_TYPE (s) = objfile_type (objfile)->builtin_void;
   4110 		  SYMBOL_VALUE_BYTES (s) = (gdb_byte *) e;
   4111 		  e->pdr.framereg = -1;
   4112 		  add_symbol_to_list (s, &local_symbols);
   4113 		}
   4114 	    }
   4115 	  else if (sh.st == stLabel)
   4116 	    {
   4117 	      if (sh.index == indexNil)
   4118 		{
   4119 		  /* This is what the gcc2_compiled and __gnu_compiled_*
   4120 		     show up as.  So don't complain.  */
   4121 		  ;
   4122 		}
   4123 	      else
   4124 		{
   4125 		  /* Handle encoded stab line number.  */
   4126 		  valu += ANOFFSET (section_offsets,
   4127 				    SECT_OFF_TEXT (objfile));
   4128 		  record_line (current_subfile, sh.index,
   4129 			       gdbarch_addr_bits_remove (gdbarch, valu));
   4130 		}
   4131 	    }
   4132 	  else if (sh.st == stProc || sh.st == stStaticProc
   4133 		   || sh.st == stStatic || sh.st == stEnd)
   4134 	    /* These are generated by gcc-2.x, do not complain.  */
   4135 	    ;
   4136 	  else
   4137 	    complaint (&symfile_complaints,
   4138 		       _("unknown stabs symbol %s"), name);
   4139 	}
   4140 
   4141       if (! last_symtab_ended)
   4142 	{
   4143 	  cust = end_symtab (pst->texthigh, SECT_OFF_TEXT (objfile));
   4144 	  end_stabs ();
   4145 	}
   4146 
   4147       /* There used to be a call to sort_blocks here, but this should not
   4148          be necessary for stabs symtabs.  And as sort_blocks modifies the
   4149          start address of the GLOBAL_BLOCK to the FIRST_LOCAL_BLOCK,
   4150          it did the wrong thing if the first procedure in a file was
   4151          generated via asm statements.  */
   4152 
   4153       /* Fill in procedure info next.  */
   4154       if (fh->cpd > 0)
   4155 	{
   4156 	  PDR *pr_block;
   4157 	  struct cleanup *old_chain;
   4158 	  char *pdr_ptr;
   4159 	  char *pdr_end;
   4160 	  PDR *pdr_in;
   4161 	  PDR *pdr_in_end;
   4162 
   4163 	  pr_block = XNEWVEC (PDR, fh->cpd);
   4164 	  old_chain = make_cleanup (xfree, pr_block);
   4165 
   4166 	  pdr_ptr = ((char *) debug_info->external_pdr
   4167 		     + fh->ipdFirst * external_pdr_size);
   4168 	  pdr_end = pdr_ptr + fh->cpd * external_pdr_size;
   4169 	  pdr_in = pr_block;
   4170 	  for (;
   4171 	       pdr_ptr < pdr_end;
   4172 	       pdr_ptr += external_pdr_size, pdr_in++)
   4173 	    {
   4174 	      (*swap_pdr_in) (cur_bfd, pdr_ptr, pdr_in);
   4175 
   4176 	      /* Determine lowest PDR address, the PDRs are not always
   4177 	         sorted.  */
   4178 	      if (pdr_in == pr_block)
   4179 		lowest_pdr_addr = pdr_in->adr;
   4180 	      else if (pdr_in->adr < lowest_pdr_addr)
   4181 		lowest_pdr_addr = pdr_in->adr;
   4182 	    }
   4183 
   4184 	  pdr_in = pr_block;
   4185 	  pdr_in_end = pdr_in + fh->cpd;
   4186 	  for (; pdr_in < pdr_in_end; pdr_in++)
   4187 	    parse_procedure (pdr_in, cust, pst);
   4188 
   4189 	  do_cleanups (old_chain);
   4190 	}
   4191     }
   4192   else
   4193     {
   4194       /* This symbol table contains ordinary ecoff entries.  */
   4195 
   4196       int maxlines, size;
   4197       EXTR *ext_ptr;
   4198 
   4199       if (fh == 0)
   4200 	{
   4201 	  maxlines = 0;
   4202 	  cust = new_symtab ("unknown", 0, objfile);
   4203 	}
   4204       else
   4205 	{
   4206 	  maxlines = 2 * fh->cline;
   4207 	  cust = new_symtab (pst->filename, maxlines, objfile);
   4208 
   4209 	  /* The proper language was already determined when building
   4210 	     the psymtab, use it.  */
   4211 	  COMPUNIT_FILETABS (cust)->language = PST_PRIVATE (pst)->pst_language;
   4212 	}
   4213 
   4214       psymtab_language = COMPUNIT_FILETABS (cust)->language;
   4215 
   4216       lines = SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust));
   4217 
   4218       /* Get a new lexical context.  */
   4219 
   4220       push_parse_stack ();
   4221       top_stack->cur_st = COMPUNIT_FILETABS (cust);
   4222       top_stack->cur_block
   4223 	= BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), STATIC_BLOCK);
   4224       BLOCK_START (top_stack->cur_block) = pst->textlow;
   4225       BLOCK_END (top_stack->cur_block) = 0;
   4226       top_stack->blocktype = stFile;
   4227       top_stack->cur_type = 0;
   4228       top_stack->procadr = 0;
   4229       top_stack->numargs = 0;
   4230       found_ecoff_debugging_info = 0;
   4231 
   4232       if (fh)
   4233 	{
   4234 	  char *sym_ptr;
   4235 	  char *sym_end;
   4236 
   4237 	  /* Parse local symbols first.  */
   4238 	  sym_ptr = ((char *) debug_info->external_sym
   4239 		     + fh->isymBase * external_sym_size);
   4240 	  sym_end = sym_ptr + fh->csym * external_sym_size;
   4241 	  while (sym_ptr < sym_end)
   4242 	    {
   4243 	      SYMR sh;
   4244 	      int c;
   4245 
   4246 	      (*swap_sym_in) (cur_bfd, sym_ptr, &sh);
   4247 	      c = parse_symbol (&sh,
   4248 				debug_info->external_aux + fh->iauxBase,
   4249 				sym_ptr, fh->fBigendian,
   4250 				section_offsets, objfile);
   4251 	      sym_ptr += c * external_sym_size;
   4252 	    }
   4253 
   4254 	  /* Linenumbers.  At the end, check if we can save memory.
   4255 	     parse_lines has to look ahead an arbitrary number of PDR
   4256 	     structures, so we swap them all first.  */
   4257 	  if (fh->cpd > 0)
   4258 	    {
   4259 	      PDR *pr_block;
   4260 	      struct cleanup *old_chain;
   4261 	      char *pdr_ptr;
   4262 	      char *pdr_end;
   4263 	      PDR *pdr_in;
   4264 	      PDR *pdr_in_end;
   4265 
   4266 	      pr_block = XNEWVEC (PDR, fh->cpd);
   4267 
   4268 	      old_chain = make_cleanup (xfree, pr_block);
   4269 
   4270 	      pdr_ptr = ((char *) debug_info->external_pdr
   4271 			 + fh->ipdFirst * external_pdr_size);
   4272 	      pdr_end = pdr_ptr + fh->cpd * external_pdr_size;
   4273 	      pdr_in = pr_block;
   4274 	      for (;
   4275 		   pdr_ptr < pdr_end;
   4276 		   pdr_ptr += external_pdr_size, pdr_in++)
   4277 		{
   4278 		  (*swap_pdr_in) (cur_bfd, pdr_ptr, pdr_in);
   4279 
   4280 		  /* Determine lowest PDR address, the PDRs are not always
   4281 		     sorted.  */
   4282 		  if (pdr_in == pr_block)
   4283 		    lowest_pdr_addr = pdr_in->adr;
   4284 		  else if (pdr_in->adr < lowest_pdr_addr)
   4285 		    lowest_pdr_addr = pdr_in->adr;
   4286 		}
   4287 
   4288 	      parse_lines (fh, pr_block, lines, maxlines,
   4289 			   pst, lowest_pdr_addr);
   4290 	      if (lines->nitems < fh->cline)
   4291 		lines = shrink_linetable (lines);
   4292 
   4293 	      /* Fill in procedure info next.  */
   4294 	      pdr_in = pr_block;
   4295 	      pdr_in_end = pdr_in + fh->cpd;
   4296 	      for (; pdr_in < pdr_in_end; pdr_in++)
   4297 		parse_procedure (pdr_in, NULL, pst);
   4298 
   4299 	      do_cleanups (old_chain);
   4300 	    }
   4301 	}
   4302 
   4303       size = lines->nitems;
   4304       if (size > 1)
   4305 	--size;
   4306       SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust))
   4307 	= ((struct linetable *)
   4308 	   obstack_copy (&mdebugread_objfile->objfile_obstack,
   4309 			 lines, (sizeof (struct linetable)
   4310 				 + size * sizeof (lines->item))));
   4311       xfree (lines);
   4312 
   4313       /* .. and our share of externals.
   4314          XXX use the global list to speed up things here.  How?
   4315          FIXME, Maybe quit once we have found the right number of ext's?  */
   4316       top_stack->cur_st = COMPUNIT_FILETABS (cust);
   4317       top_stack->cur_block
   4318 	= BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (top_stack->cur_st),
   4319 			     GLOBAL_BLOCK);
   4320       top_stack->blocktype = stFile;
   4321 
   4322       ext_ptr = PST_PRIVATE (pst)->extern_tab;
   4323       for (i = PST_PRIVATE (pst)->extern_count; --i >= 0; ext_ptr++)
   4324 	parse_external (ext_ptr, fh->fBigendian,
   4325 			section_offsets, objfile);
   4326 
   4327       /* If there are undefined symbols, tell the user.
   4328          The alpha has an undefined symbol for every symbol that is
   4329          from a shared library, so tell the user only if verbose is on.  */
   4330       if (info_verbose && n_undef_symbols)
   4331 	{
   4332 	  printf_filtered (_("File %s contains %d unresolved references:"),
   4333 			   symtab_to_filename_for_display
   4334 			     (COMPUNIT_FILETABS (cust)),
   4335 			   n_undef_symbols);
   4336 	  printf_filtered ("\n\t%4d variables\n\t%4d "
   4337 			   "procedures\n\t%4d labels\n",
   4338 			   n_undef_vars, n_undef_procs, n_undef_labels);
   4339 	  n_undef_symbols = n_undef_labels = n_undef_vars = n_undef_procs = 0;
   4340 
   4341 	}
   4342       pop_parse_stack ();
   4343 
   4344       sort_blocks (COMPUNIT_FILETABS (cust));
   4345     }
   4346 
   4347   /* Now link the psymtab and the symtab.  */
   4348   pst->compunit_symtab = cust;
   4349 
   4350   mdebugread_objfile = NULL;
   4351 }
   4352 
   4353 /* Ancillary parsing procedures.  */
   4355 
   4356 /* Return 1 if the symbol pointed to by SH has a cross reference
   4357    to an opaque aggregate type, else 0.  */
   4358 
   4359 static int
   4360 has_opaque_xref (FDR *fh, SYMR *sh)
   4361 {
   4362   TIR tir;
   4363   union aux_ext *ax;
   4364   RNDXR rn[1];
   4365   unsigned int rf;
   4366 
   4367   if (sh->index == indexNil)
   4368     return 0;
   4369 
   4370   ax = debug_info->external_aux + fh->iauxBase + sh->index;
   4371   (*debug_swap->swap_tir_in) (fh->fBigendian, &ax->a_ti, &tir);
   4372   if (tir.bt != btStruct && tir.bt != btUnion && tir.bt != btEnum)
   4373     return 0;
   4374 
   4375   ax++;
   4376   (*debug_swap->swap_rndx_in) (fh->fBigendian, &ax->a_rndx, rn);
   4377   if (rn->rfd == 0xfff)
   4378     rf = AUX_GET_ISYM (fh->fBigendian, ax + 1);
   4379   else
   4380     rf = rn->rfd;
   4381   if (rf != -1)
   4382     return 0;
   4383   return 1;
   4384 }
   4385 
   4386 /* Lookup the type at relative index RN.  Return it in TPP
   4387    if found and in any event come up with its name PNAME.
   4388    BIGEND says whether aux symbols are big-endian or not (from fh->fBigendian).
   4389    Return value says how many aux symbols we ate.  */
   4390 
   4391 static int
   4392 cross_ref (int fd, union aux_ext *ax, struct type **tpp,
   4393 	   enum type_code type_code,
   4394 	   /* Use to alloc new type if none is found.  */
   4395 	   char **pname, int bigend, char *sym_name)
   4396 {
   4397   RNDXR rn[1];
   4398   unsigned int rf;
   4399   int result = 1;
   4400   FDR *fh;
   4401   char *esh;
   4402   SYMR sh;
   4403   int xref_fd;
   4404   struct mdebug_pending *pend;
   4405 
   4406   *tpp = NULL;
   4407 
   4408   (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, rn);
   4409 
   4410   /* Escape index means 'the next one'.  */
   4411   if (rn->rfd == 0xfff)
   4412     {
   4413       result++;
   4414       rf = AUX_GET_ISYM (bigend, ax + 1);
   4415     }
   4416   else
   4417     {
   4418       rf = rn->rfd;
   4419     }
   4420 
   4421   /* mips cc uses a rf of -1 for opaque struct definitions.
   4422      Set TYPE_FLAG_STUB for these types so that check_typedef will
   4423      resolve them if the struct gets defined in another compilation unit.  */
   4424   if (rf == -1)
   4425     {
   4426       *pname = "<undefined>";
   4427       *tpp = init_type (type_code, 0, TYPE_FLAG_STUB,
   4428 			(char *) NULL, mdebugread_objfile);
   4429       return result;
   4430     }
   4431 
   4432   /* mips cc uses an escaped rn->index of 0 for struct return types
   4433      of procedures that were compiled without -g.  These will always remain
   4434      undefined.  */
   4435   if (rn->rfd == 0xfff && rn->index == 0)
   4436     {
   4437       *pname = "<undefined>";
   4438       return result;
   4439     }
   4440 
   4441   /* Find the relative file descriptor and the symbol in it.  */
   4442   fh = get_rfd (fd, rf);
   4443   xref_fd = fh - debug_info->fdr;
   4444 
   4445   if (rn->index >= fh->csym)
   4446     {
   4447       /* File indirect entry is corrupt.  */
   4448       *pname = "<illegal>";
   4449       bad_rfd_entry_complaint (sym_name, xref_fd, rn->index);
   4450       return result;
   4451     }
   4452 
   4453   /* If we have processed this symbol then we left a forwarding
   4454      pointer to the type in the pending list.  If not, we`ll put
   4455      it in a list of pending types, to be processed later when
   4456      the file will be.  In any event, we collect the name for the
   4457      type here.  */
   4458 
   4459   esh = ((char *) debug_info->external_sym
   4460 	 + ((fh->isymBase + rn->index)
   4461 	    * debug_swap->external_sym_size));
   4462   (*debug_swap->swap_sym_in) (cur_bfd, esh, &sh);
   4463 
   4464   /* Make sure that this type of cross reference can be handled.  */
   4465   if ((sh.sc != scInfo
   4466        || (sh.st != stBlock && sh.st != stTypedef && sh.st != stIndirect
   4467 	   && sh.st != stStruct && sh.st != stUnion
   4468 	   && sh.st != stEnum))
   4469       && (sh.st != stBlock || !SC_IS_COMMON (sh.sc)))
   4470     {
   4471       /* File indirect entry is corrupt.  */
   4472       *pname = "<illegal>";
   4473       bad_rfd_entry_complaint (sym_name, xref_fd, rn->index);
   4474       return result;
   4475     }
   4476 
   4477   *pname = debug_info->ss + fh->issBase + sh.iss;
   4478 
   4479   pend = is_pending_symbol (fh, esh);
   4480   if (pend)
   4481     *tpp = pend->t;
   4482   else
   4483     {
   4484       /* We have not yet seen this type.  */
   4485 
   4486       if ((sh.iss == 0 && sh.st == stTypedef) || sh.st == stIndirect)
   4487 	{
   4488 	  TIR tir;
   4489 
   4490 	  /* alpha cc puts out a stTypedef with a sh.iss of zero for
   4491 	     two cases:
   4492 	     a) forward declarations of structs/unions/enums which are not
   4493 	     defined in this compilation unit.
   4494 	     For these the type will be void.  This is a bad design decision
   4495 	     as cross referencing across compilation units is impossible
   4496 	     due to the missing name.
   4497 	     b) forward declarations of structs/unions/enums/typedefs which
   4498 	     are defined later in this file or in another file in the same
   4499 	     compilation unit.  Irix5 cc uses a stIndirect symbol for this.
   4500 	     Simply cross reference those again to get the true type.
   4501 	     The forward references are not entered in the pending list and
   4502 	     in the symbol table.  */
   4503 
   4504 	  (*debug_swap->swap_tir_in) (bigend,
   4505 				      &(debug_info->external_aux
   4506 					+ fh->iauxBase + sh.index)->a_ti,
   4507 				      &tir);
   4508 	  if (tir.tq0 != tqNil)
   4509 	    complaint (&symfile_complaints,
   4510 		       _("illegal tq0 in forward typedef for %s"), sym_name);
   4511 	  switch (tir.bt)
   4512 	    {
   4513 	    case btVoid:
   4514 	      *tpp = init_type (type_code, 0, 0, (char *) NULL,
   4515 				mdebugread_objfile);
   4516 	      *pname = "<undefined>";
   4517 	      break;
   4518 
   4519 	    case btStruct:
   4520 	    case btUnion:
   4521 	    case btEnum:
   4522 	      cross_ref (xref_fd,
   4523 			 (debug_info->external_aux
   4524 			  + fh->iauxBase + sh.index + 1),
   4525 			 tpp, type_code, pname,
   4526 			 fh->fBigendian, sym_name);
   4527 	      break;
   4528 
   4529 	    case btTypedef:
   4530 	      /* Follow a forward typedef.  This might recursively
   4531 	         call cross_ref till we get a non typedef'ed type.
   4532 	         FIXME: This is not correct behaviour, but gdb currently
   4533 	         cannot handle typedefs without type copying.  Type
   4534 	         copying is impossible as we might have mutual forward
   4535 	         references between two files and the copied type would not
   4536 	         get filled in when we later parse its definition.  */
   4537 	      *tpp = parse_type (xref_fd,
   4538 				 debug_info->external_aux + fh->iauxBase,
   4539 				 sh.index,
   4540 				 (int *) NULL,
   4541 				 fh->fBigendian,
   4542 				 debug_info->ss + fh->issBase + sh.iss);
   4543 	      add_pending (fh, esh, *tpp);
   4544 	      break;
   4545 
   4546 	    default:
   4547 	      complaint (&symfile_complaints,
   4548 			 _("illegal bt %d in forward typedef for %s"), tir.bt,
   4549 			 sym_name);
   4550 	      *tpp = init_type (type_code, 0, 0, (char *) NULL,
   4551 				mdebugread_objfile);
   4552 	      break;
   4553 	    }
   4554 	  return result;
   4555 	}
   4556       else if (sh.st == stTypedef)
   4557 	{
   4558 	  /* Parse the type for a normal typedef.  This might recursively call
   4559 	     cross_ref till we get a non typedef'ed type.
   4560 	     FIXME: This is not correct behaviour, but gdb currently
   4561 	     cannot handle typedefs without type copying.  But type copying is
   4562 	     impossible as we might have mutual forward references between
   4563 	     two files and the copied type would not get filled in when
   4564 	     we later parse its definition.   */
   4565 	  *tpp = parse_type (xref_fd,
   4566 			     debug_info->external_aux + fh->iauxBase,
   4567 			     sh.index,
   4568 			     (int *) NULL,
   4569 			     fh->fBigendian,
   4570 			     debug_info->ss + fh->issBase + sh.iss);
   4571 	}
   4572       else
   4573 	{
   4574 	  /* Cross reference to a struct/union/enum which is defined
   4575 	     in another file in the same compilation unit but that file
   4576 	     has not been parsed yet.
   4577 	     Initialize the type only, it will be filled in when
   4578 	     it's definition is parsed.  */
   4579 	  *tpp = init_type (type_code, 0, 0, (char *) NULL, mdebugread_objfile);
   4580 	}
   4581       add_pending (fh, esh, *tpp);
   4582     }
   4583 
   4584   /* We used one auxent normally, two if we got a "next one" rf.  */
   4585   return result;
   4586 }
   4587 
   4588 
   4589 /* Quick&dirty lookup procedure, to avoid the MI ones that require
   4590    keeping the symtab sorted.  */
   4591 
   4592 static struct symbol *
   4593 mylookup_symbol (char *name, const struct block *block,
   4594 		 domain_enum domain, enum address_class theclass)
   4595 {
   4596   struct block_iterator iter;
   4597   int inc;
   4598   struct symbol *sym;
   4599 
   4600   inc = name[0];
   4601   ALL_BLOCK_SYMBOLS (block, iter, sym)
   4602     {
   4603       if (SYMBOL_LINKAGE_NAME (sym)[0] == inc
   4604 	  && SYMBOL_DOMAIN (sym) == domain
   4605 	  && SYMBOL_CLASS (sym) == theclass
   4606 	  && strcmp (SYMBOL_LINKAGE_NAME (sym), name) == 0)
   4607 	return sym;
   4608     }
   4609 
   4610   block = BLOCK_SUPERBLOCK (block);
   4611   if (block)
   4612     return mylookup_symbol (name, block, domain, theclass);
   4613   return 0;
   4614 }
   4615 
   4616 
   4617 /* Add a new symbol S to a block B.  */
   4618 
   4619 static void
   4620 add_symbol (struct symbol *s, struct symtab *symtab, struct block *b)
   4621 {
   4622   symbol_set_symtab (s, symtab);
   4623   dict_add_symbol (BLOCK_DICT (b), s);
   4624 }
   4625 
   4626 /* Add a new block B to a symtab S.  */
   4627 
   4628 static void
   4629 add_block (struct block *b, struct symtab *s)
   4630 {
   4631   /* Cast away "const", but that's ok because we're building the
   4632      symtab and blockvector here.  */
   4633   struct blockvector *bv = (struct blockvector *) SYMTAB_BLOCKVECTOR (s);
   4634 
   4635   bv = (struct blockvector *) xrealloc ((void *) bv,
   4636 					(sizeof (struct blockvector)
   4637 					 + BLOCKVECTOR_NBLOCKS (bv)
   4638 					 * sizeof (bv->block)));
   4639   if (bv != SYMTAB_BLOCKVECTOR (s))
   4640     SYMTAB_BLOCKVECTOR (s) = bv;
   4641 
   4642   BLOCKVECTOR_BLOCK (bv, BLOCKVECTOR_NBLOCKS (bv)++) = b;
   4643 }
   4644 
   4645 /* Add a new linenumber entry (LINENO,ADR) to a linevector LT.
   4646    MIPS' linenumber encoding might need more than one byte
   4647    to describe it, LAST is used to detect these continuation lines.
   4648 
   4649    Combining lines with the same line number seems like a bad idea.
   4650    E.g: There could be a line number entry with the same line number after the
   4651    prologue and GDB should not ignore it (this is a better way to find
   4652    a prologue than mips_skip_prologue).
   4653    But due to the compressed line table format there are line number entries
   4654    for the same line which are needed to bridge the gap to the next
   4655    line number entry.  These entries have a bogus address info with them
   4656    and we are unable to tell them from intended duplicate line number
   4657    entries.
   4658    This is another reason why -ggdb debugging format is preferable.  */
   4659 
   4660 static int
   4661 add_line (struct linetable *lt, int lineno, CORE_ADDR adr, int last)
   4662 {
   4663   /* DEC c89 sometimes produces zero linenos which confuse gdb.
   4664      Change them to something sensible.  */
   4665   if (lineno == 0)
   4666     lineno = 1;
   4667   if (last == 0)
   4668     last = -2;			/* Make sure we record first line.  */
   4669 
   4670   if (last == lineno)		/* Skip continuation lines.  */
   4671     return lineno;
   4672 
   4673   lt->item[lt->nitems].line = lineno;
   4674   lt->item[lt->nitems++].pc = adr << 2;
   4675   return lineno;
   4676 }
   4677 
   4678 /* Sorting and reordering procedures.  */
   4680 
   4681 /* Blocks with a smaller low bound should come first.  */
   4682 
   4683 static int
   4684 compare_blocks (const void *arg1, const void *arg2)
   4685 {
   4686   LONGEST addr_diff;
   4687   struct block **b1 = (struct block **) arg1;
   4688   struct block **b2 = (struct block **) arg2;
   4689 
   4690   addr_diff = (BLOCK_START ((*b1))) - (BLOCK_START ((*b2)));
   4691   if (addr_diff == 0)
   4692     return (BLOCK_END ((*b2))) - (BLOCK_END ((*b1)));
   4693   return addr_diff;
   4694 }
   4695 
   4696 /* Sort the blocks of a symtab S.
   4697    Reorder the blocks in the blockvector by code-address,
   4698    as required by some MI search routines.  */
   4699 
   4700 static void
   4701 sort_blocks (struct symtab *s)
   4702 {
   4703   /* We have to cast away const here, but this is ok because we're
   4704      constructing the blockvector in this code.  */
   4705   struct blockvector *bv = (struct blockvector *) SYMTAB_BLOCKVECTOR (s);
   4706 
   4707   if (BLOCKVECTOR_NBLOCKS (bv) <= FIRST_LOCAL_BLOCK)
   4708     {
   4709       /* Cosmetic */
   4710       if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) == 0)
   4711 	BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) = 0;
   4712       if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) == 0)
   4713 	BLOCK_START (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) = 0;
   4714       return;
   4715     }
   4716   /*
   4717    * This is very unfortunate: normally all functions are compiled in
   4718    * the order they are found, but if the file is compiled -O3 things
   4719    * are very different.  It would be nice to find a reliable test
   4720    * to detect -O3 images in advance.
   4721    */
   4722   if (BLOCKVECTOR_NBLOCKS (bv) > FIRST_LOCAL_BLOCK + 1)
   4723     qsort (&BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK),
   4724 	   BLOCKVECTOR_NBLOCKS (bv) - FIRST_LOCAL_BLOCK,
   4725 	   sizeof (struct block *),
   4726 	   compare_blocks);
   4727 
   4728   {
   4729     CORE_ADDR high = 0;
   4730     int i, j = BLOCKVECTOR_NBLOCKS (bv);
   4731 
   4732     for (i = FIRST_LOCAL_BLOCK; i < j; i++)
   4733       if (high < BLOCK_END (BLOCKVECTOR_BLOCK (bv, i)))
   4734 	high = BLOCK_END (BLOCKVECTOR_BLOCK (bv, i));
   4735     BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) = high;
   4736   }
   4737 
   4738   BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) =
   4739     BLOCK_START (BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK));
   4740 
   4741   BLOCK_START (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
   4742     BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
   4743   BLOCK_END (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
   4744     BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
   4745 }
   4746 
   4747 
   4749 /* Constructor/restructor/destructor procedures.  */
   4750 
   4751 /* Allocate a new symtab for NAME.  Needs an estimate of how many
   4752    linenumbers MAXLINES we'll put in it.  */
   4753 
   4754 static struct compunit_symtab *
   4755 new_symtab (const char *name, int maxlines, struct objfile *objfile)
   4756 {
   4757   struct compunit_symtab *cust = allocate_compunit_symtab (objfile, name);
   4758   struct symtab *symtab;
   4759   struct blockvector *bv;
   4760 
   4761   add_compunit_symtab_to_objfile (cust);
   4762   symtab = allocate_symtab (cust, name);
   4763 
   4764   SYMTAB_LINETABLE (symtab) = new_linetable (maxlines);
   4765 
   4766   /* All symtabs must have at least two blocks.  */
   4767   bv = new_bvect (2);
   4768   BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK) = new_block (NON_FUNCTION_BLOCK);
   4769   BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK) = new_block (NON_FUNCTION_BLOCK);
   4770   BLOCK_SUPERBLOCK (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
   4771     BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
   4772   COMPUNIT_BLOCKVECTOR (cust) = bv;
   4773 
   4774   COMPUNIT_DEBUGFORMAT (cust) = "ECOFF";
   4775   return cust;
   4776 }
   4777 
   4778 /* Allocate a new partial_symtab NAME.  */
   4779 
   4780 static struct partial_symtab *
   4781 new_psymtab (char *name, struct objfile *objfile)
   4782 {
   4783   struct partial_symtab *psymtab;
   4784 
   4785   psymtab = allocate_psymtab (name, objfile);
   4786 
   4787   /* Keep a backpointer to the file's symbols.  */
   4788 
   4789   psymtab->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
   4790 						sizeof (struct symloc));
   4791   memset (psymtab->read_symtab_private, 0, sizeof (struct symloc));
   4792   CUR_BFD (psymtab) = cur_bfd;
   4793   DEBUG_SWAP (psymtab) = debug_swap;
   4794   DEBUG_INFO (psymtab) = debug_info;
   4795   PENDING_LIST (psymtab) = pending_list;
   4796 
   4797   /* The way to turn this into a symtab is to call...  */
   4798   psymtab->read_symtab = mdebug_read_symtab;
   4799   return (psymtab);
   4800 }
   4801 
   4802 
   4803 /* Allocate a linetable array of the given SIZE.  Since the struct
   4804    already includes one item, we subtract one when calculating the
   4805    proper size to allocate.  */
   4806 
   4807 static struct linetable *
   4808 new_linetable (int size)
   4809 {
   4810   struct linetable *l;
   4811 
   4812   if (size > 1)
   4813     --size;
   4814   size = size * sizeof (l->item) + sizeof (struct linetable);
   4815   l = (struct linetable *) xmalloc (size);
   4816   l->nitems = 0;
   4817   return l;
   4818 }
   4819 
   4820 /* Oops, too big.  Shrink it.  This was important with the 2.4 linetables,
   4821    I am not so sure about the 3.4 ones.
   4822 
   4823    Since the struct linetable already includes one item, we subtract one when
   4824    calculating the proper size to allocate.  */
   4825 
   4826 static struct linetable *
   4827 shrink_linetable (struct linetable *lt)
   4828 {
   4829   return (struct linetable *) xrealloc ((void *) lt,
   4830 					(sizeof (struct linetable)
   4831 					 + ((lt->nitems - 1)
   4832 					    * sizeof (lt->item))));
   4833 }
   4834 
   4835 /* Allocate and zero a new blockvector of NBLOCKS blocks.  */
   4836 
   4837 static struct blockvector *
   4838 new_bvect (int nblocks)
   4839 {
   4840   struct blockvector *bv;
   4841   int size;
   4842 
   4843   size = sizeof (struct blockvector) + nblocks * sizeof (struct block *);
   4844   bv = (struct blockvector *) xzalloc (size);
   4845 
   4846   BLOCKVECTOR_NBLOCKS (bv) = nblocks;
   4847 
   4848   return bv;
   4849 }
   4850 
   4851 /* Allocate and zero a new block, and set its BLOCK_DICT.  If function
   4852    is non-zero, assume the block is associated to a function, and make
   4853    sure that the symbols are stored linearly; otherwise, store them
   4854    hashed.  */
   4855 
   4856 static struct block *
   4857 new_block (enum block_type type)
   4858 {
   4859   /* FIXME: carlton/2003-09-11: This should use allocate_block to
   4860      allocate the block.  Which, in turn, suggests that the block
   4861      should be allocated on an obstack.  */
   4862   struct block *retval = XCNEW (struct block);
   4863 
   4864   if (type == FUNCTION_BLOCK)
   4865     BLOCK_DICT (retval) = dict_create_linear_expandable ();
   4866   else
   4867     BLOCK_DICT (retval) = dict_create_hashed_expandable ();
   4868 
   4869   return retval;
   4870 }
   4871 
   4872 /* Create a new symbol with printname NAME.  */
   4873 
   4874 static struct symbol *
   4875 new_symbol (char *name)
   4876 {
   4877   struct symbol *s = allocate_symbol (mdebugread_objfile);
   4878 
   4879   SYMBOL_SET_LANGUAGE (s, psymtab_language,
   4880 		       &mdebugread_objfile->objfile_obstack);
   4881   SYMBOL_SET_NAMES (s, name, strlen (name), 1, mdebugread_objfile);
   4882   return s;
   4883 }
   4884 
   4885 /* Create a new type with printname NAME.  */
   4886 
   4887 static struct type *
   4888 new_type (char *name)
   4889 {
   4890   struct type *t;
   4891 
   4892   t = alloc_type (mdebugread_objfile);
   4893   TYPE_NAME (t) = name;
   4894   INIT_CPLUS_SPECIFIC (t);
   4895   return t;
   4896 }
   4897 
   4898 /* Read ECOFF debugging information from a BFD section.  This is
   4900    called from elfread.c.  It parses the section into a
   4901    ecoff_debug_info struct, and then lets the rest of the file handle
   4902    it as normal.  */
   4903 
   4904 void
   4905 elfmdebug_build_psymtabs (struct objfile *objfile,
   4906 			  const struct ecoff_debug_swap *swap, asection *sec)
   4907 {
   4908   bfd *abfd = objfile->obfd;
   4909   struct ecoff_debug_info *info;
   4910   struct cleanup *back_to;
   4911 
   4912   /* FIXME: It's not clear whether we should be getting minimal symbol
   4913      information from .mdebug in an ELF file, or whether we will.
   4914      Re-initialize the minimal symbol reader in case we do.  */
   4915 
   4916   init_minimal_symbol_collection ();
   4917   back_to = make_cleanup_discard_minimal_symbols ();
   4918 
   4919   info = ((struct ecoff_debug_info *)
   4920 	  obstack_alloc (&objfile->objfile_obstack,
   4921 			 sizeof (struct ecoff_debug_info)));
   4922 
   4923   if (!(*swap->read_debug_info) (abfd, sec, info))
   4924     error (_("Error reading ECOFF debugging information: %s"),
   4925 	   bfd_errmsg (bfd_get_error ()));
   4926 
   4927   mdebug_build_psymtabs (objfile, swap, info);
   4928 
   4929   install_minimal_symbols (objfile);
   4930   do_cleanups (back_to);
   4931 }
   4932 
   4933 void
   4934 _initialize_mdebugread (void)
   4935 {
   4936   basic_type_data = register_objfile_data ();
   4937 
   4938   mdebug_register_index
   4939     = register_symbol_register_impl (LOC_REGISTER, &mdebug_register_funcs);
   4940   mdebug_regparm_index
   4941     = register_symbol_register_impl (LOC_REGPARM_ADDR, &mdebug_register_funcs);
   4942 }
   4943