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
index_complaint(const char * arg1)127 index_complaint (const char *arg1)
128 {
129   complaint (_("bad aux index at symbol %s"), arg1);
130 }
131 
132 static void
unknown_ext_complaint(const char * arg1)133 unknown_ext_complaint (const char *arg1)
134 {
135   complaint (_("unknown external symbol %s"), arg1);
136 }
137 
138 static void
basic_type_complaint(int arg1,const char * arg2)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
bad_tag_guess_complaint(const char * arg1)146 bad_tag_guess_complaint (const char *arg1)
147 {
148   complaint (_("guessed tag type of %s incorrectly"), arg1);
149 }
150 
151 static void
bad_rfd_entry_complaint(const char * arg1,int arg2,int arg3)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
unexpected_type_code_complaint(const char * arg1)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
mdebug_read_symtab(legacy_psymtab * self,struct objfile * objfile)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 *
get_rfd(int cf,int rf)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 *
fdr_name(FDR * f)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
mdebug_build_psymtabs(minimal_symbol_reader & reader,struct objfile * objfile,const struct ecoff_debug_swap * swap,struct ecoff_debug_info * info)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
push_parse_stack(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
pop_parse_stack(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 *
is_pending_symbol(FDR * fh,char * sh)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
add_pending(FDR * fh,char * sh,struct type * t)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
reg_value_complaint(int regnum,int num_regs,const char * sym)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
mdebug_reg_to_regnum(struct symbol * sym,struct gdbarch * gdbarch)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
add_data_symbol(SYMR * sh,union aux_ext * ax,int bigend,struct symbol * s,int aclass_index,struct block * b,struct objfile * objfile,const char * name)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
parse_symbol(SYMR * sh,union aux_ext * ax,char * ext_sh,int bigend,const section_offsets & section_offsets,struct objfile * objfile)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 *
basic_type(int bt,struct objfile * objfile)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 *
parse_type(int fd,union aux_ext * ax,unsigned int aux_index,int * bs,int bigend,const char * sym_name)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
upgrade_type(int fd,struct type ** tpp,int tq,union aux_ext * ax,int bigend,const char * sym_name)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
parse_procedure(PDR * pr,struct compunit_symtab * search_symtab,legacy_psymtab * pst)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
parse_external(EXTR * es,int bigend,const section_offsets & section_offsets,struct objfile * objfile)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
parse_lines(FDR * fh,PDR * pr,struct linetable * lt,int maxlines,CORE_ADDR lowest_pdr_addr)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
function_outside_compilation_unit_complaint(const char * arg1)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
record_minimal_symbol(minimal_symbol_reader & reader,const char * name,const unrelocated_addr address,enum minimal_symbol_type ms_type,int storage_class,struct objfile * objfile)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
parse_partial_symbols(minimal_symbol_reader & reader,psymtab_storage * partial_symtabs,struct objfile * objfile)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
handle_psymbol_enumerators(struct objfile * objfile,psymtab_storage * partial_symtabs,partial_symtab * pst,FDR * fh,int stype,CORE_ADDR svalue)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 *
mdebug_next_symbol_text(struct objfile * objfile)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
mdebug_expand_psymtab(legacy_psymtab * pst,struct objfile * objfile)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
has_opaque_xref(FDR * fh,SYMR * sh)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
cross_ref(int fd,union aux_ext * ax,struct type ** tpp,enum type_code type_code,const char ** pname,int bigend,const char * sym_name)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 *
mylookup_symbol(const char * name,const struct block * block,domain_enum domain,enum address_class theclass)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
add_symbol(struct symbol * s,struct symtab * symtab,struct block * b)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
add_block(struct block * b,struct symtab * s)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
add_line(struct linetable * lt,int lineno,CORE_ADDR adr,int last)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
block_is_less_than(const struct block * b1,const struct block * b2)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
sort_blocks(struct symtab * s)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 *
new_symtab(const char * name,int maxlines,struct objfile * objfile)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 *
new_psymtab(const char * name,psymtab_storage * partial_symtabs,struct objfile * objfile)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 *
new_linetable(int size)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 *
shrink_linetable(struct linetable * lt)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 *
new_bvect(int nblocks)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 *
new_block(struct objfile * objfile,enum block_type type,enum language language)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 *
new_symbol(const char * name)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 *
new_type(char * name)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
elfmdebug_build_psymtabs(struct objfile * objfile,const struct ecoff_debug_swap * swap,asection * sec)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
_initialize_mdebugread()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