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