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