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