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