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