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