Adjust for symbol name changes.
[dragonfly.git] / contrib / gdb-6.2.1 / 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       /* The objfile has its functions reordered if this partial symbol
3605          table overlaps any other partial symbol table.
3606          We cannot assume a reordered objfile if a partial symbol table
3607          is contained within another partial symbol table, as partial symbol
3608          tables for include files with executable code are contained
3609          within the partial symbol table for the including source file,
3610          and we do not want to flag the objfile reordered for these cases.
3611
3612          This strategy works well for Irix-5.2 shared libraries, but we
3613          might have to use a more elaborate (and slower) algorithm for
3614          other cases.  */
3615       save_pst = fdr_to_pst[f_idx].pst;
3616       if (save_pst != NULL
3617           && save_pst->textlow != 0
3618           && !(objfile->flags & OBJF_REORDERED))
3619         {
3620           ALL_OBJFILE_PSYMTABS (objfile, pst)
3621           {
3622             if (save_pst != pst
3623                 && save_pst->textlow >= pst->textlow
3624                 && save_pst->textlow < pst->texthigh
3625                 && save_pst->texthigh > pst->texthigh)
3626               {
3627                 objfile->flags |= OBJF_REORDERED;
3628                 break;
3629               }
3630           }
3631         }
3632     }
3633
3634   /* Now scan the FDRs for dependencies */
3635   for (f_idx = 0; f_idx < hdr->ifdMax; f_idx++)
3636     {
3637       fh = f_idx + debug_info->fdr;
3638       pst = fdr_to_pst[f_idx].pst;
3639
3640       if (pst == (struct partial_symtab *) NULL)
3641         continue;
3642
3643       /* This should catch stabs-in-ecoff. */
3644       if (fh->crfd <= 1)
3645         continue;
3646
3647       /* Skip the first file indirect entry as it is a self dependency
3648          for source files or a reverse .h -> .c dependency for header files.  */
3649       pst->number_of_dependencies = 0;
3650       pst->dependencies =
3651         ((struct partial_symtab **)
3652          obstack_alloc (&objfile->objfile_obstack,
3653                         ((fh->crfd - 1)
3654                          * sizeof (struct partial_symtab *))));
3655       for (s_idx = 1; s_idx < fh->crfd; s_idx++)
3656         {
3657           RFDT rh;
3658
3659           (*swap_rfd_in) (cur_bfd,
3660                           ((char *) debug_info->external_rfd
3661                            + (fh->rfdBase + s_idx) * external_rfd_size),
3662                           &rh);
3663           if (rh < 0 || rh >= hdr->ifdMax)
3664             {
3665               complaint (&symfile_complaints, "bad file number %ld", rh);
3666               continue;
3667             }
3668
3669           /* Skip self dependencies of header files.  */
3670           if (rh == f_idx)
3671             continue;
3672
3673           /* Do not add to dependeny list if psymtab was empty.  */
3674           if (fdr_to_pst[rh].pst == (struct partial_symtab *) NULL)
3675             continue;
3676           pst->dependencies[pst->number_of_dependencies++] = fdr_to_pst[rh].pst;
3677         }
3678     }
3679
3680   /* Remove the dummy psymtab created for -O3 images above, if it is
3681      still empty, to enable the detection of stripped executables.  */
3682   if (objfile->psymtabs->next == NULL
3683       && objfile->psymtabs->number_of_dependencies == 0
3684       && objfile->psymtabs->n_global_syms == 0
3685       && objfile->psymtabs->n_static_syms == 0)
3686     objfile->psymtabs = NULL;
3687   do_cleanups (old_chain);
3688 }
3689
3690 /* If the current psymbol has an enumerated type, we need to add
3691    all the the enum constants to the partial symbol table.  */
3692
3693 static void
3694 handle_psymbol_enumerators (struct objfile *objfile, FDR *fh, int stype,
3695                             CORE_ADDR svalue)
3696 {
3697   const bfd_size_type external_sym_size = debug_swap->external_sym_size;
3698   void (*const swap_sym_in) (bfd *, void *, SYMR *) = debug_swap->swap_sym_in;
3699   char *ext_sym = ((char *) debug_info->external_sym
3700                    + ((fh->isymBase + cur_sdx + 1) * external_sym_size));
3701   SYMR sh;
3702   TIR tir;
3703
3704   switch (stype)
3705     {
3706     case stEnum:
3707       break;
3708
3709     case stBlock:
3710       /* It is an enumerated type if the next symbol entry is a stMember
3711          and its auxiliary index is indexNil or its auxiliary entry
3712          is a plain btNil or btVoid.
3713          Alpha cc -migrate enums are recognized by a zero index and
3714          a zero symbol value.
3715          DU 4.0 cc enums are recognized by a member type of btEnum without
3716          qualifiers and a zero symbol value.  */
3717       (*swap_sym_in) (cur_bfd, ext_sym, &sh);
3718       if (sh.st != stMember)
3719         return;
3720
3721       if (sh.index == indexNil
3722           || (sh.index == 0 && svalue == 0))
3723         break;
3724       (*debug_swap->swap_tir_in) (fh->fBigendian,
3725                                   &(debug_info->external_aux
3726                                     + fh->iauxBase + sh.index)->a_ti,
3727                                   &tir);
3728       if ((tir.bt != btNil
3729            && tir.bt != btVoid
3730            && (tir.bt != btEnum || svalue != 0))
3731           || tir.tq0 != tqNil)
3732         return;
3733       break;
3734
3735     default:
3736       return;
3737     }
3738
3739   for (;;)
3740     {
3741       char *name;
3742
3743       (*swap_sym_in) (cur_bfd, ext_sym, &sh);
3744       if (sh.st != stMember)
3745         break;
3746       name = debug_info->ss + cur_fdr->issBase + sh.iss;
3747
3748       /* Note that the value doesn't matter for enum constants
3749          in psymtabs, just in symtabs.  */
3750       add_psymbol_to_list (name, strlen (name),
3751                            VAR_DOMAIN, LOC_CONST,
3752                            &objfile->static_psymbols, 0,
3753                            (CORE_ADDR) 0, psymtab_language, objfile);
3754       ext_sym += external_sym_size;
3755     }
3756 }
3757
3758 /* Get the next symbol.  OBJFILE is unused. */
3759
3760 static char *
3761 mdebug_next_symbol_text (struct objfile *objfile)
3762 {
3763   SYMR sh;
3764
3765   cur_sdx++;
3766   (*debug_swap->swap_sym_in) (cur_bfd,
3767                               ((char *) debug_info->external_sym
3768                                + ((cur_fdr->isymBase + cur_sdx)
3769                                   * debug_swap->external_sym_size)),
3770                               &sh);
3771   return debug_info->ss + cur_fdr->issBase + sh.iss;
3772 }
3773
3774 /* Ancillary function to psymtab_to_symtab().  Does all the work
3775    for turning the partial symtab PST into a symtab, recurring
3776    first on all dependent psymtabs.  The argument FILENAME is
3777    only passed so we can see in debug stack traces what file
3778    is being read.
3779
3780    This function has a split personality, based on whether the
3781    symbol table contains ordinary ecoff symbols, or stabs-in-ecoff.
3782    The flow of control and even the memory allocation differs.  FIXME.  */
3783
3784 static void
3785 psymtab_to_symtab_1 (struct partial_symtab *pst, char *filename)
3786 {
3787   bfd_size_type external_sym_size;
3788   bfd_size_type external_pdr_size;
3789   void (*swap_sym_in) (bfd *, void *, SYMR *);
3790   void (*swap_pdr_in) (bfd *, void *, PDR *);
3791   int i;
3792   struct symtab *st = NULL;
3793   FDR *fh;
3794   struct linetable *lines;
3795   CORE_ADDR lowest_pdr_addr = 0;
3796   int last_symtab_ended = 0;
3797
3798   if (pst->readin)
3799     return;
3800   pst->readin = 1;
3801
3802   /* Read in all partial symbtabs on which this one is dependent.
3803      NOTE that we do have circular dependencies, sigh.  We solved
3804      that by setting pst->readin before this point.  */
3805
3806   for (i = 0; i < pst->number_of_dependencies; i++)
3807     if (!pst->dependencies[i]->readin)
3808       {
3809         /* Inform about additional files to be read in.  */
3810         if (info_verbose)
3811           {
3812             fputs_filtered (" ", gdb_stdout);
3813             wrap_here ("");
3814             fputs_filtered ("and ", gdb_stdout);
3815             wrap_here ("");
3816             printf_filtered ("%s...",
3817                              pst->dependencies[i]->filename);
3818             wrap_here ("");     /* Flush output */
3819             gdb_flush (gdb_stdout);
3820           }
3821         /* We only pass the filename for debug purposes */
3822         psymtab_to_symtab_1 (pst->dependencies[i],
3823                              pst->dependencies[i]->filename);
3824       }
3825
3826   /* Do nothing if this is a dummy psymtab.  */
3827
3828   if (pst->n_global_syms == 0 && pst->n_static_syms == 0
3829       && pst->textlow == 0 && pst->texthigh == 0)
3830     return;
3831
3832   /* Now read the symbols for this symtab */
3833
3834   cur_bfd = CUR_BFD (pst);
3835   debug_swap = DEBUG_SWAP (pst);
3836   debug_info = DEBUG_INFO (pst);
3837   pending_list = PENDING_LIST (pst);
3838   external_sym_size = debug_swap->external_sym_size;
3839   external_pdr_size = debug_swap->external_pdr_size;
3840   swap_sym_in = debug_swap->swap_sym_in;
3841   swap_pdr_in = debug_swap->swap_pdr_in;
3842   current_objfile = pst->objfile;
3843   cur_fd = FDR_IDX (pst);
3844   fh = ((cur_fd == -1)
3845         ? (FDR *) NULL
3846         : debug_info->fdr + cur_fd);
3847   cur_fdr = fh;
3848
3849   /* See comment in parse_partial_symbols about the @stabs sentinel. */
3850   processing_gcc_compilation = 0;
3851   if (fh != (FDR *) NULL && fh->csym >= 2)
3852     {
3853       SYMR sh;
3854
3855       (*swap_sym_in) (cur_bfd,
3856                       ((char *) debug_info->external_sym
3857                        + (fh->isymBase + 1) * external_sym_size),
3858                       &sh);
3859       if (strcmp (debug_info->ss + fh->issBase + sh.iss,
3860                   stabs_symbol) == 0)
3861         {
3862           /* We indicate that this is a GCC compilation so that certain
3863              features will be enabled in stabsread/dbxread.  */
3864           processing_gcc_compilation = 2;
3865         }
3866     }
3867
3868   if (processing_gcc_compilation != 0)
3869     {
3870
3871       /* This symbol table contains stabs-in-ecoff entries.  */
3872
3873       /* Parse local symbols first */
3874
3875       if (fh->csym <= 2)        /* FIXME, this blows psymtab->symtab ptr */
3876         {
3877           current_objfile = NULL;
3878           return;
3879         }
3880       for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
3881         {
3882           SYMR sh;
3883           char *name;
3884           CORE_ADDR valu;
3885
3886           (*swap_sym_in) (cur_bfd,
3887                           (((char *) debug_info->external_sym)
3888                            + (fh->isymBase + cur_sdx) * external_sym_size),
3889                           &sh);
3890           name = debug_info->ss + fh->issBase + sh.iss;
3891           valu = sh.value;
3892           /* XXX This is a hack.  It will go away!  */
3893           if (ECOFF_IS_STAB (&sh) || (name[0] == '#'))
3894             {
3895               int type_code = ECOFF_UNMARK_STAB (sh.index);
3896
3897               /* We should never get non N_STAB symbols here, but they
3898                  should be harmless, so keep process_one_symbol from
3899                  complaining about them.  */
3900               if (type_code & N_STAB)
3901                 {
3902                   /* If we found a trailing N_SO with no name, process
3903                      it here instead of in process_one_symbol, so we
3904                      can keep a handle to its symtab.  The symtab
3905                      would otherwise be ended twice, once in
3906                      process_one_symbol, and once after this loop. */
3907                   if (type_code == N_SO
3908                       && last_source_file
3909                       && previous_stab_code != (unsigned char) N_SO
3910                       && *name == '\000')
3911                     {
3912                       valu += ANOFFSET (pst->section_offsets,
3913                                         SECT_OFF_TEXT (pst->objfile));
3914                       previous_stab_code = N_SO;
3915                       st = end_symtab (valu, pst->objfile,
3916                                        SECT_OFF_TEXT (pst->objfile));
3917                       end_stabs ();
3918                       last_symtab_ended = 1;
3919                     }
3920                   else
3921                     {
3922                       last_symtab_ended = 0;
3923                       process_one_symbol (type_code, 0, valu, name,
3924                                           pst->section_offsets, pst->objfile);
3925                     }
3926                 }
3927               /* Similarly a hack.  */
3928               else if (name[0] == '#')
3929                 {
3930                   process_one_symbol (N_SLINE, 0, valu, name,
3931                                       pst->section_offsets, pst->objfile);
3932                 }
3933               if (type_code == N_FUN)
3934                 {
3935                   /* Make up special symbol to contain
3936                      procedure specific info */
3937                   struct mips_extra_func_info *e =
3938                   ((struct mips_extra_func_info *)
3939                    obstack_alloc (&current_objfile->objfile_obstack,
3940                                   sizeof (struct mips_extra_func_info)));
3941                   struct symbol *s = new_symbol (MIPS_EFI_SYMBOL_NAME);
3942
3943                   memset (e, 0, sizeof (struct mips_extra_func_info));
3944                   SYMBOL_DOMAIN (s) = LABEL_DOMAIN;
3945                   SYMBOL_CLASS (s) = LOC_CONST;
3946                   SYMBOL_TYPE (s) = mdebug_type_void;
3947                   SYMBOL_VALUE (s) = (long) e;
3948                   e->pdr.framereg = -1;
3949                   add_symbol_to_list (s, &local_symbols);
3950                 }
3951             }
3952           else if (sh.st == stLabel)
3953             {
3954               if (sh.index == indexNil)
3955                 {
3956                   /* This is what the gcc2_compiled and __gnu_compiled_*
3957                      show up as.  So don't complain.  */
3958                   ;
3959                 }
3960               else
3961                 {
3962                   /* Handle encoded stab line number. */
3963                   valu += ANOFFSET (pst->section_offsets, SECT_OFF_TEXT (pst->objfile));
3964                   record_line (current_subfile, sh.index, valu);
3965                 }
3966             }
3967           else if (sh.st == stProc || sh.st == stStaticProc
3968                    || sh.st == stStatic || sh.st == stEnd)
3969             /* These are generated by gcc-2.x, do not complain */
3970             ;
3971           else
3972             complaint (&symfile_complaints, "unknown stabs symbol %s", name);
3973         }
3974
3975       if (! last_symtab_ended)
3976         {
3977           st = end_symtab (pst->texthigh, pst->objfile, SECT_OFF_TEXT (pst->objfile));
3978           end_stabs ();
3979         }
3980
3981       /* There used to be a call to sort_blocks here, but this should not
3982          be necessary for stabs symtabs.  And as sort_blocks modifies the
3983          start address of the GLOBAL_BLOCK to the FIRST_LOCAL_BLOCK,
3984          it did the wrong thing if the first procedure in a file was
3985          generated via asm statements.  */
3986
3987       /* Fill in procedure info next.  */
3988       if (fh->cpd > 0)
3989         {
3990           PDR *pr_block;
3991           struct cleanup *old_chain;
3992           char *pdr_ptr;
3993           char *pdr_end;
3994           PDR *pdr_in;
3995           PDR *pdr_in_end;
3996
3997           pr_block = (PDR *) xmalloc (fh->cpd * sizeof (PDR));
3998           old_chain = make_cleanup (xfree, pr_block);
3999
4000           pdr_ptr = ((char *) debug_info->external_pdr
4001                      + fh->ipdFirst * external_pdr_size);
4002           pdr_end = pdr_ptr + fh->cpd * external_pdr_size;
4003           pdr_in = pr_block;
4004           for (;
4005                pdr_ptr < pdr_end;
4006                pdr_ptr += external_pdr_size, pdr_in++)
4007             {
4008               (*swap_pdr_in) (cur_bfd, pdr_ptr, pdr_in);
4009
4010               /* Determine lowest PDR address, the PDRs are not always
4011                  sorted.  */
4012               if (pdr_in == pr_block)
4013                 lowest_pdr_addr = pdr_in->adr;
4014               else if (pdr_in->adr < lowest_pdr_addr)
4015                 lowest_pdr_addr = pdr_in->adr;
4016             }
4017
4018           pdr_in = pr_block;
4019           pdr_in_end = pdr_in + fh->cpd;
4020           for (; pdr_in < pdr_in_end; pdr_in++)
4021             parse_procedure (pdr_in, st, pst);
4022
4023           do_cleanups (old_chain);
4024         }
4025     }
4026   else
4027     {
4028       /* This symbol table contains ordinary ecoff entries.  */
4029
4030       int f_max;
4031       int maxlines;
4032       EXTR *ext_ptr;
4033
4034       if (fh == 0)
4035         {
4036           maxlines = 0;
4037           st = new_symtab ("unknown", 0, pst->objfile);
4038         }
4039       else
4040         {
4041           maxlines = 2 * fh->cline;
4042           st = new_symtab (pst->filename, maxlines, pst->objfile);
4043
4044           /* The proper language was already determined when building
4045              the psymtab, use it.  */
4046           st->language = PST_PRIVATE (pst)->pst_language;
4047         }
4048
4049       psymtab_language = st->language;
4050
4051       lines = LINETABLE (st);
4052
4053       /* Get a new lexical context */
4054
4055       push_parse_stack ();
4056       top_stack->cur_st = st;
4057       top_stack->cur_block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (st),
4058                                                 STATIC_BLOCK);
4059       BLOCK_START (top_stack->cur_block) = pst->textlow;
4060       BLOCK_END (top_stack->cur_block) = 0;
4061       top_stack->blocktype = stFile;
4062       top_stack->cur_type = 0;
4063       top_stack->procadr = 0;
4064       top_stack->numargs = 0;
4065       found_ecoff_debugging_info = 0;
4066
4067       if (fh)
4068         {
4069           char *sym_ptr;
4070           char *sym_end;
4071
4072           /* Parse local symbols first */
4073           sym_ptr = ((char *) debug_info->external_sym
4074                      + fh->isymBase * external_sym_size);
4075           sym_end = sym_ptr + fh->csym * external_sym_size;
4076           while (sym_ptr < sym_end)
4077             {
4078               SYMR sh;
4079               int c;
4080
4081               (*swap_sym_in) (cur_bfd, sym_ptr, &sh);
4082               c = parse_symbol (&sh,
4083                                 debug_info->external_aux + fh->iauxBase,
4084                                 sym_ptr, fh->fBigendian, pst->section_offsets, pst->objfile);
4085               sym_ptr += c * external_sym_size;
4086             }
4087
4088           /* Linenumbers.  At the end, check if we can save memory.
4089              parse_lines has to look ahead an arbitrary number of PDR
4090              structures, so we swap them all first.  */
4091           if (fh->cpd > 0)
4092             {
4093               PDR *pr_block;
4094               struct cleanup *old_chain;
4095               char *pdr_ptr;
4096               char *pdr_end;
4097               PDR *pdr_in;
4098               PDR *pdr_in_end;
4099
4100               pr_block = (PDR *) xmalloc (fh->cpd * sizeof (PDR));
4101
4102               old_chain = make_cleanup (xfree, pr_block);
4103
4104               pdr_ptr = ((char *) debug_info->external_pdr
4105                          + fh->ipdFirst * external_pdr_size);
4106               pdr_end = pdr_ptr + fh->cpd * external_pdr_size;
4107               pdr_in = pr_block;
4108               for (;
4109                    pdr_ptr < pdr_end;
4110                    pdr_ptr += external_pdr_size, pdr_in++)
4111                 {
4112                   (*swap_pdr_in) (cur_bfd, pdr_ptr, pdr_in);
4113
4114                   /* Determine lowest PDR address, the PDRs are not always
4115                      sorted.  */
4116                   if (pdr_in == pr_block)
4117                     lowest_pdr_addr = pdr_in->adr;
4118                   else if (pdr_in->adr < lowest_pdr_addr)
4119                     lowest_pdr_addr = pdr_in->adr;
4120                 }
4121
4122               parse_lines (fh, pr_block, lines, maxlines, pst, lowest_pdr_addr);
4123               if (lines->nitems < fh->cline)
4124                 lines = shrink_linetable (lines);
4125
4126               /* Fill in procedure info next.  */
4127               pdr_in = pr_block;
4128               pdr_in_end = pdr_in + fh->cpd;
4129               for (; pdr_in < pdr_in_end; pdr_in++)
4130                 parse_procedure (pdr_in, 0, pst);
4131
4132               do_cleanups (old_chain);
4133             }
4134         }
4135
4136       LINETABLE (st) = lines;
4137
4138       /* .. and our share of externals.
4139          XXX use the global list to speed up things here. how?
4140          FIXME, Maybe quit once we have found the right number of ext's? */
4141       top_stack->cur_st = st;
4142       top_stack->cur_block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (top_stack->cur_st),
4143                                                 GLOBAL_BLOCK);
4144       top_stack->blocktype = stFile;
4145
4146       ext_ptr = PST_PRIVATE (pst)->extern_tab;
4147       for (i = PST_PRIVATE (pst)->extern_count; --i >= 0; ext_ptr++)
4148         parse_external (ext_ptr, fh->fBigendian, pst->section_offsets, pst->objfile);
4149
4150       /* If there are undefined symbols, tell the user.
4151          The alpha has an undefined symbol for every symbol that is
4152          from a shared library, so tell the user only if verbose is on.  */
4153       if (info_verbose && n_undef_symbols)
4154         {
4155           printf_filtered ("File %s contains %d unresolved references:",
4156                            st->filename, n_undef_symbols);
4157           printf_filtered ("\n\t%4d variables\n\t%4d procedures\n\t%4d labels\n",
4158                            n_undef_vars, n_undef_procs, n_undef_labels);
4159           n_undef_symbols = n_undef_labels = n_undef_vars = n_undef_procs = 0;
4160
4161         }
4162       pop_parse_stack ();
4163
4164       st->primary = 1;
4165
4166       sort_blocks (st);
4167     }
4168
4169   /* Now link the psymtab and the symtab.  */
4170   pst->symtab = st;
4171
4172   current_objfile = NULL;
4173 }
4174 \f
4175 /* Ancillary parsing procedures. */
4176
4177 /* Return 1 if the symbol pointed to by SH has a cross reference
4178    to an opaque aggregate type, else 0.  */
4179
4180 static int
4181 has_opaque_xref (FDR *fh, SYMR *sh)
4182 {
4183   TIR tir;
4184   union aux_ext *ax;
4185   RNDXR rn[1];
4186   unsigned int rf;
4187
4188   if (sh->index == indexNil)
4189     return 0;
4190
4191   ax = debug_info->external_aux + fh->iauxBase + sh->index;
4192   (*debug_swap->swap_tir_in) (fh->fBigendian, &ax->a_ti, &tir);
4193   if (tir.bt != btStruct && tir.bt != btUnion && tir.bt != btEnum)
4194     return 0;
4195
4196   ax++;
4197   (*debug_swap->swap_rndx_in) (fh->fBigendian, &ax->a_rndx, rn);
4198   if (rn->rfd == 0xfff)
4199     rf = AUX_GET_ISYM (fh->fBigendian, ax + 1);
4200   else
4201     rf = rn->rfd;
4202   if (rf != -1)
4203     return 0;
4204   return 1;
4205 }
4206
4207 /* Lookup the type at relative index RN.  Return it in TPP
4208    if found and in any event come up with its name PNAME.
4209    BIGEND says whether aux symbols are big-endian or not (from fh->fBigendian).
4210    Return value says how many aux symbols we ate. */
4211
4212 static int
4213 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. */
4214            char **pname, int bigend, char *sym_name)
4215 {
4216   RNDXR rn[1];
4217   unsigned int rf;
4218   int result = 1;
4219   FDR *fh;
4220   char *esh;
4221   SYMR sh;
4222   int xref_fd;
4223   struct mdebug_pending *pend;
4224
4225   *tpp = (struct type *) NULL;
4226
4227   (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, rn);
4228
4229   /* Escape index means 'the next one' */
4230   if (rn->rfd == 0xfff)
4231     {
4232       result++;
4233       rf = AUX_GET_ISYM (bigend, ax + 1);
4234     }
4235   else
4236     {
4237       rf = rn->rfd;
4238     }
4239
4240   /* mips cc uses a rf of -1 for opaque struct definitions.
4241      Set TYPE_FLAG_STUB for these types so that check_typedef will
4242      resolve them if the struct gets defined in another compilation unit.  */
4243   if (rf == -1)
4244     {
4245       *pname = "<undefined>";
4246       *tpp = init_type (type_code, 0, TYPE_FLAG_STUB, (char *) NULL, current_objfile);
4247       return result;
4248     }
4249
4250   /* mips cc uses an escaped rn->index of 0 for struct return types
4251      of procedures that were compiled without -g. These will always remain
4252      undefined.  */
4253   if (rn->rfd == 0xfff && rn->index == 0)
4254     {
4255       *pname = "<undefined>";
4256       return result;
4257     }
4258
4259   /* Find the relative file descriptor and the symbol in it.  */
4260   fh = get_rfd (fd, rf);
4261   xref_fd = fh - debug_info->fdr;
4262
4263   if (rn->index >= fh->csym)
4264     {
4265       /* File indirect entry is corrupt.  */
4266       *pname = "<illegal>";
4267       bad_rfd_entry_complaint (sym_name, xref_fd, rn->index);
4268       return result;
4269     }
4270
4271   /* If we have processed this symbol then we left a forwarding
4272      pointer to the type in the pending list.  If not, we`ll put
4273      it in a list of pending types, to be processed later when
4274      the file will be.  In any event, we collect the name for the
4275      type here.  */
4276
4277   esh = ((char *) debug_info->external_sym
4278          + ((fh->isymBase + rn->index)
4279             * debug_swap->external_sym_size));
4280   (*debug_swap->swap_sym_in) (cur_bfd, esh, &sh);
4281
4282   /* Make sure that this type of cross reference can be handled.  */
4283   if ((sh.sc != scInfo
4284        || (sh.st != stBlock && sh.st != stTypedef && sh.st != stIndirect
4285            && sh.st != stStruct && sh.st != stUnion
4286            && sh.st != stEnum))
4287       && (sh.st != stBlock || !SC_IS_COMMON (sh.sc)))
4288     {
4289       /* File indirect entry is corrupt.  */
4290       *pname = "<illegal>";
4291       bad_rfd_entry_complaint (sym_name, xref_fd, rn->index);
4292       return result;
4293     }
4294
4295   *pname = debug_info->ss + fh->issBase + sh.iss;
4296
4297   pend = is_pending_symbol (fh, esh);
4298   if (pend)
4299     *tpp = pend->t;
4300   else
4301     {
4302       /* We have not yet seen this type.  */
4303
4304       if ((sh.iss == 0 && sh.st == stTypedef) || sh.st == stIndirect)
4305         {
4306           TIR tir;
4307
4308           /* alpha cc puts out a stTypedef with a sh.iss of zero for
4309              two cases:
4310              a) forward declarations of structs/unions/enums which are not
4311              defined in this compilation unit.
4312              For these the type will be void. This is a bad design decision
4313              as cross referencing across compilation units is impossible
4314              due to the missing name.
4315              b) forward declarations of structs/unions/enums/typedefs which
4316              are defined later in this file or in another file in the same
4317              compilation unit. Irix5 cc uses a stIndirect symbol for this.
4318              Simply cross reference those again to get the true type.
4319              The forward references are not entered in the pending list and
4320              in the symbol table.  */
4321
4322           (*debug_swap->swap_tir_in) (bigend,
4323                                       &(debug_info->external_aux
4324                                         + fh->iauxBase + sh.index)->a_ti,
4325                                       &tir);
4326           if (tir.tq0 != tqNil)
4327             complaint (&symfile_complaints,
4328                        "illegal tq0 in forward typedef for %s", sym_name);
4329           switch (tir.bt)
4330             {
4331             case btVoid:
4332               *tpp = init_type (type_code, 0, 0, (char *) NULL,
4333                                 current_objfile);
4334               *pname = "<undefined>";
4335               break;
4336
4337             case btStruct:
4338             case btUnion:
4339             case btEnum:
4340               cross_ref (xref_fd,
4341                          (debug_info->external_aux
4342                           + fh->iauxBase + sh.index + 1),
4343                          tpp, type_code, pname,
4344                          fh->fBigendian, sym_name);
4345               break;
4346
4347             case btTypedef:
4348               /* Follow a forward typedef. This might recursively
4349                  call cross_ref till we get a non typedef'ed type.
4350                  FIXME: This is not correct behaviour, but gdb currently
4351                  cannot handle typedefs without type copying. Type
4352                  copying is impossible as we might have mutual forward
4353                  references between two files and the copied type would not
4354                  get filled in when we later parse its definition.  */
4355               *tpp = parse_type (xref_fd,
4356                                  debug_info->external_aux + fh->iauxBase,
4357                                  sh.index,
4358                                  (int *) NULL,
4359                                  fh->fBigendian,
4360                                  debug_info->ss + fh->issBase + sh.iss);
4361               add_pending (fh, esh, *tpp);
4362               break;
4363
4364             default:
4365               complaint (&symfile_complaints,
4366                          "illegal bt %d in forward typedef for %s", tir.bt,
4367                          sym_name);
4368               *tpp = init_type (type_code, 0, 0, (char *) NULL,
4369                                 current_objfile);
4370               break;
4371             }
4372           return result;
4373         }
4374       else if (sh.st == stTypedef)
4375         {
4376           /* Parse the type for a normal typedef. This might recursively call
4377              cross_ref till we get a non typedef'ed type.
4378              FIXME: This is not correct behaviour, but gdb currently
4379              cannot handle typedefs without type copying. But type copying is
4380              impossible as we might have mutual forward references between
4381              two files and the copied type would not get filled in when
4382              we later parse its definition.   */
4383           *tpp = parse_type (xref_fd,
4384                              debug_info->external_aux + fh->iauxBase,
4385                              sh.index,
4386                              (int *) NULL,
4387                              fh->fBigendian,
4388                              debug_info->ss + fh->issBase + sh.iss);
4389         }
4390       else
4391         {
4392           /* Cross reference to a struct/union/enum which is defined
4393              in another file in the same compilation unit but that file
4394              has not been parsed yet.
4395              Initialize the type only, it will be filled in when
4396              it's definition is parsed.  */
4397           *tpp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
4398         }
4399       add_pending (fh, esh, *tpp);
4400     }
4401
4402   /* We used one auxent normally, two if we got a "next one" rf. */
4403   return result;
4404 }
4405
4406
4407 /* Quick&dirty lookup procedure, to avoid the MI ones that require
4408    keeping the symtab sorted */
4409
4410 static struct symbol *
4411 mylookup_symbol (char *name, struct block *block,
4412                  domain_enum domain, enum address_class class)
4413 {
4414   struct dict_iterator iter;
4415   int inc;
4416   struct symbol *sym;
4417
4418   inc = name[0];
4419   ALL_BLOCK_SYMBOLS (block, iter, sym)
4420     {
4421       if (DEPRECATED_SYMBOL_NAME (sym)[0] == inc
4422           && SYMBOL_DOMAIN (sym) == domain
4423           && SYMBOL_CLASS (sym) == class
4424           && strcmp (DEPRECATED_SYMBOL_NAME (sym), name) == 0)
4425         return sym;
4426     }
4427
4428   block = BLOCK_SUPERBLOCK (block);
4429   if (block)
4430     return mylookup_symbol (name, block, domain, class);
4431   return 0;
4432 }
4433
4434
4435 /* Add a new symbol S to a block B.  */
4436
4437 static void
4438 add_symbol (struct symbol *s, struct block *b)
4439 {
4440   dict_add_symbol (BLOCK_DICT (b), s);
4441 }
4442
4443 /* Add a new block B to a symtab S */
4444
4445 static void
4446 add_block (struct block *b, struct symtab *s)
4447 {
4448   struct blockvector *bv = BLOCKVECTOR (s);
4449
4450   bv = (struct blockvector *) xrealloc ((void *) bv,
4451                                         (sizeof (struct blockvector)
4452                                          + BLOCKVECTOR_NBLOCKS (bv)
4453                                          * sizeof (bv->block)));
4454   if (bv != BLOCKVECTOR (s))
4455     BLOCKVECTOR (s) = bv;
4456
4457   BLOCKVECTOR_BLOCK (bv, BLOCKVECTOR_NBLOCKS (bv)++) = b;
4458 }
4459
4460 /* Add a new linenumber entry (LINENO,ADR) to a linevector LT.
4461    MIPS' linenumber encoding might need more than one byte
4462    to describe it, LAST is used to detect these continuation lines.
4463
4464    Combining lines with the same line number seems like a bad idea.
4465    E.g: There could be a line number entry with the same line number after the
4466    prologue and GDB should not ignore it (this is a better way to find
4467    a prologue than mips_skip_prologue).
4468    But due to the compressed line table format there are line number entries
4469    for the same line which are needed to bridge the gap to the next
4470    line number entry. These entries have a bogus address info with them
4471    and we are unable to tell them from intended duplicate line number
4472    entries.
4473    This is another reason why -ggdb debugging format is preferable.  */
4474
4475 static int
4476 add_line (struct linetable *lt, int lineno, CORE_ADDR adr, int last)
4477 {
4478   /* DEC c89 sometimes produces zero linenos which confuse gdb.
4479      Change them to something sensible. */
4480   if (lineno == 0)
4481     lineno = 1;
4482   if (last == 0)
4483     last = -2;                  /* make sure we record first line */
4484
4485   if (last == lineno)           /* skip continuation lines */
4486     return lineno;
4487
4488   lt->item[lt->nitems].line = lineno;
4489   lt->item[lt->nitems++].pc = adr << 2;
4490   return lineno;
4491 }
4492 \f
4493 /* Sorting and reordering procedures */
4494
4495 /* Blocks with a smaller low bound should come first */
4496
4497 static int
4498 compare_blocks (const void *arg1, const void *arg2)
4499 {
4500   LONGEST addr_diff;
4501   struct block **b1 = (struct block **) arg1;
4502   struct block **b2 = (struct block **) arg2;
4503
4504   addr_diff = (BLOCK_START ((*b1))) - (BLOCK_START ((*b2)));
4505   if (addr_diff == 0)
4506     return (BLOCK_END ((*b2))) - (BLOCK_END ((*b1)));
4507   return addr_diff;
4508 }
4509
4510 /* Sort the blocks of a symtab S.
4511    Reorder the blocks in the blockvector by code-address,
4512    as required by some MI search routines */
4513
4514 static void
4515 sort_blocks (struct symtab *s)
4516 {
4517   struct blockvector *bv = BLOCKVECTOR (s);
4518
4519   if (BLOCKVECTOR_NBLOCKS (bv) <= 2)
4520     {
4521       /* Cosmetic */
4522       if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) == 0)
4523         BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) = 0;
4524       if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) == 0)
4525         BLOCK_START (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) = 0;
4526       return;
4527     }
4528   /*
4529    * This is very unfortunate: normally all functions are compiled in
4530    * the order they are found, but if the file is compiled -O3 things
4531    * are very different.  It would be nice to find a reliable test
4532    * to detect -O3 images in advance.
4533    */
4534   if (BLOCKVECTOR_NBLOCKS (bv) > 3)
4535     qsort (&BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK),
4536            BLOCKVECTOR_NBLOCKS (bv) - FIRST_LOCAL_BLOCK,
4537            sizeof (struct block *),
4538            compare_blocks);
4539
4540   {
4541     CORE_ADDR high = 0;
4542     int i, j = BLOCKVECTOR_NBLOCKS (bv);
4543
4544     for (i = FIRST_LOCAL_BLOCK; i < j; i++)
4545       if (high < BLOCK_END (BLOCKVECTOR_BLOCK (bv, i)))
4546         high = BLOCK_END (BLOCKVECTOR_BLOCK (bv, i));
4547     BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) = high;
4548   }
4549
4550   BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) =
4551     BLOCK_START (BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK));
4552
4553   BLOCK_START (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
4554     BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
4555   BLOCK_END (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
4556     BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
4557 }
4558 \f
4559
4560 /* Constructor/restructor/destructor procedures */
4561
4562 /* Allocate a new symtab for NAME.  Needs an estimate of how many
4563    linenumbers MAXLINES we'll put in it */
4564
4565 static struct symtab *
4566 new_symtab (char *name, int maxlines, struct objfile *objfile)
4567 {
4568   struct symtab *s = allocate_symtab (name, objfile);
4569
4570   LINETABLE (s) = new_linetable (maxlines);
4571
4572   /* All symtabs must have at least two blocks */
4573   BLOCKVECTOR (s) = new_bvect (2);
4574   BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK)
4575     = new_block (NON_FUNCTION_BLOCK);
4576   BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)
4577     = new_block (NON_FUNCTION_BLOCK);
4578   BLOCK_SUPERBLOCK (BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)) =
4579     BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
4580
4581   s->free_code = free_linetable;
4582   s->debugformat = obsavestring ("ECOFF", 5,
4583                                  &objfile->objfile_obstack);
4584   return (s);
4585 }
4586
4587 /* Allocate a new partial_symtab NAME */
4588
4589 static struct partial_symtab *
4590 new_psymtab (char *name, struct objfile *objfile)
4591 {
4592   struct partial_symtab *psymtab;
4593
4594   psymtab = allocate_psymtab (name, objfile);
4595   psymtab->section_offsets = objfile->section_offsets;
4596
4597   /* Keep a backpointer to the file's symbols */
4598
4599   psymtab->read_symtab_private = ((char *)
4600                                   obstack_alloc (&objfile->objfile_obstack,
4601                                                  sizeof (struct symloc)));
4602   memset (psymtab->read_symtab_private, 0, sizeof (struct symloc));
4603   CUR_BFD (psymtab) = cur_bfd;
4604   DEBUG_SWAP (psymtab) = debug_swap;
4605   DEBUG_INFO (psymtab) = debug_info;
4606   PENDING_LIST (psymtab) = pending_list;
4607
4608   /* The way to turn this into a symtab is to call... */
4609   psymtab->read_symtab = mdebug_psymtab_to_symtab;
4610   return (psymtab);
4611 }
4612
4613
4614 /* Allocate a linetable array of the given SIZE.  Since the struct
4615    already includes one item, we subtract one when calculating the
4616    proper size to allocate.  */
4617
4618 static struct linetable *
4619 new_linetable (int size)
4620 {
4621   struct linetable *l;
4622
4623   size = (size - 1) * sizeof (l->item) + sizeof (struct linetable);
4624   l = (struct linetable *) xmalloc (size);
4625   l->nitems = 0;
4626   return l;
4627 }
4628
4629 /* Oops, too big. Shrink it.  This was important with the 2.4 linetables,
4630    I am not so sure about the 3.4 ones.
4631
4632    Since the struct linetable already includes one item, we subtract one when
4633    calculating the proper size to allocate.  */
4634
4635 static struct linetable *
4636 shrink_linetable (struct linetable *lt)
4637 {
4638
4639   return (struct linetable *) xrealloc ((void *) lt,
4640                                         (sizeof (struct linetable)
4641                                          + ((lt->nitems - 1)
4642                                             * sizeof (lt->item))));
4643 }
4644
4645 /* Allocate and zero a new blockvector of NBLOCKS blocks. */
4646
4647 static struct blockvector *
4648 new_bvect (int nblocks)
4649 {
4650   struct blockvector *bv;
4651   int size;
4652
4653   size = sizeof (struct blockvector) + nblocks * sizeof (struct block *);
4654   bv = (struct blockvector *) xzalloc (size);
4655
4656   BLOCKVECTOR_NBLOCKS (bv) = nblocks;
4657
4658   return bv;
4659 }
4660
4661 /* Allocate and zero a new block, and set its BLOCK_DICT.  If function
4662    is non-zero, assume the block is associated to a function, and make
4663    sure that the symbols are stored linearly; otherwise, store them
4664    hashed.  */
4665
4666 static struct block *
4667 new_block (enum block_type type)
4668 {
4669   /* FIXME: carlton/2003-09-11: This should use allocate_block to
4670      allocate the block.  Which, in turn, suggests that the block
4671      should be allocated on an obstack.  */
4672   struct block *retval = xzalloc (sizeof (struct block));
4673
4674   if (type == FUNCTION_BLOCK)
4675     BLOCK_DICT (retval) = dict_create_linear_expandable ();
4676   else
4677     BLOCK_DICT (retval) = dict_create_hashed_expandable ();
4678
4679   return retval;
4680 }
4681
4682 /* Create a new symbol with printname NAME */
4683
4684 static struct symbol *
4685 new_symbol (char *name)
4686 {
4687   struct symbol *s = ((struct symbol *)
4688                       obstack_alloc (&current_objfile->objfile_obstack,
4689                                      sizeof (struct symbol)));
4690
4691   memset (s, 0, sizeof (*s));
4692   SYMBOL_LANGUAGE (s) = psymtab_language;
4693   SYMBOL_SET_NAMES (s, name, strlen (name), current_objfile);
4694   return s;
4695 }
4696
4697 /* Create a new type with printname NAME */
4698
4699 static struct type *
4700 new_type (char *name)
4701 {
4702   struct type *t;
4703
4704   t = alloc_type (current_objfile);
4705   TYPE_NAME (t) = name;
4706   TYPE_CPLUS_SPECIFIC (t) = (struct cplus_struct_type *) &cplus_struct_default;
4707   return t;
4708 }
4709 \f
4710 /* Read ECOFF debugging information from a BFD section.  This is
4711    called from elfread.c.  It parses the section into a
4712    ecoff_debug_info struct, and then lets the rest of the file handle
4713    it as normal.  */
4714
4715 void
4716 elfmdebug_build_psymtabs (struct objfile *objfile,
4717                           const struct ecoff_debug_swap *swap, asection *sec)
4718 {
4719   bfd *abfd = objfile->obfd;
4720   struct ecoff_debug_info *info;
4721   struct cleanup *back_to;
4722
4723   /* FIXME: It's not clear whether we should be getting minimal symbol
4724      information from .mdebug in an ELF file, or whether we will.
4725      Re-initialize the minimal symbol reader in case we do.  */
4726
4727   init_minimal_symbol_collection ();
4728   back_to = make_cleanup_discard_minimal_symbols ();
4729
4730   info = ((struct ecoff_debug_info *)
4731           obstack_alloc (&objfile->objfile_obstack,
4732                          sizeof (struct ecoff_debug_info)));
4733
4734   if (!(*swap->read_debug_info) (abfd, sec, info))
4735     error ("Error reading ECOFF debugging information: %s",
4736            bfd_errmsg (bfd_get_error ()));
4737
4738   mdebug_build_psymtabs (objfile, swap, info);
4739
4740   install_minimal_symbols (objfile);
4741   do_cleanups (back_to);
4742 }
4743
4744 void
4745 _initialize_mdebugread (void)
4746 {
4747   mdebug_type_void =
4748     init_type (TYPE_CODE_VOID, 1,
4749                0,
4750                "void", (struct objfile *) NULL);
4751   mdebug_type_char =
4752     init_type (TYPE_CODE_INT, 1,
4753                0,
4754                "char", (struct objfile *) NULL);
4755   mdebug_type_unsigned_char =
4756     init_type (TYPE_CODE_INT, 1,
4757                TYPE_FLAG_UNSIGNED,
4758                "unsigned char", (struct objfile *) NULL);
4759   mdebug_type_short =
4760     init_type (TYPE_CODE_INT, 2,
4761                0,
4762                "short", (struct objfile *) NULL);
4763   mdebug_type_unsigned_short =
4764     init_type (TYPE_CODE_INT, 2,
4765                TYPE_FLAG_UNSIGNED,
4766                "unsigned short", (struct objfile *) NULL);
4767   mdebug_type_int_32 =
4768     init_type (TYPE_CODE_INT, 4,
4769                0,
4770                "int", (struct objfile *) NULL);
4771   mdebug_type_unsigned_int_32 =
4772     init_type (TYPE_CODE_INT, 4,
4773                TYPE_FLAG_UNSIGNED,
4774                "unsigned int", (struct objfile *) NULL);
4775   mdebug_type_int_64 =
4776     init_type (TYPE_CODE_INT, 8,
4777                0,
4778                "int", (struct objfile *) NULL);
4779   mdebug_type_unsigned_int_64 =
4780     init_type (TYPE_CODE_INT, 8,
4781                TYPE_FLAG_UNSIGNED,
4782                "unsigned int", (struct objfile *) NULL);
4783   mdebug_type_long_32 =
4784     init_type (TYPE_CODE_INT, 4,
4785                0,
4786                "long", (struct objfile *) NULL);
4787   mdebug_type_unsigned_long_32 =
4788     init_type (TYPE_CODE_INT, 4,
4789                TYPE_FLAG_UNSIGNED,
4790                "unsigned long", (struct objfile *) NULL);
4791   mdebug_type_long_64 =
4792     init_type (TYPE_CODE_INT, 8,
4793                0,
4794                "long", (struct objfile *) NULL);
4795   mdebug_type_unsigned_long_64 =
4796     init_type (TYPE_CODE_INT, 8,
4797                TYPE_FLAG_UNSIGNED,
4798                "unsigned long", (struct objfile *) NULL);
4799   mdebug_type_long_long_64 =
4800     init_type (TYPE_CODE_INT, 8,
4801                0,
4802                "long long", (struct objfile *) NULL);
4803   mdebug_type_unsigned_long_long_64 =
4804     init_type (TYPE_CODE_INT, 8,
4805                TYPE_FLAG_UNSIGNED,
4806                "unsigned long long", (struct objfile *) NULL);
4807   mdebug_type_adr_32 =
4808     init_type (TYPE_CODE_PTR, 4,
4809                TYPE_FLAG_UNSIGNED,
4810                "adr_32", (struct objfile *) NULL);
4811   TYPE_TARGET_TYPE (mdebug_type_adr_32) = mdebug_type_void;
4812   mdebug_type_adr_64 =
4813     init_type (TYPE_CODE_PTR, 8,
4814                TYPE_FLAG_UNSIGNED,
4815                "adr_64", (struct objfile *) NULL);
4816   TYPE_TARGET_TYPE (mdebug_type_adr_64) = mdebug_type_void;
4817   mdebug_type_float =
4818     init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
4819                0,
4820                "float", (struct objfile *) NULL);
4821   mdebug_type_double =
4822     init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
4823                0,
4824                "double", (struct objfile *) NULL);
4825   mdebug_type_complex =
4826     init_type (TYPE_CODE_COMPLEX, 2 * TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
4827                0,
4828                "complex", (struct objfile *) NULL);
4829   TYPE_TARGET_TYPE (mdebug_type_complex) = mdebug_type_float;
4830   mdebug_type_double_complex =
4831     init_type (TYPE_CODE_COMPLEX, 2 * TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
4832                0,
4833                "double complex", (struct objfile *) NULL);
4834   TYPE_TARGET_TYPE (mdebug_type_double_complex) = mdebug_type_double;
4835
4836   /* Is a "string" the way btString means it the same as TYPE_CODE_STRING?
4837      FIXME.  */
4838   mdebug_type_string =
4839     init_type (TYPE_CODE_STRING,
4840                TARGET_CHAR_BIT / TARGET_CHAR_BIT,
4841                0, "string",
4842                (struct objfile *) NULL);
4843
4844   /* We use TYPE_CODE_INT to print these as integers.  Does this do any
4845      good?  Would we be better off with TYPE_CODE_ERROR?  Should
4846      TYPE_CODE_ERROR print things in hex if it knows the size?  */
4847   mdebug_type_fixed_dec =
4848     init_type (TYPE_CODE_INT,
4849                TARGET_INT_BIT / TARGET_CHAR_BIT,
4850                0, "fixed decimal",
4851                (struct objfile *) NULL);
4852
4853   mdebug_type_float_dec =
4854     init_type (TYPE_CODE_ERROR,
4855                TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
4856                0, "floating decimal",
4857                (struct objfile *) NULL);
4858
4859   nodebug_func_symbol_type = init_type (TYPE_CODE_FUNC, 1, 0,
4860                                         "<function, no debug info>", NULL);
4861   TYPE_TARGET_TYPE (nodebug_func_symbol_type) = mdebug_type_int;
4862   nodebug_var_symbol_type =
4863     init_type (TYPE_CODE_INT, TARGET_INT_BIT / HOST_CHAR_BIT, 0,
4864                "<variable, no debug info>", NULL);
4865 }