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