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