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