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