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