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