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