import gdb-1999-05-25 snapshot
[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, Boston, MA 02111-1307, USA.  */
23
24 /* This module provides the function mdebug_build_psymtabs.  It reads
25    ECOFF debugging information into partial symbol tables.  The
26    debugging information is read from two structures.  A struct
27    ecoff_debug_swap includes the sizes of each ECOFF structure and
28    swapping routines; these are fixed for a particular target.  A
29    struct ecoff_debug_info points to the debugging information for a
30    particular object file.
31
32    ECOFF symbol tables are mostly written in the byte order of the
33    target machine.  However, one section of the table (the auxiliary
34    symbol information) is written in the host byte order.  There is a
35    bit in the other symbol info which describes which host byte order
36    was used.  ECOFF thereby takes the trophy from Intel `b.out' for
37    the most brain-dead adaptation of a file format to byte order.
38
39    This module can read all four of the known byte-order combinations,
40    on any type of host.  */
41
42 #include "defs.h"
43 #include "symtab.h"
44 #include "gdbtypes.h"
45 #include "gdbcore.h"
46 #include "symfile.h"
47 #include "objfiles.h"
48 #include "obstack.h"
49 #include "buildsym.h"
50 #include "stabsread.h"
51 #include "complaints.h"
52 #include "demangle.h"
53
54 /* These are needed if the tm.h file does not contain the necessary
55    mips specific definitions.  */
56
57 #ifndef MIPS_EFI_SYMBOL_NAME
58 #define MIPS_EFI_SYMBOL_NAME "__GDB_EFI_INFO__"
59 extern void ecoff_relocate_efi PARAMS ((struct symbol *, CORE_ADDR));
60 #include "coff/sym.h"
61 #include "coff/symconst.h"
62 typedef struct mips_extra_func_info {
63         long    numargs;
64         PDR     pdr;
65 } *mips_extra_func_info_t;
66 #ifndef RA_REGNUM
67 #define RA_REGNUM 0
68 #endif
69 #endif
70
71 #ifdef USG
72 #include <sys/types.h>
73 #endif
74
75 #include "gdb_stat.h"
76 #include "gdb_string.h"
77
78 #include "gdb-stabs.h"
79
80 #include "bfd.h"
81
82 #include "coff/ecoff.h"         /* COFF-like aspects of ecoff files */
83
84 #include "libaout.h"            /* Private BFD a.out information.  */
85 #include "aout/aout64.h"
86 #include "aout/stab_gnu.h"      /* STABS information */
87
88 #include "expression.h"
89 #include "language.h"           /* Needed inside partial-stab.h */
90
91 extern void _initialize_mdebugread PARAMS ((void));
92
93 /* Provide a default mapping from a ecoff register number to a gdb REGNUM.  */
94 #ifndef ECOFF_REG_TO_REGNUM
95 #define ECOFF_REG_TO_REGNUM(num) (num)
96 #endif
97
98 /* Provide a way to test if we have both ECOFF and ELF symbol tables.  
99    We use this define in order to know whether we should override a 
100    symbol's ECOFF section with its ELF section.  This is necessary in 
101    case the symbol's ELF section could not be represented in ECOFF.  */
102 #define ECOFF_IN_ELF(bfd) (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
103                            && bfd_get_section_by_name (bfd, ".mdebug") != NULL)
104
105 \f
106 /* We put a pointer to this structure in the read_symtab_private field
107    of the psymtab.  */
108
109 struct symloc
110 {
111   /* Index of the FDR that this psymtab represents.  */
112   int fdr_idx;
113   /* The BFD that the psymtab was created from.  */
114   bfd *cur_bfd;
115   const struct ecoff_debug_swap *debug_swap;
116   struct ecoff_debug_info *debug_info;
117   struct mdebug_pending **pending_list;
118   /* Pointer to external symbols for this file.  */
119   EXTR *extern_tab;
120   /* Size of extern_tab.  */
121   int extern_count;
122   enum language pst_language;
123 };
124
125 #define PST_PRIVATE(p) ((struct symloc *)(p)->read_symtab_private)
126 #define FDR_IDX(p) (PST_PRIVATE(p)->fdr_idx)
127 #define CUR_BFD(p) (PST_PRIVATE(p)->cur_bfd)
128 #define DEBUG_SWAP(p) (PST_PRIVATE(p)->debug_swap)
129 #define DEBUG_INFO(p) (PST_PRIVATE(p)->debug_info)
130 #define PENDING_LIST(p) (PST_PRIVATE(p)->pending_list)
131
132 #define SC_IS_TEXT(sc) ((sc) == scText \
133                    || (sc) == scRConst \
134                    || (sc) == scInit \
135                    || (sc) == scFini)
136 #define SC_IS_DATA(sc) ((sc) == scData \
137                    || (sc) == scSData \
138                    || (sc) == scRData \
139                    || (sc) == scPData \
140                    || (sc) == scXData)
141 #define SC_IS_COMMON(sc) ((sc) == scCommon || (sc) == scSCommon)
142 #define SC_IS_BSS(sc) ((sc) == scBss || (sc) == scSBss)
143 #define SC_IS_UNDEF(sc) ((sc) == scUndefined || (sc) == scSUndefined)
144                                       
145 \f
146 /* Things we import explicitly from other modules */
147
148 extern int info_verbose;
149
150 /* Various complaints about symbol reading that don't abort the process */
151
152 static struct complaint bad_file_number_complaint =
153 {"bad file number %d", 0, 0};
154
155 static struct complaint index_complaint =
156 {"bad aux index at symbol %s", 0, 0};
157
158 static struct complaint aux_index_complaint =
159 {"bad proc end in aux found from symbol %s", 0, 0};
160
161 static struct complaint block_index_complaint =
162 {"bad aux index at block symbol %s", 0, 0};
163
164 static struct complaint unknown_ext_complaint =
165 {"unknown external symbol %s", 0, 0};
166
167 static struct complaint unknown_sym_complaint =
168 {"unknown local symbol %s", 0, 0};
169
170 static struct complaint unknown_st_complaint =
171 {"with type %d", 0, 0};
172
173 static struct complaint block_overflow_complaint =
174 {"block containing %s overfilled", 0, 0};
175
176 static struct complaint basic_type_complaint =
177 {"cannot map ECOFF basic type 0x%x for %s", 0, 0};
178
179 static struct complaint unknown_type_qual_complaint =
180 {"unknown type qualifier 0x%x", 0, 0};
181
182 static struct complaint array_index_type_complaint =
183 {"illegal array index type for %s, assuming int", 0, 0};
184
185 static struct complaint bad_tag_guess_complaint =
186 {"guessed tag type of %s incorrectly", 0, 0};
187
188 static struct complaint block_member_complaint =
189 {"declaration block contains unhandled symbol type %d", 0, 0};
190
191 static struct complaint stEnd_complaint =
192 {"stEnd with storage class %d not handled", 0, 0};
193
194 static struct complaint unknown_mdebug_symtype_complaint =
195 {"unknown symbol type 0x%x", 0, 0};
196
197 static struct complaint stab_unknown_complaint =
198 {"unknown stabs symbol %s", 0, 0};
199
200 static struct complaint pdr_for_nonsymbol_complaint =
201 {"PDR for %s, but no symbol", 0, 0};
202
203 static struct complaint pdr_static_symbol_complaint =
204 {"can't handle PDR for static proc at 0x%lx", 0, 0};
205
206 static struct complaint bad_setjmp_pdr_complaint =
207 {"fixing bad setjmp PDR from libc", 0, 0};
208
209 static struct complaint bad_fbitfield_complaint =
210 {"can't handle TIR fBitfield for %s", 0, 0};
211
212 static struct complaint bad_continued_complaint =
213 {"illegal TIR continued for %s", 0, 0};
214
215 static struct complaint bad_rfd_entry_complaint =
216 {"bad rfd entry for %s: file %d, index %d", 0, 0};
217
218 static struct complaint unexpected_type_code_complaint =
219 {"unexpected type code for %s", 0, 0};
220
221 static struct complaint unable_to_cross_ref_complaint =
222 {"unable to cross ref btTypedef for %s", 0, 0};
223
224 static struct complaint bad_indirect_xref_complaint =
225 {"unable to cross ref btIndirect for %s", 0, 0};
226
227 static struct complaint illegal_forward_tq0_complaint =
228 {"illegal tq0 in forward typedef for %s", 0, 0};
229
230 static struct complaint illegal_forward_bt_complaint =
231 {"illegal bt %d in forward typedef for %s", 0, 0};
232
233 static struct complaint bad_linetable_guess_complaint =
234 {"guessed size of linetable for %s incorrectly", 0, 0};
235
236 static struct complaint bad_ext_ifd_complaint =
237 {"bad ifd for external symbol: %d (max %d)", 0, 0};
238
239 static struct complaint bad_ext_iss_complaint =
240 {"bad iss for external symbol: %ld (max %ld)", 0, 0};
241
242 /* Macros and extra defs */
243
244 /* Puns: hard to find whether -g was used and how */
245
246 #define MIN_GLEVEL GLEVEL_0
247 #define compare_glevel(a,b)                                     \
248         (((a) == GLEVEL_3) ? ((b) < GLEVEL_3) :                 \
249          ((b) == GLEVEL_3) ? -1 : (int)((b) - (a)))
250 \f
251 /* Things that really are local to this module */
252
253 /* Remember what we deduced to be the source language of this psymtab. */
254
255 static enum language psymtab_language = language_unknown;
256
257 /* Current BFD.  */
258
259 static bfd *cur_bfd;
260
261 /* How to parse debugging information for CUR_BFD.  */
262
263 static const struct ecoff_debug_swap *debug_swap;
264
265 /* Pointers to debugging information for CUR_BFD.  */
266
267 static struct ecoff_debug_info *debug_info;
268
269 /* Pointer to current file decriptor record, and its index */
270
271 static FDR *cur_fdr;
272 static int cur_fd;
273
274 /* Index of current symbol */
275
276 static int cur_sdx;
277
278 /* Note how much "debuggable" this image is.  We would like
279    to see at least one FDR with full symbols */
280
281 static int max_gdbinfo;
282 static int max_glevel;
283
284 /* When examining .o files, report on undefined symbols */
285
286 static int n_undef_symbols, n_undef_labels, n_undef_vars, n_undef_procs;
287
288 /* Pseudo symbol to use when putting stabs into the symbol table.  */
289
290 static char stabs_symbol[] = STABS_SYMBOL;
291
292 /* Types corresponding to mdebug format bt* basic types.  */
293
294 static struct type *mdebug_type_void;
295 static struct type *mdebug_type_char;
296 static struct type *mdebug_type_short;
297 static struct type *mdebug_type_int_32;
298 #define mdebug_type_int mdebug_type_int_32
299 static struct type *mdebug_type_int_64;
300 static struct type *mdebug_type_long_32;
301 static struct type *mdebug_type_long_64;
302 static struct type *mdebug_type_long_long_64;
303 static struct type *mdebug_type_unsigned_char;
304 static struct type *mdebug_type_unsigned_short;
305 static struct type *mdebug_type_unsigned_int_32;
306 static struct type *mdebug_type_unsigned_int_64;
307 static struct type *mdebug_type_unsigned_long_32;
308 static struct type *mdebug_type_unsigned_long_64;
309 static struct type *mdebug_type_unsigned_long_long_64;
310 static struct type *mdebug_type_adr_32;
311 static struct type *mdebug_type_adr_64;
312 static struct type *mdebug_type_float;
313 static struct type *mdebug_type_double;
314 static struct type *mdebug_type_complex;
315 static struct type *mdebug_type_double_complex;
316 static struct type *mdebug_type_fixed_dec;
317 static struct type *mdebug_type_float_dec;
318 static struct type *mdebug_type_string;
319
320 /* Types for symbols from files compiled without debugging info.  */
321
322 static struct type *nodebug_func_symbol_type;
323 static struct type *nodebug_var_symbol_type;
324
325 /* Nonzero if we have seen ecoff debugging info for a file.  */
326
327 static int found_ecoff_debugging_info;
328
329 /* Forward declarations */
330
331 static void
332 add_pending PARAMS ((FDR *, char *, struct type *));
333
334 static struct mdebug_pending *
335 is_pending_symbol PARAMS ((FDR *, char *));
336
337 static void
338 pop_parse_stack PARAMS ((void));
339
340 static void
341 push_parse_stack PARAMS ((void));
342
343 static char *
344 fdr_name PARAMS ((FDR *));
345
346 static void
347 mdebug_psymtab_to_symtab PARAMS ((struct partial_symtab *));
348
349 static int
350 upgrade_type PARAMS ((int, struct type **, int, union aux_ext *, int, char *));
351
352 static void
353 parse_partial_symbols PARAMS ((struct objfile *,
354                                struct section_offsets *));
355
356 static FDR
357 *get_rfd PARAMS ((int, int));
358
359 static int
360 has_opaque_xref PARAMS ((FDR *, SYMR *));
361
362 static int
363 cross_ref PARAMS ((int, union aux_ext *, struct type **, enum type_code,
364                    char **, int, char *));
365
366 static struct symbol *
367 new_symbol PARAMS ((char *));
368
369 static struct type *
370 new_type PARAMS ((char *));
371
372 static struct block *
373 new_block PARAMS ((int));
374
375 static struct symtab *
376 new_symtab PARAMS ((char *, int, int, struct objfile *));
377
378 static struct linetable *
379 new_linetable PARAMS ((int));
380
381 static struct blockvector *
382 new_bvect PARAMS ((int));
383
384 static int
385 parse_symbol PARAMS ((SYMR *, union aux_ext *, char *, int, struct section_offsets *));
386
387 static struct type *
388 parse_type PARAMS ((int, union aux_ext *, unsigned int, int *, int, char *));
389
390 static struct symbol *
391 mylookup_symbol PARAMS ((char *, struct block *, namespace_enum,
392                          enum address_class));
393
394 static struct block *
395 shrink_block PARAMS ((struct block *, struct symtab *));
396
397 static PTR
398 xzalloc PARAMS ((unsigned int));
399
400 static void
401 sort_blocks PARAMS ((struct symtab *));
402
403 static int
404 compare_blocks PARAMS ((const void *, const void *));
405
406 static struct partial_symtab *
407 new_psymtab PARAMS ((char *, struct objfile *, struct section_offsets *));
408
409 static void
410 psymtab_to_symtab_1 PARAMS ((struct partial_symtab *, char *));
411
412 static void
413 add_block PARAMS ((struct block *, struct symtab *));
414
415 static void
416 add_symbol PARAMS ((struct symbol *, struct block *));
417
418 static int
419 add_line PARAMS ((struct linetable *, int, CORE_ADDR, int));
420
421 static struct linetable *
422 shrink_linetable PARAMS ((struct linetable *));
423
424 static void
425 handle_psymbol_enumerators PARAMS ((struct objfile *, FDR *, int, CORE_ADDR));
426
427 static char *
428 mdebug_next_symbol_text PARAMS ((struct objfile *));
429 \f
430 /* Address bounds for the signal trampoline in inferior, if any */
431
432 CORE_ADDR sigtramp_address, sigtramp_end;
433
434 /* Allocate zeroed memory */
435
436 static PTR
437 xzalloc (size)
438      unsigned int size;
439 {
440   PTR p = xmalloc (size);
441
442   memset (p, 0, size);
443   return p;
444 }
445
446 /* Exported procedure: Builds a symtab from the PST partial one.
447    Restores the environment in effect when PST was created, delegates
448    most of the work to an ancillary procedure, and sorts
449    and reorders the symtab list at the end */
450
451 static void
452 mdebug_psymtab_to_symtab (pst)
453      struct partial_symtab *pst;
454 {
455
456   if (!pst)
457     return;
458
459   if (info_verbose)
460     {
461       printf_filtered ("Reading in symbols for %s...", pst->filename);
462       gdb_flush (gdb_stdout);
463     }
464
465   next_symbol_text_func = mdebug_next_symbol_text;
466
467   psymtab_to_symtab_1 (pst, pst->filename);
468
469   /* Match with global symbols.  This only needs to be done once,
470      after all of the symtabs and dependencies have been read in.   */
471   scan_file_globals (pst->objfile);
472
473   if (info_verbose)
474     printf_filtered ("done.\n");
475 }
476 \f
477 /* File-level interface functions */
478
479 /* Find a file descriptor given its index RF relative to a file CF */
480
481 static FDR *
482 get_rfd (cf, rf)
483      int cf, rf;
484 {
485   FDR *fdrs;
486   register FDR *f;
487   RFDT rfd;
488
489   fdrs = debug_info->fdr;
490   f = fdrs + cf;
491   /* Object files do not have the RFD table, all refs are absolute */
492   if (f->rfdBase == 0)
493     return fdrs + rf;
494   (*debug_swap->swap_rfd_in) (cur_bfd,
495                              ((char *) debug_info->external_rfd
496                               + ((f->rfdBase + rf)
497                                  * debug_swap->external_rfd_size)),
498                              &rfd);
499   return fdrs + rfd;
500 }
501
502 /* Return a safer print NAME for a file descriptor */
503
504 static char *
505 fdr_name (f)
506      FDR *f;
507 {
508   if (f->rss == -1)
509     return "<stripped file>";
510   if (f->rss == 0)
511     return "<NFY>";
512   return debug_info->ss + f->issBase + f->rss;
513 }
514
515
516 /* Read in and parse the symtab of the file OBJFILE.  Symbols from
517    different sections are relocated via the SECTION_OFFSETS.  */
518
519 void
520 mdebug_build_psymtabs (objfile, swap, info, section_offsets)
521      struct objfile *objfile;
522      const struct ecoff_debug_swap *swap;
523      struct ecoff_debug_info *info;
524      struct section_offsets *section_offsets;
525 {
526   cur_bfd = objfile->obfd;
527   debug_swap = swap;
528   debug_info = info;
529
530   /* Make sure all the FDR information is swapped in.  */
531   if (info->fdr == (FDR *) NULL)
532     {
533       char *fdr_src;
534       char *fdr_end;
535       FDR *fdr_ptr;
536
537       info->fdr = (FDR *) obstack_alloc (&objfile->psymbol_obstack,
538                                          (info->symbolic_header.ifdMax
539                                           * sizeof (FDR)));
540       fdr_src = info->external_fdr;
541       fdr_end = (fdr_src
542                  + info->symbolic_header.ifdMax * swap->external_fdr_size);
543       fdr_ptr = info->fdr;
544       for (; fdr_src < fdr_end; fdr_src += swap->external_fdr_size, fdr_ptr++)
545         (*swap->swap_fdr_in) (objfile->obfd, fdr_src, fdr_ptr);
546     }
547
548   parse_partial_symbols (objfile, section_offsets);
549
550 #if 0
551   /* Check to make sure file was compiled with -g.  If not, warn the
552      user of this limitation.  */
553   if (compare_glevel (max_glevel, GLEVEL_2) < 0)
554     {
555       if (max_gdbinfo == 0)
556         printf_unfiltered ("\n%s not compiled with -g, debugging support is limited.\n",
557                  objfile->name);
558       printf_unfiltered ("You should compile with -g2 or -g3 for best debugging support.\n");
559       gdb_flush (gdb_stdout);
560     }
561 #endif
562 }
563 \f
564 /* Local utilities */
565
566 /* Map of FDR indexes to partial symtabs */
567
568 struct pst_map
569 {
570   struct partial_symtab *pst;   /* the psymtab proper */
571   long n_globals;               /* exported globals (external symbols) */
572   long globals_offset;          /* cumulative */
573 };
574
575
576 /* Utility stack, used to nest procedures and blocks properly.
577    It is a doubly linked list, to avoid too many alloc/free.
578    Since we might need it quite a few times it is NOT deallocated
579    after use. */
580
581 static struct parse_stack
582 {
583   struct parse_stack *next, *prev;
584   struct symtab *cur_st;        /* Current symtab. */
585   struct block *cur_block;      /* Block in it. */
586
587   /* What are we parsing.  stFile, or stBlock are for files and
588      blocks.  stProc or stStaticProc means we have seen the start of a
589      procedure, but not the start of the block within in.  When we see
590      the start of that block, we change it to stNil, without pushing a
591      new block, i.e. stNil means both a procedure and a block.  */
592
593   int blocktype;
594
595   int maxsyms;                  /* Max symbols in this block. */
596   struct type *cur_type;        /* Type we parse fields for. */
597   int cur_field;                /* Field number in cur_type. */
598   CORE_ADDR procadr;            /* Start addres of this procedure */
599   int numargs;                  /* Its argument count */
600 }
601
602  *top_stack;                    /* Top stack ptr */
603
604
605 /* Enter a new lexical context */
606
607 static void
608 push_parse_stack ()
609 {
610   struct parse_stack *new;
611
612   /* Reuse frames if possible */
613   if (top_stack && top_stack->prev)
614     new = top_stack->prev;
615   else
616     new = (struct parse_stack *) xzalloc (sizeof (struct parse_stack));
617   /* Initialize new frame with previous content */
618   if (top_stack)
619     {
620       register struct parse_stack *prev = new->prev;
621
622       *new = *top_stack;
623       top_stack->prev = new;
624       new->prev = prev;
625       new->next = top_stack;
626     }
627   top_stack = new;
628 }
629
630 /* Exit a lexical context */
631
632 static void
633 pop_parse_stack ()
634 {
635   if (!top_stack)
636     return;
637   if (top_stack->next)
638     top_stack = top_stack->next;
639 }
640
641
642 /* Cross-references might be to things we haven't looked at
643    yet, e.g. type references.  To avoid too many type
644    duplications we keep a quick fixup table, an array
645    of lists of references indexed by file descriptor */
646
647 struct mdebug_pending
648 {
649   struct mdebug_pending *next;  /* link */
650   char *s;                      /* the unswapped symbol */
651   struct type *t;               /* its partial type descriptor */
652 };
653
654
655 /* The pending information is kept for an entire object file, and used
656    to be in the sym_private field.  I took it out when I split
657    mdebugread from mipsread, because this might not be the only type
658    of symbols read from an object file.  Instead, we allocate the
659    pending information table when we create the partial symbols, and
660    we store a pointer to the single table in each psymtab.  */
661
662 static struct mdebug_pending **pending_list;
663
664 /* Check whether we already saw symbol SH in file FH */
665
666 static struct mdebug_pending *
667 is_pending_symbol (fh, sh)
668      FDR *fh;
669      char *sh;
670 {
671   int f_idx = fh - debug_info->fdr;
672   register struct mdebug_pending *p;
673
674   /* Linear search is ok, list is typically no more than 10 deep */
675   for (p = pending_list[f_idx]; p; p = p->next)
676     if (p->s == sh)
677       break;
678   return p;
679 }
680
681 /* Add a new symbol SH of type T */
682
683 static void
684 add_pending (fh, sh, t)
685      FDR *fh;
686      char *sh;
687      struct type *t;
688 {
689   int f_idx = fh - debug_info->fdr;
690   struct mdebug_pending *p = is_pending_symbol (fh, sh);
691
692   /* Make sure we do not make duplicates */
693   if (!p)
694     {
695       p = ((struct mdebug_pending *)
696            obstack_alloc (&current_objfile->psymbol_obstack,
697                           sizeof (struct mdebug_pending)));
698       p->s = sh;
699       p->t = t;
700       p->next = pending_list[f_idx];
701       pending_list[f_idx] = p;
702     }
703 }
704 \f
705
706 /* Parsing Routines proper. */
707
708 /* Parse a single symbol. Mostly just make up a GDB symbol for it.
709    For blocks, procedures and types we open a new lexical context.
710    This is basically just a big switch on the symbol's type.  Argument
711    AX is the base pointer of aux symbols for this file (fh->iauxBase).
712    EXT_SH points to the unswapped symbol, which is needed for struct,
713    union, etc., types; it is NULL for an EXTR.  BIGEND says whether
714    aux symbols are big-endian or little-endian.  Return count of
715    SYMR's handled (normally one).  */
716
717 static int
718 parse_symbol (sh, ax, ext_sh, bigend, section_offsets)
719      SYMR *sh;
720      union aux_ext *ax;
721      char *ext_sh;
722      int bigend;
723      struct section_offsets *section_offsets;
724 {
725   const bfd_size_type external_sym_size = debug_swap->external_sym_size;
726   void (* const swap_sym_in) PARAMS ((bfd *, PTR, SYMR *)) =
727     debug_swap->swap_sym_in;
728   char *name;
729   struct symbol *s;
730   struct block *b;
731   struct mdebug_pending *pend;
732   struct type *t;
733   struct field *f;
734   int count = 1;
735   enum address_class class;
736   TIR tir;
737   long svalue = sh->value;
738   int bitsize;
739
740   if (ext_sh == (char *) NULL)
741     name = debug_info->ssext + sh->iss;
742   else
743     name = debug_info->ss + cur_fdr->issBase + sh->iss;
744
745   switch (sh->sc)
746     {
747     case scText:
748     case scRConst:
749       /* Do not relocate relative values.
750          The value of a stEnd symbol is the displacement from the
751          corresponding start symbol value.
752          The value of a stBlock symbol is the displacement from the
753          procedure address.  */
754       if (sh->st != stEnd && sh->st != stBlock)
755         sh->value += ANOFFSET (section_offsets, SECT_OFF_TEXT);
756       break;
757     case scData:
758     case scSData:
759     case scRData:
760     case scPData:
761     case scXData:
762       sh->value += ANOFFSET (section_offsets, SECT_OFF_DATA);
763       break;
764     case scBss:
765     case scSBss:
766       sh->value += ANOFFSET (section_offsets, SECT_OFF_BSS);
767       break;
768     }
769
770   switch (sh->st)
771     {
772     case stNil:
773       break;
774
775     case stGlobal:              /* external symbol, goes into global block */
776       class = LOC_STATIC;
777       b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (top_stack->cur_st),
778                              GLOBAL_BLOCK);
779       s = new_symbol (name);
780       SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
781       goto data;
782
783     case stStatic:              /* static data, goes into current block. */
784       class = LOC_STATIC;
785       b = top_stack->cur_block;
786       s = new_symbol (name);
787       if (SC_IS_COMMON(sh->sc))
788         {
789           /* It is a FORTRAN common block.  At least for SGI Fortran the
790              address is not in the symbol; we need to fix it later in
791              scan_file_globals.  */
792           int bucket = hashname (SYMBOL_NAME (s));
793           SYMBOL_VALUE_CHAIN (s) = global_sym_chain[bucket];
794           global_sym_chain[bucket] = s;
795         }
796       else
797         SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
798       goto data;
799
800     case stLocal:               /* local variable, goes into current block */
801       if (sh->sc == scRegister)
802         {
803           class = LOC_REGISTER;
804           svalue = ECOFF_REG_TO_REGNUM (svalue);
805         }
806       else
807         class = LOC_LOCAL;
808       b = top_stack->cur_block;
809       s = new_symbol (name);
810       SYMBOL_VALUE (s) = svalue;
811
812     data:                       /* Common code for symbols describing data */
813       SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
814       SYMBOL_CLASS (s) = class;
815       add_symbol (s, b);
816
817       /* Type could be missing if file is compiled without debugging info.  */
818       if (SC_IS_UNDEF(sh->sc)
819           || sh->sc == scNil || sh->index == indexNil)
820         SYMBOL_TYPE (s) = nodebug_var_symbol_type;
821       else
822         SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
823       /* Value of a data symbol is its memory address */
824       break;
825
826     case stParam:               /* arg to procedure, goes into current block */
827       max_gdbinfo++;
828       found_ecoff_debugging_info = 1;
829       top_stack->numargs++;
830
831       /* Special GNU C++ name.  */
832       if (is_cplus_marker (name[0]) && name[1] == 't' && name[2] == 0)
833         name = "this";          /* FIXME, not alloc'd in obstack */
834       s = new_symbol (name);
835
836       SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
837       switch (sh->sc)
838         {
839         case scRegister:
840           /* Pass by value in register.  */
841           SYMBOL_CLASS(s) = LOC_REGPARM;
842           svalue = ECOFF_REG_TO_REGNUM (svalue);
843           break;
844         case scVar:
845           /* Pass by reference on stack.  */
846           SYMBOL_CLASS(s) = LOC_REF_ARG;
847           break;
848         case scVarRegister:
849           /* Pass by reference in register.  */
850           SYMBOL_CLASS(s) = LOC_REGPARM_ADDR;
851           svalue = ECOFF_REG_TO_REGNUM (svalue);
852           break;
853         default:
854           /* Pass by value on stack.  */
855           SYMBOL_CLASS(s) = LOC_ARG;
856           break;
857         }
858       SYMBOL_VALUE (s) = svalue;
859       SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
860       add_symbol (s, top_stack->cur_block);
861       break;
862
863     case stLabel:               /* label, goes into current block */
864       s = new_symbol (name);
865       SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;     /* so that it can be used */
866       SYMBOL_CLASS (s) = LOC_LABEL;     /* but not misused */
867       SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
868       SYMBOL_TYPE (s) = mdebug_type_int;
869       add_symbol (s, top_stack->cur_block);
870       break;
871
872     case stProc:                /* Procedure, usually goes into global block */
873     case stStaticProc:          /* Static procedure, goes into current block */
874       s = new_symbol (name);
875       SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
876       SYMBOL_CLASS (s) = LOC_BLOCK;
877       /* Type of the return value */
878       if (SC_IS_UNDEF(sh->sc) || sh->sc == scNil)
879         t = mdebug_type_int;
880       else
881         {
882           t = parse_type (cur_fd, ax, sh->index + 1, 0, bigend, name);
883           if (STREQ(name, "malloc") && t->code == TYPE_CODE_VOID)
884             {
885               /* I don't know why, but, at least under Alpha GNU/Linux,
886                  when linking against a malloc without debugging
887                  symbols, its read as a function returning void---this
888                  is bad because it means we cannot call functions with
889                  string arguments interactively; i.e., "call
890                  printf("howdy\n")" would fail with the error message
891                  "program has no memory available".  To avoid this, we
892                  patch up the type and make it void*
893                  instead. (davidm@azstarnet.com)
894                  */
895               t = make_pointer_type (t, NULL);
896             }
897         }
898       b = top_stack->cur_block;
899       if (sh->st == stProc)
900         {
901           struct blockvector *bv = BLOCKVECTOR (top_stack->cur_st);
902           /* The next test should normally be true, but provides a
903              hook for nested functions (which we don't want to make
904              global). */
905           if (b == BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK))
906             b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
907           /* Irix 5 sometimes has duplicate names for the same
908              function.  We want to add such names up at the global
909              level, not as a nested function.  */
910           else if (sh->value == top_stack->procadr)
911             b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
912         }
913       add_symbol (s, b);
914
915       /* Make a type for the procedure itself */
916       SYMBOL_TYPE (s) = lookup_function_type (t);
917
918       /* Create and enter a new lexical context */
919       b = new_block (top_stack->maxsyms);
920       SYMBOL_BLOCK_VALUE (s) = b;
921       BLOCK_FUNCTION (b) = s;
922       BLOCK_START (b) = BLOCK_END (b) = sh->value;
923       BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
924       add_block (b, top_stack->cur_st);
925
926       /* Not if we only have partial info */
927       if (SC_IS_UNDEF(sh->sc) || sh->sc == scNil)
928         break;
929
930       push_parse_stack ();
931       top_stack->cur_block = b;
932       top_stack->blocktype = sh->st;
933       top_stack->cur_type = SYMBOL_TYPE (s);
934       top_stack->cur_field = -1;
935       top_stack->procadr = sh->value;
936       top_stack->numargs = 0;
937       break;
938
939       /* Beginning of code for structure, union, and enum definitions.
940                They all share a common set of local variables, defined here.  */
941       {
942         enum type_code type_code;
943         char *ext_tsym;
944         int nfields;
945         long max_value;
946         struct field *f;
947
948     case stStruct:              /* Start a block defining a struct type */
949         type_code = TYPE_CODE_STRUCT;
950         goto structured_common;
951
952     case stUnion:               /* Start a block defining a union type */
953         type_code = TYPE_CODE_UNION;
954         goto structured_common;
955
956     case stEnum:                /* Start a block defining an enum type */
957         type_code = TYPE_CODE_ENUM;
958         goto structured_common;
959
960     case stBlock:               /* Either a lexical block, or some type */
961         if (sh->sc != scInfo && !SC_IS_COMMON(sh->sc))
962           goto case_stBlock_code;       /* Lexical block */
963
964         type_code = TYPE_CODE_UNDEF;    /* We have a type.  */
965
966         /* Common code for handling struct, union, enum, and/or as-yet-
967            unknown-type blocks of info about structured data.  `type_code'
968            has been set to the proper TYPE_CODE, if we know it.  */
969       structured_common:
970         found_ecoff_debugging_info = 1;
971         push_parse_stack ();
972         top_stack->blocktype = stBlock;
973
974         /* First count the number of fields and the highest value. */
975         nfields = 0;
976         max_value = 0;
977         for (ext_tsym = ext_sh + external_sym_size;
978              ;
979              ext_tsym += external_sym_size)
980           {
981             SYMR tsym;
982
983             (*swap_sym_in) (cur_bfd, ext_tsym, &tsym);
984
985             switch (tsym.st)
986               {
987               case stEnd:
988                 goto end_of_fields;
989
990               case stMember:
991                 if (nfields == 0 && type_code == TYPE_CODE_UNDEF)
992                   {
993                     /* If the type of the member is Nil (or Void),
994                        without qualifiers, assume the tag is an
995                        enumeration.
996                        Alpha cc -migrate enums are recognized by a zero
997                        index and a zero symbol value.
998                        DU 4.0 cc enums are recognized by a member type of
999                        btEnum without qualifiers and a zero symbol value.  */
1000                     if (tsym.index == indexNil
1001                         || (tsym.index == 0 && sh->value == 0))
1002                       type_code = TYPE_CODE_ENUM;
1003                     else
1004                       {
1005                         (*debug_swap->swap_tir_in) (bigend,
1006                                                     &ax[tsym.index].a_ti,
1007                                                     &tir);
1008                         if ((tir.bt == btNil || tir.bt == btVoid
1009                              || (tir.bt == btEnum && sh->value == 0))
1010                             && tir.tq0 == tqNil)
1011                           type_code = TYPE_CODE_ENUM;
1012                       }
1013                   }
1014                 nfields++;
1015                 if (tsym.value > max_value)
1016                   max_value = tsym.value;
1017                 break;
1018
1019               case stBlock:
1020               case stUnion:
1021               case stEnum:
1022               case stStruct:
1023                 {
1024 #if 0
1025                   /* This is a no-op; is it trying to tell us something
1026                      we should be checking?  */
1027                   if (tsym.sc == scVariant);    /*UNIMPLEMENTED*/
1028 #endif
1029                   if (tsym.index != 0)
1030                     {
1031                       /* This is something like a struct within a
1032                          struct.  Skip over the fields of the inner
1033                          struct.  The -1 is because the for loop will
1034                          increment ext_tsym.  */
1035                       ext_tsym = ((char *) debug_info->external_sym
1036                                   + ((cur_fdr->isymBase + tsym.index - 1)
1037                                      * external_sym_size));
1038                     }
1039                 }
1040                 break;
1041
1042               case stTypedef:
1043                 /* mips cc puts out a typedef for struct x if it is not yet
1044                    defined when it encounters
1045                    struct y { struct x *xp; };
1046                    Just ignore it. */
1047                 break;
1048
1049               case stIndirect:
1050                 /* Irix5 cc puts out a stIndirect for struct x if it is not
1051                    yet defined when it encounters
1052                    struct y { struct x *xp; };
1053                    Just ignore it. */
1054                 break;
1055
1056               default:
1057                 complain (&block_member_complaint, tsym.st);
1058               }
1059           }
1060       end_of_fields:;
1061
1062         /* In an stBlock, there is no way to distinguish structs,
1063            unions, and enums at this point.  This is a bug in the
1064            original design (that has been fixed with the recent
1065            addition of the stStruct, stUnion, and stEnum symbol
1066            types.)  The way you can tell is if/when you see a variable
1067            or field of that type.  In that case the variable's type
1068            (in the AUX table) says if the type is struct, union, or
1069            enum, and points back to the stBlock here.  So you can
1070            patch the tag kind up later - but only if there actually is
1071            a variable or field of that type.
1072
1073            So until we know for sure, we will guess at this point.
1074            The heuristic is:
1075            If the first member has index==indexNil or a void type,
1076            assume we have an enumeration.
1077            Otherwise, if there is more than one member, and all
1078            the members have offset 0, assume we have a union.
1079            Otherwise, assume we have a struct.
1080
1081            The heuristic could guess wrong in the case of of an
1082            enumeration with no members or a union with one (or zero)
1083            members, or when all except the last field of a struct have
1084            width zero.  These are uncommon and/or illegal situations,
1085            and in any case guessing wrong probably doesn't matter
1086            much.
1087
1088            But if we later do find out we were wrong, we fixup the tag
1089            kind.  Members of an enumeration must be handled
1090            differently from struct/union fields, and that is harder to
1091            patch up, but luckily we shouldn't need to.  (If there are
1092            any enumeration members, we can tell for sure it's an enum
1093            here.) */
1094
1095         if (type_code == TYPE_CODE_UNDEF)
1096           {
1097             if (nfields > 1 && max_value == 0)
1098               type_code = TYPE_CODE_UNION;
1099             else
1100               type_code = TYPE_CODE_STRUCT;
1101           }
1102
1103         /* Create a new type or use the pending type.  */
1104         pend = is_pending_symbol (cur_fdr, ext_sh);
1105         if (pend == (struct mdebug_pending *) NULL)
1106           {
1107             t = new_type (NULL);
1108             add_pending (cur_fdr, ext_sh, t);
1109           }
1110         else
1111           t = pend->t;
1112
1113         /* Do not set the tag name if it is a compiler generated tag name
1114            (.Fxx or .xxfake or empty) for unnamed struct/union/enums.
1115            Alpha cc puts out an sh->iss of zero for those.  */
1116         if (sh->iss == 0 || name[0] == '.' || name[0] == '\0')
1117           TYPE_TAG_NAME (t) = NULL;
1118         else
1119           TYPE_TAG_NAME (t) = obconcat (&current_objfile->symbol_obstack,
1120                                         "", "", name);
1121
1122         TYPE_CODE (t) = type_code;
1123         TYPE_LENGTH (t) = sh->value;
1124         TYPE_NFIELDS (t) = nfields;
1125         TYPE_FIELDS (t) = f = ((struct field *)
1126                                TYPE_ALLOC (t,
1127                                            nfields * sizeof (struct field)));
1128
1129         if (type_code == TYPE_CODE_ENUM)
1130           {
1131             int unsigned_enum = 1;
1132
1133             /* This is a non-empty enum. */
1134
1135             /* DEC c89 has the number of enumerators in the sh.value field,
1136                not the type length, so we have to compensate for that
1137                incompatibility quirk.
1138                This might do the wrong thing for an enum with one or two
1139                enumerators and gcc -gcoff -fshort-enums, but these cases
1140                are hopefully rare enough.
1141                Alpha cc -migrate has a sh.value field of zero, we adjust
1142                that too.  */
1143             if (TYPE_LENGTH (t) == TYPE_NFIELDS (t)
1144                 || TYPE_LENGTH (t) == 0)
1145               TYPE_LENGTH (t) = TARGET_INT_BIT / HOST_CHAR_BIT;
1146             for (ext_tsym = ext_sh + external_sym_size;
1147                  ;
1148                  ext_tsym += external_sym_size)
1149               {
1150                 SYMR tsym;
1151                 struct symbol *enum_sym;
1152
1153                 (*swap_sym_in) (cur_bfd, ext_tsym, &tsym);
1154
1155                 if (tsym.st != stMember)
1156                   break;
1157
1158                 FIELD_BITPOS (*f) = tsym.value;
1159                 FIELD_TYPE (*f) = t;
1160                 FIELD_NAME (*f) = debug_info->ss + cur_fdr->issBase + tsym.iss;
1161                 FIELD_BITSIZE (*f) = 0;
1162
1163                 enum_sym = ((struct symbol *)
1164                             obstack_alloc (&current_objfile->symbol_obstack,
1165                                            sizeof (struct symbol)));
1166                 memset ((PTR) enum_sym, 0, sizeof (struct symbol));
1167                 SYMBOL_NAME (enum_sym) =
1168                   obsavestring (f->name, strlen (f->name),
1169                                 &current_objfile->symbol_obstack);
1170                 SYMBOL_CLASS (enum_sym) = LOC_CONST;
1171                 SYMBOL_TYPE (enum_sym) = t;
1172                 SYMBOL_NAMESPACE (enum_sym) = VAR_NAMESPACE;
1173                 SYMBOL_VALUE (enum_sym) = tsym.value;
1174                 if (SYMBOL_VALUE (enum_sym) < 0)
1175                   unsigned_enum = 0;
1176                 add_symbol (enum_sym, top_stack->cur_block);
1177
1178                 /* Skip the stMembers that we've handled. */
1179                 count++;
1180                 f++;
1181               }
1182             if (unsigned_enum)
1183               TYPE_FLAGS (t) |= TYPE_FLAG_UNSIGNED;
1184           }
1185         /* make this the current type */
1186         top_stack->cur_type = t;
1187         top_stack->cur_field = 0;
1188
1189         /* Do not create a symbol for alpha cc unnamed structs.  */
1190         if (sh->iss == 0)
1191           break;
1192
1193         /* gcc puts out an empty struct for an opaque struct definitions,
1194            do not create a symbol for it either.  */
1195         if (TYPE_NFIELDS (t) == 0)
1196           {
1197             TYPE_FLAGS (t) |= TYPE_FLAG_STUB;
1198             break;
1199           }
1200
1201         s = new_symbol (name);
1202         SYMBOL_NAMESPACE (s) = STRUCT_NAMESPACE;
1203         SYMBOL_CLASS (s) = LOC_TYPEDEF;
1204         SYMBOL_VALUE (s) = 0;
1205         SYMBOL_TYPE (s) = t;
1206         add_symbol (s, top_stack->cur_block);
1207         break;
1208
1209         /* End of local variables shared by struct, union, enum, and
1210            block (as yet unknown struct/union/enum) processing.  */
1211       }
1212
1213     case_stBlock_code:
1214       found_ecoff_debugging_info = 1;
1215       /* beginnning of (code) block. Value of symbol
1216          is the displacement from procedure start */
1217       push_parse_stack ();
1218
1219       /* Do not start a new block if this is the outermost block of a
1220          procedure.  This allows the LOC_BLOCK symbol to point to the
1221          block with the local variables, so funcname::var works.  */
1222       if (top_stack->blocktype == stProc
1223           || top_stack->blocktype == stStaticProc)
1224         {
1225           top_stack->blocktype = stNil;
1226           break;
1227         }
1228
1229       top_stack->blocktype = stBlock;
1230       b = new_block (top_stack->maxsyms);
1231       BLOCK_START (b) = sh->value + top_stack->procadr;
1232       BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
1233       top_stack->cur_block = b;
1234       add_block (b, top_stack->cur_st);
1235       break;
1236
1237     case stEnd:         /* end (of anything) */
1238       if (sh->sc == scInfo || SC_IS_COMMON(sh->sc))
1239         {
1240           /* Finished with type */
1241           top_stack->cur_type = 0;
1242         }
1243       else if (sh->sc == scText &&
1244                (top_stack->blocktype == stProc ||
1245                 top_stack->blocktype == stStaticProc))
1246         {
1247           /* Finished with procedure */
1248           struct blockvector *bv = BLOCKVECTOR (top_stack->cur_st);
1249           struct mips_extra_func_info *e;
1250           struct block *b;
1251           struct type *ftype = top_stack->cur_type;
1252           int i;
1253
1254           BLOCK_END (top_stack->cur_block) += sh->value;        /* size */
1255
1256           /* Make up special symbol to contain procedure specific info */
1257           s = new_symbol (MIPS_EFI_SYMBOL_NAME);
1258           SYMBOL_NAMESPACE (s) = LABEL_NAMESPACE;
1259           SYMBOL_CLASS (s) = LOC_CONST;
1260           SYMBOL_TYPE (s) = mdebug_type_void;
1261           e = ((struct mips_extra_func_info *)
1262                obstack_alloc (&current_objfile->symbol_obstack,
1263                               sizeof (struct mips_extra_func_info)));
1264           memset ((PTR) e, 0, sizeof (struct mips_extra_func_info));
1265           SYMBOL_VALUE (s) = (long) e;
1266           e->numargs = top_stack->numargs;
1267           e->pdr.framereg = -1;
1268           add_symbol (s, top_stack->cur_block);
1269
1270           /* Reallocate symbols, saving memory */
1271           b = shrink_block (top_stack->cur_block, top_stack->cur_st);
1272
1273           /* f77 emits proc-level with address bounds==[0,0],
1274              So look for such child blocks, and patch them.  */
1275           for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); i++)
1276             {
1277               struct block *b_bad = BLOCKVECTOR_BLOCK (bv, i);
1278               if (BLOCK_SUPERBLOCK (b_bad) == b
1279                   && BLOCK_START (b_bad) == top_stack->procadr
1280                   && BLOCK_END (b_bad) == top_stack->procadr)
1281                 {
1282                   BLOCK_START (b_bad) = BLOCK_START (b);
1283                   BLOCK_END (b_bad) = BLOCK_END (b);
1284                 }
1285             }
1286
1287           if (TYPE_NFIELDS (ftype) <= 0)
1288             {
1289               /* No parameter type information is recorded with the function's
1290                  type.  Set that from the type of the parameter symbols. */
1291               int nparams = top_stack->numargs;
1292               int iparams;
1293               struct symbol *sym;
1294
1295               if (nparams > 0)
1296                 {
1297                   TYPE_NFIELDS (ftype) = nparams;
1298                   TYPE_FIELDS (ftype) = (struct field *)
1299                     TYPE_ALLOC (ftype, nparams * sizeof (struct field));
1300                                                     
1301                   for (i = iparams = 0; iparams < nparams; i++)
1302                     {
1303                       sym = BLOCK_SYM (b, i);
1304                       switch (SYMBOL_CLASS (sym))
1305                         {
1306                         case LOC_ARG:
1307                         case LOC_REF_ARG:
1308                         case LOC_REGPARM:
1309                         case LOC_REGPARM_ADDR:
1310                           TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym);
1311                           iparams++;
1312                           break;
1313                         default:
1314                           break;
1315                         }
1316                     }
1317                 }
1318             }
1319         }
1320       else if (sh->sc == scText && top_stack->blocktype == stBlock)
1321         {
1322           /* End of (code) block. The value of the symbol is the
1323              displacement from the procedure`s start address of the
1324              end of this block. */
1325           BLOCK_END (top_stack->cur_block) = sh->value + top_stack->procadr;
1326           shrink_block (top_stack->cur_block, top_stack->cur_st);
1327         }
1328       else if (sh->sc == scText && top_stack->blocktype == stNil)
1329         {
1330           /* End of outermost block.  Pop parse stack and ignore.  The
1331              following stEnd of stProc will take care of the block.  */
1332           ;
1333         }
1334       else if (sh->sc == scText && top_stack->blocktype == stFile)
1335         {
1336           /* End of file.  Pop parse stack and ignore.  Higher
1337              level code deals with this.  */
1338           ;
1339         }
1340       else
1341         complain (&stEnd_complaint, sh->sc);
1342
1343       pop_parse_stack ();       /* restore previous lexical context */
1344       break;
1345
1346     case stMember:              /* member of struct or union */
1347       f = &TYPE_FIELDS (top_stack->cur_type)[top_stack->cur_field++];
1348       FIELD_NAME (*f) = name;
1349       FIELD_BITPOS (*f) = sh->value;
1350       bitsize = 0;
1351       FIELD_TYPE (*f) = parse_type (cur_fd, ax, sh->index, &bitsize, bigend, name);
1352       FIELD_BITSIZE (*f) = bitsize;
1353       break;
1354
1355     case stIndirect:            /* forward declaration on Irix5 */
1356       /* Forward declarations from Irix5 cc are handled by cross_ref,
1357          skip them.  */
1358       break;
1359
1360     case stTypedef:             /* type definition */
1361       found_ecoff_debugging_info = 1;
1362
1363       /* Typedefs for forward declarations and opaque structs from alpha cc
1364          are handled by cross_ref, skip them.  */
1365       if (sh->iss == 0)
1366         break;
1367
1368       /* Parse the type or use the pending type.  */
1369       pend = is_pending_symbol (cur_fdr, ext_sh);
1370       if (pend == (struct mdebug_pending *) NULL)
1371         {
1372           t = parse_type (cur_fd, ax, sh->index, (int *)NULL, bigend, name);
1373           add_pending (cur_fdr, ext_sh, t);
1374         }
1375       else
1376         t = pend->t;
1377
1378       /* mips cc puts out a typedef with the name of the struct for forward
1379          declarations. These should not go into the symbol table and
1380          TYPE_NAME should not be set for them.
1381          They can't be distinguished from an intentional typedef to
1382          the same name however:
1383          x.h:
1384                 struct x { int ix; int jx; };
1385                 struct xx;
1386          x.c:
1387                 typedef struct x x;
1388                 struct xx {int ixx; int jxx; };
1389          generates a cross referencing stTypedef for x and xx.
1390          The user visible effect of this is that the type of a pointer
1391          to struct foo sometimes is given as `foo *' instead of `struct foo *'.
1392          The problem is fixed with alpha cc and Irix5 cc.  */
1393
1394       /* However if the typedef cross references to an opaque aggregate, it
1395          is safe to omit it from the symbol table.  */
1396
1397       if (has_opaque_xref (cur_fdr, sh))
1398         break;
1399       s = new_symbol (name);
1400       SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
1401       SYMBOL_CLASS (s) = LOC_TYPEDEF;
1402       SYMBOL_BLOCK_VALUE (s) = top_stack->cur_block;
1403       SYMBOL_TYPE (s) = t;
1404       add_symbol (s, top_stack->cur_block);
1405
1406       /* Incomplete definitions of structs should not get a name.  */
1407       if (TYPE_NAME (SYMBOL_TYPE (s)) == NULL
1408           && (TYPE_NFIELDS (SYMBOL_TYPE (s)) != 0
1409               || (TYPE_CODE (SYMBOL_TYPE (s)) != TYPE_CODE_STRUCT
1410                   && TYPE_CODE (SYMBOL_TYPE (s)) != TYPE_CODE_UNION)))
1411         {
1412           if (TYPE_CODE (SYMBOL_TYPE (s)) == TYPE_CODE_PTR
1413               || TYPE_CODE (SYMBOL_TYPE (s)) == TYPE_CODE_FUNC)
1414             {
1415               /* If we are giving a name to a type such as "pointer to
1416                  foo" or "function returning foo", we better not set
1417                  the TYPE_NAME.  If the program contains "typedef char
1418                  *caddr_t;", we don't want all variables of type char
1419                  * to print as caddr_t.  This is not just a
1420                  consequence of GDB's type management; CC and GCC (at
1421                  least through version 2.4) both output variables of
1422                  either type char * or caddr_t with the type
1423                  refering to the stTypedef symbol for caddr_t.  If a future
1424                  compiler cleans this up it GDB is not ready for it
1425                  yet, but if it becomes ready we somehow need to
1426                  disable this check (without breaking the PCC/GCC2.4
1427                  case).
1428
1429                  Sigh.
1430
1431                  Fortunately, this check seems not to be necessary
1432                  for anything except pointers or functions.  */
1433             }
1434           else
1435             TYPE_NAME (SYMBOL_TYPE (s)) = SYMBOL_NAME (s);
1436         }
1437       break;
1438
1439     case stFile:                /* file name */
1440       push_parse_stack ();
1441       top_stack->blocktype = sh->st;
1442       break;
1443
1444       /* I`ve never seen these for C */
1445     case stRegReloc:
1446       break;                    /* register relocation */
1447     case stForward:
1448       break;                    /* forwarding address */
1449     case stConstant:
1450       break;                    /* constant */
1451     default:
1452       complain (&unknown_mdebug_symtype_complaint, sh->st);
1453       break;
1454     }
1455
1456   return count;
1457 }
1458
1459 /* Parse the type information provided in the raw AX entries for
1460    the symbol SH. Return the bitfield size in BS, in case.
1461    We must byte-swap the AX entries before we use them; BIGEND says whether
1462    they are big-endian or little-endian (from fh->fBigendian).  */
1463
1464 static struct type *
1465 parse_type (fd, ax, aux_index, bs, bigend, sym_name)
1466      int fd;
1467      union aux_ext *ax;
1468      unsigned int aux_index;
1469      int *bs;
1470      int bigend;
1471      char *sym_name;
1472 {
1473   /* Null entries in this map are treated specially */
1474   static struct type **map_bt[] =
1475   {
1476     &mdebug_type_void,                  /* btNil */
1477     &mdebug_type_adr_32,                /* btAdr */
1478     &mdebug_type_char,                  /* btChar */
1479     &mdebug_type_unsigned_char,         /* btUChar */
1480     &mdebug_type_short,                 /* btShort */
1481     &mdebug_type_unsigned_short,        /* btUShort */
1482     &mdebug_type_int_32,                /* btInt */
1483     &mdebug_type_unsigned_int_32,       /* btUInt */
1484     &mdebug_type_long_32,               /* btLong */
1485     &mdebug_type_unsigned_long_32,      /* btULong */
1486     &mdebug_type_float,                 /* btFloat */
1487     &mdebug_type_double,                /* btDouble */
1488     0,                                  /* btStruct */
1489     0,                                  /* btUnion */
1490     0,                                  /* btEnum */
1491     0,                                  /* btTypedef */
1492     0,                                  /* btRange */
1493     0,                                  /* btSet */
1494     &mdebug_type_complex,               /* btComplex */
1495     &mdebug_type_double_complex,        /* btDComplex */
1496     0,                                  /* btIndirect */
1497     &mdebug_type_fixed_dec,             /* btFixedDec */
1498     &mdebug_type_float_dec,             /* btFloatDec */
1499     &mdebug_type_string,                /* btString */
1500     0,                                  /* btBit */
1501     0,                                  /* btPicture */
1502     &mdebug_type_void,                  /* btVoid */
1503     0,                                  /* DEC C++:  Pointer to member */
1504     0,                                  /* DEC C++:  Virtual function table */
1505     0,                                  /* DEC C++:  Class (Record) */
1506     &mdebug_type_long_64,               /* btLong64  */
1507     &mdebug_type_unsigned_long_64,      /* btULong64 */
1508     &mdebug_type_long_long_64,          /* btLongLong64  */
1509     &mdebug_type_unsigned_long_long_64, /* btULongLong64 */
1510     &mdebug_type_adr_64,                /* btAdr64 */
1511     &mdebug_type_int_64,                /* btInt64  */
1512     &mdebug_type_unsigned_int_64,       /* btUInt64 */
1513   };
1514
1515   TIR t[1];
1516   struct type *tp = 0;
1517   enum type_code type_code = TYPE_CODE_UNDEF;
1518
1519   /* Handle undefined types, they have indexNil. */
1520   if (aux_index == indexNil)
1521     return mdebug_type_int;
1522
1523   /* Handle corrupt aux indices.  */
1524   if (aux_index >= (debug_info->fdr + fd)->caux)
1525     {
1526       complain (&index_complaint, sym_name);
1527       return mdebug_type_int;
1528     }
1529   ax += aux_index;
1530
1531   /* Use aux as a type information record, map its basic type.  */
1532   (*debug_swap->swap_tir_in) (bigend, &ax->a_ti, t);
1533   if (t->bt >= (sizeof (map_bt) / sizeof (*map_bt)))
1534     {
1535       complain (&basic_type_complaint, t->bt, sym_name);
1536       return mdebug_type_int;
1537     }
1538   if (map_bt[t->bt])
1539     {
1540       tp = *map_bt[t->bt];
1541     }
1542   else
1543     {
1544       tp = NULL;
1545       /* Cannot use builtin types -- build our own */
1546       switch (t->bt)
1547         {
1548         case btStruct:
1549           type_code = TYPE_CODE_STRUCT;
1550           break;
1551         case btUnion:
1552           type_code = TYPE_CODE_UNION;
1553           break;
1554         case btEnum:
1555           type_code = TYPE_CODE_ENUM;
1556           break;
1557         case btRange:
1558           type_code = TYPE_CODE_RANGE;
1559           break;
1560         case btSet:
1561           type_code = TYPE_CODE_SET;
1562           break;
1563         case btIndirect:
1564           /* alpha cc -migrate uses this for typedefs. The true type will
1565              be obtained by crossreferencing below.  */
1566           type_code = TYPE_CODE_ERROR;
1567           break;
1568         case btTypedef:
1569           /* alpha cc uses this for typedefs. The true type will be
1570              obtained by crossreferencing below.  */
1571           type_code = TYPE_CODE_ERROR;
1572           break;
1573         default:
1574           complain (&basic_type_complaint, t->bt, sym_name);
1575           return mdebug_type_int;
1576         }
1577     }
1578
1579   /* Move on to next aux */
1580   ax++;
1581
1582   if (t->fBitfield)
1583     {
1584       int width = AUX_GET_WIDTH (bigend, ax);
1585
1586       /* Inhibit core dumps with some cfront generated objects that
1587          corrupt the TIR.  */
1588       if (bs == (int *)NULL)
1589         {
1590           /* Alpha cc -migrate encodes char and unsigned char types
1591              as short and unsigned short types with a field width of 8.
1592              Enum types also have a field width which we ignore for now.  */
1593           if (t->bt == btShort && width == 8)
1594             tp = mdebug_type_char;
1595           else if (t->bt == btUShort && width == 8)
1596             tp = mdebug_type_unsigned_char;
1597           else if (t->bt == btEnum)
1598             ;
1599           else
1600             complain (&bad_fbitfield_complaint, sym_name);
1601         }
1602       else
1603         *bs = width;
1604       ax++;
1605     }
1606
1607   /* A btIndirect entry cross references to an aux entry containing
1608      the type.  */
1609   if (t->bt == btIndirect)
1610     {
1611       RNDXR rn[1];
1612       int rf;
1613       FDR *xref_fh;
1614       int xref_fd;
1615
1616       (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, rn);
1617       ax++;
1618       if (rn->rfd == 0xfff)
1619         {
1620           rf = AUX_GET_ISYM (bigend, ax);
1621           ax++;
1622         }
1623       else
1624         rf = rn->rfd;
1625
1626       if (rf == -1)
1627         {
1628           complain (&bad_indirect_xref_complaint, sym_name);
1629           return mdebug_type_int;
1630         }
1631       xref_fh = get_rfd (fd, rf);
1632       xref_fd = xref_fh - debug_info->fdr;
1633       tp = parse_type (xref_fd, debug_info->external_aux + xref_fh->iauxBase,
1634                        rn->index, (int *) NULL, xref_fh->fBigendian, sym_name);
1635     }
1636
1637   /* All these types really point to some (common) MIPS type
1638      definition, and only the type-qualifiers fully identify
1639      them.  We'll make the same effort at sharing. */
1640   if (t->bt == btStruct ||
1641       t->bt == btUnion ||
1642       t->bt == btEnum ||
1643
1644       /* btSet (I think) implies that the name is a tag name, not a typedef
1645          name.  This apparently is a MIPS extension for C sets.  */
1646       t->bt == btSet)
1647     {
1648       char *name;
1649
1650       /* Try to cross reference this type, build new type on failure.  */
1651       ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
1652       if (tp == (struct type *) NULL)
1653         tp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
1654
1655       /* DEC c89 produces cross references to qualified aggregate types,
1656          dereference them.  */
1657       while (TYPE_CODE (tp) == TYPE_CODE_PTR
1658              || TYPE_CODE (tp) == TYPE_CODE_ARRAY)
1659         tp = tp->target_type;
1660
1661       /* Make sure that TYPE_CODE(tp) has an expected type code.
1662          Any type may be returned from cross_ref if file indirect entries
1663          are corrupted.  */
1664       if (TYPE_CODE (tp) != TYPE_CODE_STRUCT
1665           && TYPE_CODE (tp) != TYPE_CODE_UNION
1666           && TYPE_CODE (tp) != TYPE_CODE_ENUM)
1667         {
1668           complain (&unexpected_type_code_complaint, sym_name);
1669         }
1670       else
1671         {
1672
1673           /* Usually, TYPE_CODE(tp) is already type_code.  The main
1674              exception is if we guessed wrong re struct/union/enum.
1675              But for struct vs. union a wrong guess is harmless, so
1676              don't complain().  */
1677           if ((TYPE_CODE (tp) == TYPE_CODE_ENUM
1678                && type_code != TYPE_CODE_ENUM)
1679               || (TYPE_CODE (tp) != TYPE_CODE_ENUM
1680                   && type_code == TYPE_CODE_ENUM))
1681             {
1682               complain (&bad_tag_guess_complaint, sym_name);
1683             }
1684
1685           if (TYPE_CODE (tp) != type_code)
1686             {
1687               TYPE_CODE (tp) = type_code;
1688             }
1689
1690           /* Do not set the tag name if it is a compiler generated tag name
1691               (.Fxx or .xxfake or empty) for unnamed struct/union/enums.  */
1692           if (name[0] == '.' || name[0] == '\0')
1693             TYPE_TAG_NAME (tp) = NULL;
1694           else if (TYPE_TAG_NAME (tp) == NULL
1695                    || !STREQ (TYPE_TAG_NAME (tp), name))
1696             TYPE_TAG_NAME (tp) = obsavestring (name, strlen (name),
1697                                                &current_objfile->type_obstack);
1698         }
1699     }
1700
1701   /* All these types really point to some (common) MIPS type
1702      definition, and only the type-qualifiers fully identify
1703      them.  We'll make the same effort at sharing.
1704      FIXME: We are not doing any guessing on range types.  */
1705   if (t->bt == btRange)
1706     {
1707       char *name;
1708
1709       /* Try to cross reference this type, build new type on failure.  */
1710       ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
1711       if (tp == (struct type *) NULL)
1712         tp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
1713
1714       /* Make sure that TYPE_CODE(tp) has an expected type code.
1715          Any type may be returned from cross_ref if file indirect entries
1716          are corrupted.  */
1717       if (TYPE_CODE (tp) != TYPE_CODE_RANGE)
1718         {
1719           complain (&unexpected_type_code_complaint, sym_name);
1720         }
1721       else
1722         {
1723           /* Usually, TYPE_CODE(tp) is already type_code.  The main
1724              exception is if we guessed wrong re struct/union/enum. */
1725           if (TYPE_CODE (tp) != type_code)
1726             {
1727               complain (&bad_tag_guess_complaint, sym_name);
1728               TYPE_CODE (tp) = type_code;
1729             }
1730           if (TYPE_NAME (tp) == NULL || !STREQ (TYPE_NAME (tp), name))
1731             TYPE_NAME (tp) = obsavestring (name, strlen (name),
1732                                            &current_objfile->type_obstack);
1733         }
1734     }
1735   if (t->bt == btTypedef)
1736     {
1737       char *name;
1738
1739       /* Try to cross reference this type, it should succeed.  */
1740       ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
1741       if (tp == (struct type *) NULL)
1742         {
1743           complain (&unable_to_cross_ref_complaint, sym_name);
1744           tp = mdebug_type_int;
1745         }
1746     }
1747
1748   /* Deal with range types */
1749   if (t->bt == btRange)
1750     {
1751       TYPE_NFIELDS (tp) = 2;
1752       TYPE_FIELDS (tp) = ((struct field *)
1753                           TYPE_ALLOC (tp, 2 * sizeof (struct field)));
1754       TYPE_FIELD_NAME (tp, 0) = obsavestring ("Low", strlen ("Low"),
1755                                               &current_objfile->type_obstack);
1756       TYPE_FIELD_BITPOS (tp, 0) = AUX_GET_DNLOW (bigend, ax);
1757       ax++;
1758       TYPE_FIELD_NAME (tp, 1) = obsavestring ("High", strlen ("High"),
1759                                               &current_objfile->type_obstack);
1760       TYPE_FIELD_BITPOS (tp, 1) = AUX_GET_DNHIGH (bigend, ax);
1761       ax++;
1762     }
1763
1764   /* Parse all the type qualifiers now. If there are more
1765      than 6 the game will continue in the next aux */
1766
1767   while (1)
1768     {
1769 #define PARSE_TQ(tq) \
1770       if (t->tq != tqNil) \
1771         ax += upgrade_type(fd, &tp, t->tq, ax, bigend, sym_name); \
1772       else \
1773         break;
1774
1775       PARSE_TQ (tq0);
1776       PARSE_TQ (tq1);
1777       PARSE_TQ (tq2);
1778       PARSE_TQ (tq3);
1779       PARSE_TQ (tq4);
1780       PARSE_TQ (tq5);
1781 #undef  PARSE_TQ
1782
1783       /* mips cc 2.x and gcc never put out continued aux entries.  */
1784       if (!t->continued)
1785         break;
1786
1787       (*debug_swap->swap_tir_in) (bigend, &ax->a_ti, t);
1788       ax++;
1789     }
1790
1791   /* Complain for illegal continuations due to corrupt aux entries.  */
1792   if (t->continued)
1793     complain (&bad_continued_complaint, sym_name);
1794  
1795   return tp;
1796 }
1797
1798 /* Make up a complex type from a basic one.  Type is passed by
1799    reference in TPP and side-effected as necessary. The type
1800    qualifier TQ says how to handle the aux symbols at AX for
1801    the symbol SX we are currently analyzing.  BIGEND says whether
1802    aux symbols are big-endian or little-endian.
1803    Returns the number of aux symbols we parsed. */
1804
1805 static int
1806 upgrade_type (fd, tpp, tq, ax, bigend, sym_name)
1807      int fd;
1808      struct type **tpp;
1809      int tq;
1810      union aux_ext *ax;
1811      int bigend;
1812      char *sym_name;
1813 {
1814   int off;
1815   struct type *t;
1816
1817   /* Used in array processing */
1818   int rf, id;
1819   FDR *fh;
1820   struct type *range;
1821   struct type *indx;
1822   int lower, upper;
1823   RNDXR rndx;
1824
1825   switch (tq)
1826     {
1827     case tqPtr:
1828       t = lookup_pointer_type (*tpp);
1829       *tpp = t;
1830       return 0;
1831
1832     case tqProc:
1833       t = lookup_function_type (*tpp);
1834       *tpp = t;
1835       return 0;
1836
1837     case tqArray:
1838       off = 0;
1839
1840       /* Determine and record the domain type (type of index) */
1841       (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, &rndx);
1842       id = rndx.index;
1843       rf = rndx.rfd;
1844       if (rf == 0xfff)
1845         {
1846           ax++;
1847           rf = AUX_GET_ISYM (bigend, ax);
1848           off++;
1849         }
1850       fh = get_rfd (fd, rf);
1851
1852       indx = parse_type (fh - debug_info->fdr,
1853                          debug_info->external_aux + fh->iauxBase,
1854                          id, (int *) NULL, bigend, sym_name);
1855
1856       /* The bounds type should be an integer type, but might be anything
1857          else due to corrupt aux entries.  */
1858       if (TYPE_CODE (indx) != TYPE_CODE_INT)
1859         {
1860           complain (&array_index_type_complaint, sym_name);
1861           indx = mdebug_type_int;
1862         }
1863
1864       /* Get the bounds, and create the array type.  */
1865       ax++;
1866       lower = AUX_GET_DNLOW (bigend, ax);
1867       ax++;
1868       upper = AUX_GET_DNHIGH (bigend, ax);
1869       ax++;
1870       rf = AUX_GET_WIDTH (bigend, ax);  /* bit size of array element */
1871
1872       range = create_range_type ((struct type *) NULL, indx,
1873                                  lower, upper);
1874
1875       t = create_array_type ((struct type *) NULL, *tpp, range);
1876
1877       /* We used to fill in the supplied array element bitsize
1878          here if the TYPE_LENGTH of the target type was zero.
1879          This happens for a `pointer to an array of anonymous structs',
1880          but in this case the array element bitsize is also zero,
1881          so nothing is gained.
1882          And we used to check the TYPE_LENGTH of the target type against
1883          the supplied array element bitsize.
1884          gcc causes a mismatch for `pointer to array of object',
1885          since the sdb directives it uses do not have a way of
1886          specifying the bitsize, but it does no harm (the
1887          TYPE_LENGTH should be correct) and we should be able to
1888          ignore the erroneous bitsize from the auxiliary entry safely.
1889          dbx seems to ignore it too.  */
1890
1891       /* TYPE_FLAG_TARGET_STUB now takes care of the zero TYPE_LENGTH
1892          problem.  */
1893       if (TYPE_LENGTH (*tpp) == 0)
1894         {
1895           TYPE_FLAGS (t) |= TYPE_FLAG_TARGET_STUB;
1896         }
1897
1898       *tpp = t;
1899       return 4 + off;
1900
1901     case tqVol:
1902       /* Volatile -- currently ignored */
1903       return 0;
1904
1905     case tqConst:
1906       /* Const -- currently ignored */
1907       return 0;
1908
1909     default:
1910       complain (&unknown_type_qual_complaint, tq);
1911       return 0;
1912     }
1913 }
1914
1915
1916 /* Parse a procedure descriptor record PR.  Note that the procedure is
1917    parsed _after_ the local symbols, now we just insert the extra
1918    information we need into a MIPS_EFI_SYMBOL_NAME symbol that has
1919    already been placed in the procedure's main block.  Note also that
1920    images that have been partially stripped (ld -x) have been deprived
1921    of local symbols, and we have to cope with them here.  FIRST_OFF is
1922    the offset of the first procedure for this FDR; we adjust the
1923    address by this amount, but I don't know why.  SEARCH_SYMTAB is the symtab
1924    to look for the function which contains the MIPS_EFI_SYMBOL_NAME symbol
1925    in question, or NULL to use top_stack->cur_block.  */
1926
1927 static void parse_procedure PARAMS ((PDR *, struct symtab *,
1928                                      struct partial_symtab *));
1929
1930 static void
1931 parse_procedure (pr, search_symtab, pst)
1932      PDR *pr;
1933      struct symtab *search_symtab;
1934      struct partial_symtab *pst;
1935 {
1936   struct symbol *s, *i;
1937   struct block *b;
1938   struct mips_extra_func_info *e;
1939   char *sh_name;
1940
1941   /* Simple rule to find files linked "-x" */
1942   if (cur_fdr->rss == -1)
1943     {
1944       if (pr->isym == -1)
1945         {
1946           /* Static procedure at address pr->adr.  Sigh. */
1947           /* FIXME-32x64.  assuming pr->adr fits in long.  */
1948           complain (&pdr_static_symbol_complaint, (unsigned long) pr->adr);
1949           return;
1950         }
1951       else
1952         {
1953           /* external */
1954           EXTR she;
1955           
1956           (*debug_swap->swap_ext_in) (cur_bfd,
1957                                       ((char *) debug_info->external_ext
1958                                        + (pr->isym
1959                                           * debug_swap->external_ext_size)),
1960                                       &she);
1961           sh_name = debug_info->ssext + she.asym.iss;
1962         }
1963     }
1964   else
1965     {
1966       /* Full symbols */
1967       SYMR sh;
1968
1969       (*debug_swap->swap_sym_in) (cur_bfd,
1970                                   ((char *) debug_info->external_sym
1971                                    + ((cur_fdr->isymBase + pr->isym)
1972                                       * debug_swap->external_sym_size)),
1973                                   &sh);
1974       sh_name = debug_info->ss + cur_fdr->issBase + sh.iss;
1975     }
1976
1977   if (search_symtab != NULL)
1978     {
1979 #if 0
1980       /* This loses both in the case mentioned (want a static, find a global),
1981          but also if we are looking up a non-mangled name which happens to
1982          match the name of a mangled function.  */
1983       /* We have to save the cur_fdr across the call to lookup_symbol.
1984          If the pdr is for a static function and if a global function with
1985          the same name exists, lookup_symbol will eventually read in the symtab
1986          for the global function and clobber cur_fdr.  */
1987       FDR *save_cur_fdr = cur_fdr;
1988       s = lookup_symbol (sh_name, NULL, VAR_NAMESPACE, 0, NULL);
1989       cur_fdr = save_cur_fdr;
1990 #else
1991       s = mylookup_symbol
1992         (sh_name,
1993          BLOCKVECTOR_BLOCK (BLOCKVECTOR (search_symtab), STATIC_BLOCK),
1994          VAR_NAMESPACE,
1995          LOC_BLOCK);
1996 #endif
1997     }
1998   else
1999     s = mylookup_symbol (sh_name, top_stack->cur_block,
2000                          VAR_NAMESPACE, LOC_BLOCK);
2001
2002   if (s != 0)
2003     {
2004       b = SYMBOL_BLOCK_VALUE (s);
2005     }
2006   else
2007     {
2008       complain (&pdr_for_nonsymbol_complaint, sh_name);
2009 #if 1
2010       return;
2011 #else
2012 /* FIXME -- delete.  We can't do symbol allocation now; it's all done.  */
2013       s = new_symbol (sh_name);
2014       SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
2015       SYMBOL_CLASS (s) = LOC_BLOCK;
2016       /* Donno its type, hope int is ok */
2017       SYMBOL_TYPE (s) = lookup_function_type (mdebug_type_int);
2018       add_symbol (s, top_stack->cur_block);
2019       /* Wont have symbols for this one */
2020       b = new_block (2);
2021       SYMBOL_BLOCK_VALUE (s) = b;
2022       BLOCK_FUNCTION (b) = s;
2023       BLOCK_START (b) = pr->adr;
2024       /* BOUND used to be the end of procedure's text, but the
2025          argument is no longer passed in.  */
2026       BLOCK_END (b) = bound;
2027       BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
2028       add_block (b, top_stack->cur_st);
2029 #endif
2030     }
2031
2032   i = mylookup_symbol (MIPS_EFI_SYMBOL_NAME, b, LABEL_NAMESPACE, LOC_CONST);
2033
2034   if (i)
2035     {
2036       e = (struct mips_extra_func_info *) SYMBOL_VALUE (i);
2037       e->pdr = *pr;
2038       e->pdr.isym = (long) s;
2039
2040       /* GDB expects the absolute function start address for the
2041          procedure descriptor in e->pdr.adr.
2042          As the address in the procedure descriptor is usually relative,
2043          we would have to relocate e->pdr.adr with cur_fdr->adr and
2044          ANOFFSET (pst->section_offsets, SECT_OFF_TEXT).
2045          Unfortunately cur_fdr->adr and e->pdr.adr are both absolute
2046          in shared libraries on some systems, and on other systems
2047          e->pdr.adr is sometimes offset by a bogus value.
2048          To work around these problems, we replace e->pdr.adr with
2049          the start address of the function.  */
2050       e->pdr.adr = BLOCK_START (b);
2051
2052       /* Correct incorrect setjmp procedure descriptor from the library
2053          to make backtrace through setjmp work.  */
2054       if (e->pdr.pcreg == 0 && STREQ (sh_name, "setjmp"))
2055         {
2056           complain (&bad_setjmp_pdr_complaint, 0);
2057           e->pdr.pcreg = RA_REGNUM;
2058           e->pdr.regmask = 0x80000000;
2059           e->pdr.regoffset = -4;
2060         }
2061     }
2062
2063   /* It would be reasonable that functions that have been compiled
2064      without debugging info have a btNil type for their return value,
2065      and functions that are void and are compiled with debugging info
2066      have btVoid.
2067      gcc and DEC f77 put out btNil types for both cases, so btNil is mapped
2068      to TYPE_CODE_VOID in parse_type to get the `compiled with debugging info'
2069      case right.
2070      The glevel field in cur_fdr could be used to determine the presence
2071      of debugging info, but GCC doesn't always pass the -g switch settings
2072      to the assembler and GAS doesn't set the glevel field from the -g switch
2073      settings.
2074      To work around these problems, the return value type of a TYPE_CODE_VOID
2075      function is adjusted accordingly if no debugging info was found in the
2076      compilation unit.  */
2077  
2078   if (processing_gcc_compilation == 0
2079       && found_ecoff_debugging_info == 0
2080       && TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (s))) == TYPE_CODE_VOID)
2081     SYMBOL_TYPE (s) = nodebug_func_symbol_type;
2082 }
2083
2084 /* Relocate the extra function info pointed to by the symbol table.  */
2085
2086 void
2087 ecoff_relocate_efi (sym, delta)
2088      struct symbol *sym;
2089      CORE_ADDR delta;
2090 {
2091   struct mips_extra_func_info *e;
2092
2093   e = (struct mips_extra_func_info *) SYMBOL_VALUE (sym);
2094   
2095   e->pdr.adr += delta;
2096 }
2097
2098 /* Parse the external symbol ES. Just call parse_symbol() after
2099    making sure we know where the aux are for it.
2100    BIGEND says whether aux entries are big-endian or little-endian.
2101
2102    This routine clobbers top_stack->cur_block and ->cur_st. */
2103
2104 static void parse_external PARAMS ((EXTR *, int, struct section_offsets *));
2105
2106 static void
2107 parse_external (es, bigend, section_offsets)
2108      EXTR *es;
2109      int bigend;
2110      struct section_offsets *section_offsets;
2111 {
2112   union aux_ext *ax;
2113
2114   if (es->ifd != ifdNil)
2115     {
2116       cur_fd = es->ifd;
2117       cur_fdr = debug_info->fdr + cur_fd;
2118       ax = debug_info->external_aux + cur_fdr->iauxBase;
2119     }
2120   else
2121     {
2122       cur_fdr = debug_info->fdr;
2123       ax = 0;
2124     }
2125
2126   /* Reading .o files */
2127   if (SC_IS_UNDEF(es->asym.sc) || es->asym.sc == scNil)
2128     {
2129       char *what;
2130       switch (es->asym.st)
2131         {
2132         case stNil:
2133           /* These are generated for static symbols in .o files,
2134              ignore them.  */
2135           return;
2136         case stStaticProc:
2137         case stProc:
2138           what = "procedure";
2139           n_undef_procs++;
2140           break;
2141         case stGlobal:
2142           what = "variable";
2143           n_undef_vars++;
2144           break;
2145         case stLabel:
2146           what = "label";
2147           n_undef_labels++;
2148           break;
2149         default:
2150           what = "symbol";
2151           break;
2152         }
2153       n_undef_symbols++;
2154       /* FIXME:  Turn this into a complaint? */
2155       if (info_verbose)
2156         printf_filtered ("Warning: %s `%s' is undefined (in %s)\n",
2157                          what, debug_info->ssext + es->asym.iss,
2158                          fdr_name (cur_fdr));
2159       return;
2160     }
2161
2162   switch (es->asym.st)
2163     {
2164     case stProc:
2165     case stStaticProc:
2166       /* There is no need to parse the external procedure symbols.
2167          If they are from objects compiled without -g, their index will
2168          be indexNil, and the symbol definition from the minimal symbol
2169          is preferrable (yielding a function returning int instead of int).
2170          If the index points to a local procedure symbol, the local
2171          symbol already provides the correct type.
2172          Note that the index of the external procedure symbol points
2173          to the local procedure symbol in the local symbol table, and
2174          _not_ to the auxiliary symbol info.  */
2175       break;
2176     case stGlobal:
2177     case stLabel:
2178       /* Global common symbols are resolved by the runtime loader,
2179          ignore them.  */
2180       if (SC_IS_COMMON(es->asym.sc))
2181         break;
2182
2183       /* Note that the case of a symbol with indexNil must be handled
2184          anyways by parse_symbol().  */
2185       parse_symbol (&es->asym, ax, (char *) NULL, bigend, section_offsets);
2186       break;
2187     default:
2188       break;
2189     }
2190 }
2191
2192 /* Parse the line number info for file descriptor FH into
2193    GDB's linetable LT.  MIPS' encoding requires a little bit
2194    of magic to get things out.  Note also that MIPS' line
2195    numbers can go back and forth, apparently we can live
2196    with that and do not need to reorder our linetables */
2197
2198 static void parse_lines PARAMS ((FDR *, PDR *, struct linetable *, int,
2199                                  struct partial_symtab *, CORE_ADDR));
2200
2201 static void
2202 parse_lines (fh, pr, lt, maxlines, pst, lowest_pdr_addr)
2203      FDR *fh;
2204      PDR *pr;
2205      struct linetable *lt;
2206      int maxlines;
2207      struct partial_symtab *pst;
2208      CORE_ADDR lowest_pdr_addr;
2209 {
2210   unsigned char *base;
2211   int j, k;
2212   int delta, count, lineno = 0;
2213
2214   if (fh->cbLine == 0)
2215     return;
2216
2217   /* Scan by procedure descriptors */
2218   k = 0;
2219   for (j = 0; j < fh->cpd; j++, pr++)
2220     {
2221       CORE_ADDR l;
2222       CORE_ADDR adr;
2223       unsigned char *halt;
2224
2225       /* No code for this one */
2226       if (pr->iline == ilineNil ||
2227           pr->lnLow == -1 || pr->lnHigh == -1)
2228         continue;
2229
2230       /* Determine start and end address of compressed line bytes for
2231          this procedure.  */
2232       base = debug_info->line + fh->cbLineOffset;
2233       if (j != (fh->cpd - 1))
2234         halt = base + pr[1].cbLineOffset;
2235       else
2236         halt = base + fh->cbLine;
2237       base += pr->cbLineOffset;
2238
2239       adr = pst->textlow + pr->adr - lowest_pdr_addr;
2240
2241       l = adr >> 2;             /* in words */
2242       for (lineno = pr->lnLow; base < halt; )
2243         {
2244           count = *base & 0x0f;
2245           delta = *base++ >> 4;
2246           if (delta >= 8)
2247             delta -= 16;
2248           if (delta == -8)
2249             {
2250               delta = (base[0] << 8) | base[1];
2251               if (delta >= 0x8000)
2252                 delta -= 0x10000;
2253               base += 2;
2254             }
2255           lineno += delta;      /* first delta is 0 */
2256
2257           /* Complain if the line table overflows. Could happen
2258              with corrupt binaries.  */
2259           if (lt->nitems >= maxlines)
2260             {
2261               complain (&bad_linetable_guess_complaint, fdr_name (fh));
2262               break;
2263             }
2264           k = add_line (lt, lineno, l, k);
2265           l += count + 1;
2266         }
2267     }
2268 }
2269 \f
2270 /* Master parsing procedure for first-pass reading of file symbols
2271    into a partial_symtab.  */
2272
2273 static void
2274 parse_partial_symbols (objfile, section_offsets)
2275      struct objfile *objfile;
2276      struct section_offsets *section_offsets;
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, section_offsets);
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 (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 (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 (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 (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 (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 (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 (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 (section_offsets, SECT_OFF_TEXT);
2565         }
2566       else
2567         textlow = 0;
2568       pst = start_psymtab_common (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 (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 (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 (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,secoff,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 (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 (section_offsets, SECT_OFF_DATA);
2829                   break;
2830                 case scBss:
2831                 case scSBss:
2832                   sh.value += ANOFFSET (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 (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 (section_offsets, SECT_OFF_DATA);
3037                   break;
3038                 case scBss:
3039                 case scSBss:
3040                   svalue += ANOFFSET (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, section_offsets)
4132      char *name;
4133      struct objfile *objfile;
4134      struct section_offsets *section_offsets;
4135 {
4136   struct partial_symtab *psymtab;
4137
4138   psymtab = allocate_psymtab (name, objfile);
4139   psymtab->section_offsets = section_offsets;
4140
4141   /* Keep a backpointer to the file's symbols */
4142
4143   psymtab->read_symtab_private = ((char *)
4144                                   obstack_alloc (&objfile->psymbol_obstack,
4145                                                  sizeof (struct symloc)));
4146   memset ((PTR) psymtab->read_symtab_private, 0, sizeof (struct symloc));
4147   CUR_BFD (psymtab) = cur_bfd;
4148   DEBUG_SWAP (psymtab) = debug_swap;
4149   DEBUG_INFO (psymtab) = debug_info;
4150   PENDING_LIST (psymtab) = pending_list;
4151
4152   /* The way to turn this into a symtab is to call... */
4153   psymtab->read_symtab = mdebug_psymtab_to_symtab;
4154   return (psymtab);
4155 }
4156
4157
4158 /* Allocate a linetable array of the given SIZE.  Since the struct
4159    already includes one item, we subtract one when calculating the
4160    proper size to allocate.  */
4161
4162 static struct linetable *
4163 new_linetable (size)
4164      int size;
4165 {
4166   struct linetable *l;
4167
4168   size = (size - 1) * sizeof (l->item) + sizeof (struct linetable);
4169   l = (struct linetable *) xmalloc (size);
4170   l->nitems = 0;
4171   return l;
4172 }
4173
4174 /* Oops, too big. Shrink it.  This was important with the 2.4 linetables,
4175    I am not so sure about the 3.4 ones.
4176
4177    Since the struct linetable already includes one item, we subtract one when
4178    calculating the proper size to allocate.  */
4179
4180 static struct linetable *
4181 shrink_linetable (lt)
4182      struct linetable *lt;
4183 {
4184
4185   return (struct linetable *) xrealloc ((PTR) lt,
4186                                         (sizeof (struct linetable)
4187                                          + ((lt->nitems - 1)
4188                                             * sizeof (lt->item))));
4189 }
4190
4191 /* Allocate and zero a new blockvector of NBLOCKS blocks. */
4192
4193 static struct blockvector *
4194 new_bvect (nblocks)
4195      int nblocks;
4196 {
4197   struct blockvector *bv;
4198   int size;
4199
4200   size = sizeof (struct blockvector) + nblocks * sizeof (struct block *);
4201   bv = (struct blockvector *) xzalloc (size);
4202
4203   BLOCKVECTOR_NBLOCKS (bv) = nblocks;
4204
4205   return bv;
4206 }
4207
4208 /* Allocate and zero a new block of MAXSYMS symbols */
4209
4210 static struct block *
4211 new_block (maxsyms)
4212      int maxsyms;
4213 {
4214   int size = sizeof (struct block) + (maxsyms - 1) * sizeof (struct symbol *);
4215
4216   return (struct block *) xzalloc (size);
4217 }
4218
4219 /* Ooops, too big. Shrink block B in symtab S to its minimal size.
4220    Shrink_block can also be used by add_symbol to grow a block.  */
4221
4222 static struct block *
4223 shrink_block (b, s)
4224      struct block *b;
4225      struct symtab *s;
4226 {
4227   struct block *new;
4228   struct blockvector *bv = BLOCKVECTOR (s);
4229   int i;
4230
4231   /* Just reallocate it and fix references to the old one */
4232
4233   new = (struct block *) xrealloc ((PTR) b,
4234                                    (sizeof (struct block)
4235                                     + ((BLOCK_NSYMS (b) - 1)
4236                                        * sizeof (struct symbol *))));
4237
4238   /* Should chase pointers to old one.  Fortunately, that`s just
4239            the block`s function and inferior blocks */
4240   if (BLOCK_FUNCTION (new) && SYMBOL_BLOCK_VALUE (BLOCK_FUNCTION (new)) == b)
4241     SYMBOL_BLOCK_VALUE (BLOCK_FUNCTION (new)) = new;
4242   for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); i++)
4243     if (BLOCKVECTOR_BLOCK (bv, i) == b)
4244       BLOCKVECTOR_BLOCK (bv, i) = new;
4245     else if (BLOCK_SUPERBLOCK (BLOCKVECTOR_BLOCK (bv, i)) == b)
4246       BLOCK_SUPERBLOCK (BLOCKVECTOR_BLOCK (bv, i)) = new;
4247   return new;
4248 }
4249
4250 /* Create a new symbol with printname NAME */
4251
4252 static struct symbol *
4253 new_symbol (name)
4254      char *name;
4255 {
4256   struct symbol *s = ((struct symbol *)
4257                       obstack_alloc (&current_objfile->symbol_obstack,
4258                                      sizeof (struct symbol)));
4259
4260   memset ((PTR) s, 0, sizeof (*s));
4261   SYMBOL_NAME (s) = obsavestring (name, strlen (name),
4262                                   &current_objfile->symbol_obstack);
4263   SYMBOL_LANGUAGE (s) = psymtab_language;
4264   SYMBOL_INIT_DEMANGLED_NAME (s, &current_objfile->symbol_obstack);
4265   return s;
4266 }
4267
4268 /* Create a new type with printname NAME */
4269
4270 static struct type *
4271 new_type (name)
4272      char *name;
4273 {
4274   struct type *t;
4275
4276   t = alloc_type (current_objfile);
4277   TYPE_NAME (t) = name;
4278   TYPE_CPLUS_SPECIFIC (t) = (struct cplus_struct_type *) &cplus_struct_default;
4279   return t;
4280 }
4281 \f
4282 /* Read ECOFF debugging information from a BFD section.  This is
4283    called from elfread.c.  It parses the section into a
4284    ecoff_debug_info struct, and then lets the rest of the file handle
4285    it as normal.  */
4286
4287 void
4288 elfmdebug_build_psymtabs (objfile, swap, sec, section_offsets)
4289      struct objfile *objfile;
4290      const struct ecoff_debug_swap *swap;
4291      asection *sec;
4292      struct section_offsets *section_offsets;
4293 {
4294   bfd *abfd = objfile->obfd;
4295   struct ecoff_debug_info *info;
4296
4297   info = ((struct ecoff_debug_info *)
4298           obstack_alloc (&objfile->psymbol_obstack,
4299                          sizeof (struct ecoff_debug_info)));
4300
4301   if (!(*swap->read_debug_info) (abfd, sec, info))
4302     error ("Error reading ECOFF debugging information: %s",
4303            bfd_errmsg (bfd_get_error ()));
4304
4305   mdebug_build_psymtabs (objfile, swap, info, section_offsets);
4306 }
4307 \f
4308
4309 /* Things used for calling functions in the inferior.
4310    These functions are exported to our companion
4311    mips-tdep.c file and are here because they play
4312    with the symbol-table explicitly. */
4313
4314 /* Sigtramp: make sure we have all the necessary information
4315    about the signal trampoline code. Since the official code
4316    from MIPS does not do so, we make up that information ourselves.
4317    If they fix the library (unlikely) this code will neutralize itself. */
4318
4319 /* FIXME: This function is called only by mips-tdep.c.  It needs to be
4320    here because it calls functions defined in this file, but perhaps
4321    this could be handled in a better way.  Only compile it in when
4322    tm-mips.h is included. */
4323
4324 #ifdef TM_MIPS_H
4325
4326 void
4327 fixup_sigtramp ()
4328 {
4329   struct symbol *s;
4330   struct symtab *st;
4331   struct block *b, *b0 = NULL;
4332
4333   sigtramp_address = -1;
4334
4335   /* We have to handle the following cases here:
4336      a) The Mips library has a sigtramp label within sigvec.
4337      b) Irix has a _sigtramp which we want to use, but it also has sigvec.  */
4338   s = lookup_symbol ("sigvec", 0, VAR_NAMESPACE, 0, NULL);
4339   if (s != 0)
4340     {
4341       b0 = SYMBOL_BLOCK_VALUE (s);
4342       s = lookup_symbol ("sigtramp", b0, VAR_NAMESPACE, 0, NULL);
4343     }
4344   if (s == 0)
4345     {
4346       /* No sigvec or no sigtramp inside sigvec, try _sigtramp.  */
4347       s = lookup_symbol ("_sigtramp", 0, VAR_NAMESPACE, 0, NULL);
4348     }
4349
4350   /* But maybe this program uses its own version of sigvec */
4351   if (s == 0)
4352     return;
4353
4354   /* Did we or MIPSco fix the library ? */
4355   if (SYMBOL_CLASS (s) == LOC_BLOCK)
4356     {
4357       sigtramp_address = BLOCK_START (SYMBOL_BLOCK_VALUE (s));
4358       sigtramp_end = BLOCK_END (SYMBOL_BLOCK_VALUE (s));
4359       return;
4360     }
4361
4362   sigtramp_address = SYMBOL_VALUE (s);
4363   sigtramp_end = sigtramp_address + 0x88;       /* black magic */
4364
4365   /* But what symtab does it live in ? */
4366   st = find_pc_symtab (SYMBOL_VALUE (s));
4367
4368   /*
4369    * Ok, there goes the fix: turn it into a procedure, with all the
4370    * needed info.  Note we make it a nested procedure of sigvec,
4371    * which is the way the (assembly) code is actually written.
4372    */
4373   SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
4374   SYMBOL_CLASS (s) = LOC_BLOCK;
4375   SYMBOL_TYPE (s) = init_type (TYPE_CODE_FUNC, 4, 0, (char *) NULL,
4376                                st->objfile);
4377   TYPE_TARGET_TYPE (SYMBOL_TYPE (s)) = mdebug_type_void;
4378
4379   /* Need a block to allocate MIPS_EFI_SYMBOL_NAME in */
4380   b = new_block (1);
4381   SYMBOL_BLOCK_VALUE (s) = b;
4382   BLOCK_START (b) = sigtramp_address;
4383   BLOCK_END (b) = sigtramp_end;
4384   BLOCK_FUNCTION (b) = s;
4385   BLOCK_SUPERBLOCK (b) = BLOCK_SUPERBLOCK (b0);
4386   add_block (b, st);
4387   sort_blocks (st);
4388
4389   /* Make a MIPS_EFI_SYMBOL_NAME entry for it */
4390   {
4391     struct mips_extra_func_info *e =
4392       ((struct mips_extra_func_info *)
4393        xzalloc (sizeof (struct mips_extra_func_info)));
4394
4395     e->numargs = 0;             /* the kernel thinks otherwise */
4396     e->pdr.frameoffset = 32;
4397     e->pdr.framereg = SP_REGNUM;
4398     /* Note that setting pcreg is no longer strictly necessary as
4399        mips_frame_saved_pc is now aware of signal handler frames.  */
4400     e->pdr.pcreg = PC_REGNUM;
4401     e->pdr.regmask = -2;
4402     /* Offset to saved r31, in the sigtramp case the saved registers
4403        are above the frame in the sigcontext.
4404        We have 4 alignment bytes, 12 bytes for onstack, mask and pc,
4405        32 * 4 bytes for the general registers, 12 bytes for mdhi, mdlo, ownedfp
4406        and 32 * 4 bytes for the floating point registers.  */
4407     e->pdr.regoffset = 4 + 12 + 31 * 4;
4408     e->pdr.fregmask = -1;
4409     /* Offset to saved f30 (first saved *double* register).  */
4410     e->pdr.fregoffset = 4 + 12 + 32 * 4 + 12 + 30 * 4;
4411     e->pdr.isym = (long) s;
4412     e->pdr.adr = sigtramp_address;
4413
4414     current_objfile = st->objfile;      /* Keep new_symbol happy */
4415     s = new_symbol (MIPS_EFI_SYMBOL_NAME);
4416     SYMBOL_VALUE (s) = (long) e;
4417     SYMBOL_NAMESPACE (s) = LABEL_NAMESPACE;
4418     SYMBOL_CLASS (s) = LOC_CONST;
4419     SYMBOL_TYPE (s) = mdebug_type_void;
4420     current_objfile = NULL;
4421   }
4422
4423   BLOCK_SYM (b, BLOCK_NSYMS (b)++) = s;
4424 }
4425
4426 #endif  /* TM_MIPS_H */
4427
4428 void
4429 _initialize_mdebugread ()
4430 {
4431   mdebug_type_void =
4432     init_type (TYPE_CODE_VOID, 1,
4433                0,
4434                "void", (struct objfile *) NULL);
4435   mdebug_type_char =
4436     init_type (TYPE_CODE_INT, 1,
4437                0,
4438                "char", (struct objfile *) NULL);
4439   mdebug_type_unsigned_char =
4440     init_type (TYPE_CODE_INT, 1,
4441                TYPE_FLAG_UNSIGNED,
4442                "unsigned char", (struct objfile *) NULL);
4443   mdebug_type_short =
4444     init_type (TYPE_CODE_INT, 2,
4445                0,
4446                "short", (struct objfile *) NULL);
4447   mdebug_type_unsigned_short =
4448     init_type (TYPE_CODE_INT, 2,
4449                TYPE_FLAG_UNSIGNED,
4450                "unsigned short", (struct objfile *) NULL);
4451   mdebug_type_int_32 =
4452     init_type (TYPE_CODE_INT, 4,
4453                0,
4454                "int", (struct objfile *) NULL);
4455   mdebug_type_unsigned_int_32 =
4456     init_type (TYPE_CODE_INT, 4,
4457                TYPE_FLAG_UNSIGNED,
4458                "unsigned int", (struct objfile *) NULL);
4459   mdebug_type_int_64 =
4460     init_type (TYPE_CODE_INT, 8,
4461                0,
4462                "int", (struct objfile *) NULL);
4463   mdebug_type_unsigned_int_64 =
4464     init_type (TYPE_CODE_INT, 8,
4465                TYPE_FLAG_UNSIGNED,
4466                "unsigned int", (struct objfile *) NULL);
4467   mdebug_type_long_32 =
4468     init_type (TYPE_CODE_INT, 4,
4469                0,
4470                "long", (struct objfile *) NULL);
4471   mdebug_type_unsigned_long_32 =
4472     init_type (TYPE_CODE_INT, 4,
4473                TYPE_FLAG_UNSIGNED,
4474                "unsigned long", (struct objfile *) NULL);
4475   mdebug_type_long_64 =
4476     init_type (TYPE_CODE_INT, 8,
4477                0,
4478                "long", (struct objfile *) NULL);
4479   mdebug_type_unsigned_long_64 =
4480     init_type (TYPE_CODE_INT, 8,
4481                TYPE_FLAG_UNSIGNED,
4482                "unsigned long", (struct objfile *) NULL);
4483   mdebug_type_long_long_64 =
4484     init_type (TYPE_CODE_INT, 8,
4485                0,
4486                "long long", (struct objfile *) NULL);
4487   mdebug_type_unsigned_long_long_64 = 
4488     init_type (TYPE_CODE_INT, 8,
4489                TYPE_FLAG_UNSIGNED,
4490                "unsigned long long", (struct objfile *) NULL);
4491   mdebug_type_adr_32 =
4492     init_type (TYPE_CODE_PTR, 4,
4493                TYPE_FLAG_UNSIGNED,
4494                "adr_32", (struct objfile *) NULL);
4495   TYPE_TARGET_TYPE (mdebug_type_adr_32) = mdebug_type_void;
4496   mdebug_type_adr_64 =
4497     init_type (TYPE_CODE_PTR, 8,
4498                TYPE_FLAG_UNSIGNED,
4499                "adr_64", (struct objfile *) NULL);
4500   TYPE_TARGET_TYPE (mdebug_type_adr_64) = mdebug_type_void;
4501   mdebug_type_float =
4502     init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
4503                0,
4504                "float", (struct objfile *) NULL);
4505   mdebug_type_double =
4506     init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
4507                0,
4508                "double", (struct objfile *) NULL);
4509   mdebug_type_complex =
4510     init_type (TYPE_CODE_COMPLEX, 2 * TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
4511                0,
4512                "complex", (struct objfile *) NULL);
4513   TYPE_TARGET_TYPE (mdebug_type_complex) = mdebug_type_float;
4514   mdebug_type_double_complex =
4515     init_type (TYPE_CODE_COMPLEX, 2 * TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
4516                0,
4517                "double complex", (struct objfile *) NULL);
4518   TYPE_TARGET_TYPE (mdebug_type_double_complex) = mdebug_type_double;
4519
4520   /* Is a "string" the way btString means it the same as TYPE_CODE_STRING?
4521      FIXME.  */
4522   mdebug_type_string =
4523     init_type (TYPE_CODE_STRING,
4524                TARGET_CHAR_BIT / TARGET_CHAR_BIT,
4525                0, "string",
4526                (struct objfile *) NULL);
4527
4528   /* We use TYPE_CODE_INT to print these as integers.  Does this do any
4529      good?  Would we be better off with TYPE_CODE_ERROR?  Should
4530      TYPE_CODE_ERROR print things in hex if it knows the size?  */
4531   mdebug_type_fixed_dec =
4532     init_type (TYPE_CODE_INT,
4533                TARGET_INT_BIT / TARGET_CHAR_BIT,
4534                0, "fixed decimal",
4535                (struct objfile *) NULL);
4536
4537   mdebug_type_float_dec =
4538     init_type (TYPE_CODE_ERROR,
4539                TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
4540                0, "floating decimal",
4541                (struct objfile *) NULL);
4542
4543   nodebug_func_symbol_type = init_type (TYPE_CODE_FUNC, 1, 0,
4544                                         "<function, no debug info>", NULL);
4545   TYPE_TARGET_TYPE (nodebug_func_symbol_type) = mdebug_type_int;
4546   nodebug_var_symbol_type =
4547     init_type (TYPE_CODE_INT, TARGET_INT_BIT / HOST_CHAR_BIT, 0,
4548                "<variable, no debug info>", NULL);
4549 }