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