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