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