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