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