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