2003-10-06 Andrew Cagney <cagney@redhat.com>
[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       /* Inhibit core dumps if TIR is corrupted.  */
1526       if (bs == (int *) NULL)
1527         {
1528           /* Alpha cc -migrate encodes char and unsigned char types
1529              as short and unsigned short types with a field width of 8.
1530              Enum types also have a field width which we ignore for now.  */
1531           if (t->bt == btShort && width == 8)
1532             tp = mdebug_type_char;
1533           else if (t->bt == btUShort && width == 8)
1534             tp = mdebug_type_unsigned_char;
1535           else if (t->bt == btEnum)
1536             ;
1537           else
1538             complaint (&symfile_complaints, "can't handle TIR fBitfield for %s",
1539                        sym_name);
1540         }
1541       else
1542         *bs = width;
1543       ax++;
1544     }
1545
1546   /* A btIndirect entry cross references to an aux entry containing
1547      the type.  */
1548   if (t->bt == btIndirect)
1549     {
1550       RNDXR rn[1];
1551       int rf;
1552       FDR *xref_fh;
1553       int xref_fd;
1554
1555       (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, rn);
1556       ax++;
1557       if (rn->rfd == 0xfff)
1558         {
1559           rf = AUX_GET_ISYM (bigend, ax);
1560           ax++;
1561         }
1562       else
1563         rf = rn->rfd;
1564
1565       if (rf == -1)
1566         {
1567           complaint (&symfile_complaints,
1568                      "unable to cross ref btIndirect for %s", sym_name);
1569           return mdebug_type_int;
1570         }
1571       xref_fh = get_rfd (fd, rf);
1572       xref_fd = xref_fh - debug_info->fdr;
1573       tp = parse_type (xref_fd, debug_info->external_aux + xref_fh->iauxBase,
1574                     rn->index, (int *) NULL, xref_fh->fBigendian, sym_name);
1575     }
1576
1577   /* All these types really point to some (common) MIPS type
1578      definition, and only the type-qualifiers fully identify
1579      them.  We'll make the same effort at sharing. */
1580   if (t->bt == btStruct ||
1581       t->bt == btUnion ||
1582       t->bt == btEnum ||
1583
1584   /* btSet (I think) implies that the name is a tag name, not a typedef
1585      name.  This apparently is a MIPS extension for C sets.  */
1586       t->bt == btSet)
1587     {
1588       char *name;
1589
1590       /* Try to cross reference this type, build new type on failure.  */
1591       ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
1592       if (tp == (struct type *) NULL)
1593         tp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
1594
1595       /* DEC c89 produces cross references to qualified aggregate types,
1596          dereference them.  */
1597       while (TYPE_CODE (tp) == TYPE_CODE_PTR
1598              || TYPE_CODE (tp) == TYPE_CODE_ARRAY)
1599         tp = TYPE_TARGET_TYPE (tp);
1600
1601       /* Make sure that TYPE_CODE(tp) has an expected type code.
1602          Any type may be returned from cross_ref if file indirect entries
1603          are corrupted.  */
1604       if (TYPE_CODE (tp) != TYPE_CODE_STRUCT
1605           && TYPE_CODE (tp) != TYPE_CODE_UNION
1606           && TYPE_CODE (tp) != TYPE_CODE_ENUM)
1607         {
1608           unexpected_type_code_complaint (sym_name);
1609         }
1610       else
1611         {
1612
1613           /* Usually, TYPE_CODE(tp) is already type_code.  The main
1614              exception is if we guessed wrong re struct/union/enum.
1615              But for struct vs. union a wrong guess is harmless, so
1616              don't complain().  */
1617           if ((TYPE_CODE (tp) == TYPE_CODE_ENUM
1618                && type_code != TYPE_CODE_ENUM)
1619               || (TYPE_CODE (tp) != TYPE_CODE_ENUM
1620                   && type_code == TYPE_CODE_ENUM))
1621             {
1622               bad_tag_guess_complaint (sym_name);
1623             }
1624
1625           if (TYPE_CODE (tp) != type_code)
1626             {
1627               TYPE_CODE (tp) = type_code;
1628             }
1629
1630           /* Do not set the tag name if it is a compiler generated tag name
1631              (.Fxx or .xxfake or empty) for unnamed struct/union/enums.  */
1632           if (name[0] == '.' || name[0] == '\0')
1633             TYPE_TAG_NAME (tp) = NULL;
1634           else if (TYPE_TAG_NAME (tp) == NULL
1635                    || !STREQ (TYPE_TAG_NAME (tp), name))
1636             TYPE_TAG_NAME (tp) = obsavestring (name, strlen (name),
1637                                             &current_objfile->type_obstack);
1638         }
1639     }
1640
1641   /* All these types really point to some (common) MIPS type
1642      definition, and only the type-qualifiers fully identify
1643      them.  We'll make the same effort at sharing.
1644      FIXME: We are not doing any guessing on range types.  */
1645   if (t->bt == btRange)
1646     {
1647       char *name;
1648
1649       /* Try to cross reference this type, build new type on failure.  */
1650       ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
1651       if (tp == (struct type *) NULL)
1652         tp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
1653
1654       /* Make sure that TYPE_CODE(tp) has an expected type code.
1655          Any type may be returned from cross_ref if file indirect entries
1656          are corrupted.  */
1657       if (TYPE_CODE (tp) != TYPE_CODE_RANGE)
1658         {
1659           unexpected_type_code_complaint (sym_name);
1660         }
1661       else
1662         {
1663           /* Usually, TYPE_CODE(tp) is already type_code.  The main
1664              exception is if we guessed wrong re struct/union/enum. */
1665           if (TYPE_CODE (tp) != type_code)
1666             {
1667               bad_tag_guess_complaint (sym_name);
1668               TYPE_CODE (tp) = type_code;
1669             }
1670           if (TYPE_NAME (tp) == NULL || !STREQ (TYPE_NAME (tp), name))
1671             TYPE_NAME (tp) = obsavestring (name, strlen (name),
1672                                            &current_objfile->type_obstack);
1673         }
1674     }
1675   if (t->bt == btTypedef)
1676     {
1677       char *name;
1678
1679       /* Try to cross reference this type, it should succeed.  */
1680       ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
1681       if (tp == (struct type *) NULL)
1682         {
1683           complaint (&symfile_complaints,
1684                      "unable to cross ref btTypedef for %s", sym_name);
1685           tp = mdebug_type_int;
1686         }
1687     }
1688
1689   /* Deal with range types */
1690   if (t->bt == btRange)
1691     {
1692       TYPE_NFIELDS (tp) = 2;
1693       TYPE_FIELDS (tp) = ((struct field *)
1694                           TYPE_ALLOC (tp, 2 * sizeof (struct field)));
1695       TYPE_FIELD_NAME (tp, 0) = obsavestring ("Low", strlen ("Low"),
1696                                             &current_objfile->type_obstack);
1697       TYPE_FIELD_BITPOS (tp, 0) = AUX_GET_DNLOW (bigend, ax);
1698       ax++;
1699       TYPE_FIELD_NAME (tp, 1) = obsavestring ("High", strlen ("High"),
1700                                             &current_objfile->type_obstack);
1701       TYPE_FIELD_BITPOS (tp, 1) = AUX_GET_DNHIGH (bigend, ax);
1702       ax++;
1703     }
1704
1705   /* Parse all the type qualifiers now. If there are more
1706      than 6 the game will continue in the next aux */
1707
1708   while (1)
1709     {
1710 #define PARSE_TQ(tq) \
1711       if (t->tq != tqNil) \
1712         ax += upgrade_type(fd, &tp, t->tq, ax, bigend, sym_name); \
1713       else \
1714         break;
1715
1716       PARSE_TQ (tq0);
1717       PARSE_TQ (tq1);
1718       PARSE_TQ (tq2);
1719       PARSE_TQ (tq3);
1720       PARSE_TQ (tq4);
1721       PARSE_TQ (tq5);
1722 #undef  PARSE_TQ
1723
1724       /* mips cc 2.x and gcc never put out continued aux entries.  */
1725       if (!t->continued)
1726         break;
1727
1728       (*debug_swap->swap_tir_in) (bigend, &ax->a_ti, t);
1729       ax++;
1730     }
1731
1732   /* Complain for illegal continuations due to corrupt aux entries.  */
1733   if (t->continued)
1734     complaint (&symfile_complaints, "illegal TIR continued for %s", sym_name);
1735
1736   return tp;
1737 }
1738
1739 /* Make up a complex type from a basic one.  Type is passed by
1740    reference in TPP and side-effected as necessary. The type
1741    qualifier TQ says how to handle the aux symbols at AX for
1742    the symbol SX we are currently analyzing.  BIGEND says whether
1743    aux symbols are big-endian or little-endian.
1744    Returns the number of aux symbols we parsed. */
1745
1746 static int
1747 upgrade_type (int fd, struct type **tpp, int tq, union aux_ext *ax, int bigend,
1748               char *sym_name)
1749 {
1750   int off;
1751   struct type *t;
1752
1753   /* Used in array processing */
1754   int rf, id;
1755   FDR *fh;
1756   struct type *range;
1757   struct type *indx;
1758   int lower, upper;
1759   RNDXR rndx;
1760
1761   switch (tq)
1762     {
1763     case tqPtr:
1764       t = lookup_pointer_type (*tpp);
1765       *tpp = t;
1766       return 0;
1767
1768     case tqProc:
1769       t = lookup_function_type (*tpp);
1770       *tpp = t;
1771       return 0;
1772
1773     case tqArray:
1774       off = 0;
1775
1776       /* Determine and record the domain type (type of index) */
1777       (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, &rndx);
1778       id = rndx.index;
1779       rf = rndx.rfd;
1780       if (rf == 0xfff)
1781         {
1782           ax++;
1783           rf = AUX_GET_ISYM (bigend, ax);
1784           off++;
1785         }
1786       fh = get_rfd (fd, rf);
1787
1788       indx = parse_type (fh - debug_info->fdr,
1789                          debug_info->external_aux + fh->iauxBase,
1790                          id, (int *) NULL, bigend, sym_name);
1791
1792       /* The bounds type should be an integer type, but might be anything
1793          else due to corrupt aux entries.  */
1794       if (TYPE_CODE (indx) != TYPE_CODE_INT)
1795         {
1796           complaint (&symfile_complaints,
1797                      "illegal array index type for %s, assuming int", sym_name);
1798           indx = mdebug_type_int;
1799         }
1800
1801       /* Get the bounds, and create the array type.  */
1802       ax++;
1803       lower = AUX_GET_DNLOW (bigend, ax);
1804       ax++;
1805       upper = AUX_GET_DNHIGH (bigend, ax);
1806       ax++;
1807       rf = AUX_GET_WIDTH (bigend, ax);  /* bit size of array element */
1808
1809       range = create_range_type ((struct type *) NULL, indx,
1810                                  lower, upper);
1811
1812       t = create_array_type ((struct type *) NULL, *tpp, range);
1813
1814       /* We used to fill in the supplied array element bitsize
1815          here if the TYPE_LENGTH of the target type was zero.
1816          This happens for a `pointer to an array of anonymous structs',
1817          but in this case the array element bitsize is also zero,
1818          so nothing is gained.
1819          And we used to check the TYPE_LENGTH of the target type against
1820          the supplied array element bitsize.
1821          gcc causes a mismatch for `pointer to array of object',
1822          since the sdb directives it uses do not have a way of
1823          specifying the bitsize, but it does no harm (the
1824          TYPE_LENGTH should be correct) and we should be able to
1825          ignore the erroneous bitsize from the auxiliary entry safely.
1826          dbx seems to ignore it too.  */
1827
1828       /* TYPE_FLAG_TARGET_STUB now takes care of the zero TYPE_LENGTH
1829          problem.  */
1830       if (TYPE_LENGTH (*tpp) == 0)
1831         {
1832           TYPE_FLAGS (t) |= TYPE_FLAG_TARGET_STUB;
1833         }
1834
1835       *tpp = t;
1836       return 4 + off;
1837
1838     case tqVol:
1839       /* Volatile -- currently ignored */
1840       return 0;
1841
1842     case tqConst:
1843       /* Const -- currently ignored */
1844       return 0;
1845
1846     default:
1847       complaint (&symfile_complaints, "unknown type qualifier 0x%x", tq);
1848       return 0;
1849     }
1850 }
1851
1852
1853 /* Parse a procedure descriptor record PR.  Note that the procedure is
1854    parsed _after_ the local symbols, now we just insert the extra
1855    information we need into a MIPS_EFI_SYMBOL_NAME symbol that has
1856    already been placed in the procedure's main block.  Note also that
1857    images that have been partially stripped (ld -x) have been deprived
1858    of local symbols, and we have to cope with them here.  FIRST_OFF is
1859    the offset of the first procedure for this FDR; we adjust the
1860    address by this amount, but I don't know why.  SEARCH_SYMTAB is the symtab
1861    to look for the function which contains the MIPS_EFI_SYMBOL_NAME symbol
1862    in question, or NULL to use top_stack->cur_block.  */
1863
1864 static void parse_procedure (PDR *, struct symtab *, struct partial_symtab *);
1865
1866 static void
1867 parse_procedure (PDR *pr, struct symtab *search_symtab,
1868                  struct partial_symtab *pst)
1869 {
1870   struct symbol *s, *i;
1871   struct block *b;
1872   struct mips_extra_func_info *e;
1873   char *sh_name;
1874
1875   /* Simple rule to find files linked "-x" */
1876   if (cur_fdr->rss == -1)
1877     {
1878       if (pr->isym == -1)
1879         {
1880           /* Static procedure at address pr->adr.  Sigh. */
1881           /* FIXME-32x64.  assuming pr->adr fits in long.  */
1882           complaint (&symfile_complaints,
1883                      "can't handle PDR for static proc at 0x%lx",
1884                      (unsigned long) pr->adr);
1885           return;
1886         }
1887       else
1888         {
1889           /* external */
1890           EXTR she;
1891
1892           (*debug_swap->swap_ext_in) (cur_bfd,
1893                                       ((char *) debug_info->external_ext
1894                                        + (pr->isym
1895                                           * debug_swap->external_ext_size)),
1896                                       &she);
1897           sh_name = debug_info->ssext + she.asym.iss;
1898         }
1899     }
1900   else
1901     {
1902       /* Full symbols */
1903       SYMR sh;
1904
1905       (*debug_swap->swap_sym_in) (cur_bfd,
1906                                   ((char *) debug_info->external_sym
1907                                    + ((cur_fdr->isymBase + pr->isym)
1908                                       * debug_swap->external_sym_size)),
1909                                   &sh);
1910       sh_name = debug_info->ss + cur_fdr->issBase + sh.iss;
1911     }
1912
1913   if (search_symtab != NULL)
1914     {
1915 #if 0
1916       /* This loses both in the case mentioned (want a static, find a global),
1917          but also if we are looking up a non-mangled name which happens to
1918          match the name of a mangled function.  */
1919       /* We have to save the cur_fdr across the call to lookup_symbol.
1920          If the pdr is for a static function and if a global function with
1921          the same name exists, lookup_symbol will eventually read in the symtab
1922          for the global function and clobber cur_fdr.  */
1923       FDR *save_cur_fdr = cur_fdr;
1924       s = lookup_symbol (sh_name, NULL, VAR_DOMAIN, 0, NULL);
1925       cur_fdr = save_cur_fdr;
1926 #else
1927       s = mylookup_symbol
1928         (sh_name,
1929          BLOCKVECTOR_BLOCK (BLOCKVECTOR (search_symtab), STATIC_BLOCK),
1930          VAR_DOMAIN,
1931          LOC_BLOCK);
1932 #endif
1933     }
1934   else
1935     s = mylookup_symbol (sh_name, top_stack->cur_block,
1936                          VAR_DOMAIN, LOC_BLOCK);
1937
1938   if (s != 0)
1939     {
1940       b = SYMBOL_BLOCK_VALUE (s);
1941     }
1942   else
1943     {
1944       complaint (&symfile_complaints, "PDR for %s, but no symbol", sh_name);
1945 #if 1
1946       return;
1947 #else
1948 /* FIXME -- delete.  We can't do symbol allocation now; it's all done.  */
1949       s = new_symbol (sh_name);
1950       SYMBOL_DOMAIN (s) = VAR_DOMAIN;
1951       SYMBOL_CLASS (s) = LOC_BLOCK;
1952       /* Donno its type, hope int is ok */
1953       SYMBOL_TYPE (s) = lookup_function_type (mdebug_type_int);
1954       add_symbol (s, top_stack->cur_block);
1955       /* Wont have symbols for this one */
1956       b = new_block (2);
1957       SYMBOL_BLOCK_VALUE (s) = b;
1958       BLOCK_FUNCTION (b) = s;
1959       BLOCK_START (b) = pr->adr;
1960       /* BOUND used to be the end of procedure's text, but the
1961          argument is no longer passed in.  */
1962       BLOCK_END (b) = bound;
1963       BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
1964       add_block (b, top_stack->cur_st);
1965 #endif
1966     }
1967
1968   i = mylookup_symbol (MIPS_EFI_SYMBOL_NAME, b, LABEL_DOMAIN, LOC_CONST);
1969
1970   if (i)
1971     {
1972       e = (struct mips_extra_func_info *) SYMBOL_VALUE (i);
1973       e->pdr = *pr;
1974       e->pdr.isym = (long) s;
1975
1976       /* GDB expects the absolute function start address for the
1977          procedure descriptor in e->pdr.adr.
1978          As the address in the procedure descriptor is usually relative,
1979          we would have to relocate e->pdr.adr with cur_fdr->adr and
1980          ANOFFSET (pst->section_offsets, SECT_OFF_TEXT (pst->objfile)).
1981          Unfortunately cur_fdr->adr and e->pdr.adr are both absolute
1982          in shared libraries on some systems, and on other systems
1983          e->pdr.adr is sometimes offset by a bogus value.
1984          To work around these problems, we replace e->pdr.adr with
1985          the start address of the function.  */
1986       e->pdr.adr = BLOCK_START (b);
1987
1988       /* Correct incorrect setjmp procedure descriptor from the library
1989          to make backtrace through setjmp work.  */
1990       if (e->pdr.pcreg == 0 && STREQ (sh_name, "setjmp"))
1991         {
1992           complaint (&symfile_complaints, "fixing bad setjmp PDR from libc");
1993           e->pdr.pcreg = RA_REGNUM;
1994           e->pdr.regmask = 0x80000000;
1995           e->pdr.regoffset = -4;
1996         }
1997     }
1998
1999   /* It would be reasonable that functions that have been compiled
2000      without debugging info have a btNil type for their return value,
2001      and functions that are void and are compiled with debugging info
2002      have btVoid.
2003      gcc and DEC f77 put out btNil types for both cases, so btNil is mapped
2004      to TYPE_CODE_VOID in parse_type to get the `compiled with debugging info'
2005      case right.
2006      The glevel field in cur_fdr could be used to determine the presence
2007      of debugging info, but GCC doesn't always pass the -g switch settings
2008      to the assembler and GAS doesn't set the glevel field from the -g switch
2009      settings.
2010      To work around these problems, the return value type of a TYPE_CODE_VOID
2011      function is adjusted accordingly if no debugging info was found in the
2012      compilation unit.  */
2013
2014   if (processing_gcc_compilation == 0
2015       && found_ecoff_debugging_info == 0
2016       && TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (s))) == TYPE_CODE_VOID)
2017     SYMBOL_TYPE (s) = nodebug_func_symbol_type;
2018 }
2019
2020 /* Relocate the extra function info pointed to by the symbol table.  */
2021
2022 void
2023 ecoff_relocate_efi (struct symbol *sym, CORE_ADDR delta)
2024 {
2025   struct mips_extra_func_info *e;
2026
2027   e = (struct mips_extra_func_info *) SYMBOL_VALUE (sym);
2028
2029   e->pdr.adr += delta;
2030 }
2031
2032 /* Parse the external symbol ES. Just call parse_symbol() after
2033    making sure we know where the aux are for it.
2034    BIGEND says whether aux entries are big-endian or little-endian.
2035
2036    This routine clobbers top_stack->cur_block and ->cur_st. */
2037
2038 static void parse_external (EXTR *, int, struct section_offsets *,
2039                             struct objfile *);
2040
2041 static void
2042 parse_external (EXTR *es, int bigend, struct section_offsets *section_offsets,
2043                 struct objfile *objfile)
2044 {
2045   union aux_ext *ax;
2046
2047   if (es->ifd != ifdNil)
2048     {
2049       cur_fd = es->ifd;
2050       cur_fdr = debug_info->fdr + cur_fd;
2051       ax = debug_info->external_aux + cur_fdr->iauxBase;
2052     }
2053   else
2054     {
2055       cur_fdr = debug_info->fdr;
2056       ax = 0;
2057     }
2058
2059   /* Reading .o files */
2060   if (SC_IS_UNDEF (es->asym.sc) || es->asym.sc == scNil)
2061     {
2062       char *what;
2063       switch (es->asym.st)
2064         {
2065         case stNil:
2066           /* These are generated for static symbols in .o files,
2067              ignore them.  */
2068           return;
2069         case stStaticProc:
2070         case stProc:
2071           what = "procedure";
2072           n_undef_procs++;
2073           break;
2074         case stGlobal:
2075           what = "variable";
2076           n_undef_vars++;
2077           break;
2078         case stLabel:
2079           what = "label";
2080           n_undef_labels++;
2081           break;
2082         default:
2083           what = "symbol";
2084           break;
2085         }
2086       n_undef_symbols++;
2087       /* FIXME:  Turn this into a complaint? */
2088       if (info_verbose)
2089         printf_filtered ("Warning: %s `%s' is undefined (in %s)\n",
2090                          what, debug_info->ssext + es->asym.iss,
2091                          fdr_name (cur_fdr));
2092       return;
2093     }
2094
2095   switch (es->asym.st)
2096     {
2097     case stProc:
2098     case stStaticProc:
2099       /* There is no need to parse the external procedure symbols.
2100          If they are from objects compiled without -g, their index will
2101          be indexNil, and the symbol definition from the minimal symbol
2102          is preferrable (yielding a function returning int instead of int).
2103          If the index points to a local procedure symbol, the local
2104          symbol already provides the correct type.
2105          Note that the index of the external procedure symbol points
2106          to the local procedure symbol in the local symbol table, and
2107          _not_ to the auxiliary symbol info.  */
2108       break;
2109     case stGlobal:
2110     case stLabel:
2111       /* Global common symbols are resolved by the runtime loader,
2112          ignore them.  */
2113       if (SC_IS_COMMON (es->asym.sc))
2114         break;
2115
2116       /* Note that the case of a symbol with indexNil must be handled
2117          anyways by parse_symbol().  */
2118       parse_symbol (&es->asym, ax, (char *) NULL, bigend, section_offsets, objfile);
2119       break;
2120     default:
2121       break;
2122     }
2123 }
2124
2125 /* Parse the line number info for file descriptor FH into
2126    GDB's linetable LT.  MIPS' encoding requires a little bit
2127    of magic to get things out.  Note also that MIPS' line
2128    numbers can go back and forth, apparently we can live
2129    with that and do not need to reorder our linetables */
2130
2131 static void parse_lines (FDR *, PDR *, struct linetable *, int,
2132                          struct partial_symtab *, CORE_ADDR);
2133
2134 static void
2135 parse_lines (FDR *fh, PDR *pr, struct linetable *lt, int maxlines,
2136              struct partial_symtab *pst, CORE_ADDR lowest_pdr_addr)
2137 {
2138   unsigned char *base;
2139   int j, k;
2140   int delta, count, lineno = 0;
2141
2142   if (fh->cbLine == 0)
2143     return;
2144
2145   /* Scan by procedure descriptors */
2146   k = 0;
2147   for (j = 0; j < fh->cpd; j++, pr++)
2148     {
2149       CORE_ADDR l;
2150       CORE_ADDR adr;
2151       unsigned char *halt;
2152
2153       /* No code for this one */
2154       if (pr->iline == ilineNil ||
2155           pr->lnLow == -1 || pr->lnHigh == -1)
2156         continue;
2157
2158       /* Determine start and end address of compressed line bytes for
2159          this procedure.  */
2160       base = debug_info->line + fh->cbLineOffset;
2161       if (j != (fh->cpd - 1))
2162         halt = base + pr[1].cbLineOffset;
2163       else
2164         halt = base + fh->cbLine;
2165       base += pr->cbLineOffset;
2166
2167       adr = pst->textlow + pr->adr - lowest_pdr_addr;
2168
2169       l = adr >> 2;             /* in words */
2170       for (lineno = pr->lnLow; base < halt;)
2171         {
2172           count = *base & 0x0f;
2173           delta = *base++ >> 4;
2174           if (delta >= 8)
2175             delta -= 16;
2176           if (delta == -8)
2177             {
2178               delta = (base[0] << 8) | base[1];
2179               if (delta >= 0x8000)
2180                 delta -= 0x10000;
2181               base += 2;
2182             }
2183           lineno += delta;      /* first delta is 0 */
2184
2185           /* Complain if the line table overflows. Could happen
2186              with corrupt binaries.  */
2187           if (lt->nitems >= maxlines)
2188             {
2189               complaint (&symfile_complaints,
2190                          "guessed size of linetable for %s incorrectly",
2191                          fdr_name (fh));
2192               break;
2193             }
2194           k = add_line (lt, lineno, l, k);
2195           l += count + 1;
2196         }
2197     }
2198 }
2199 \f
2200 static void
2201 function_outside_compilation_unit_complaint (const char *arg1)
2202 {
2203   complaint (&symfile_complaints,
2204              "function `%s' appears to be defined outside of all compilation units",
2205              arg1);
2206 }
2207
2208 /* Master parsing procedure for first-pass reading of file symbols
2209    into a partial_symtab.  */
2210
2211 static void
2212 parse_partial_symbols (struct objfile *objfile)
2213 {
2214   const bfd_size_type external_sym_size = debug_swap->external_sym_size;
2215   const bfd_size_type external_rfd_size = debug_swap->external_rfd_size;
2216   const bfd_size_type external_ext_size = debug_swap->external_ext_size;
2217   void (*const swap_ext_in) (bfd *, void *, EXTR *) = debug_swap->swap_ext_in;
2218   void (*const swap_sym_in) (bfd *, void *, SYMR *) = debug_swap->swap_sym_in;
2219   void (*const swap_rfd_in) (bfd *, void *, RFDT *) = debug_swap->swap_rfd_in;
2220   int f_idx, s_idx;
2221   HDRR *hdr = &debug_info->symbolic_header;
2222   /* Running pointers */
2223   FDR *fh;
2224   char *ext_out;
2225   char *ext_out_end;
2226   EXTR *ext_block;
2227   EXTR *ext_in;
2228   EXTR *ext_in_end;
2229   SYMR sh;
2230   struct partial_symtab *pst;
2231   int textlow_not_set = 1;
2232   int past_first_source_file = 0;
2233
2234   /* List of current psymtab's include files */
2235   char **psymtab_include_list;
2236   int includes_allocated;
2237   int includes_used;
2238   EXTR *extern_tab;
2239   struct pst_map *fdr_to_pst;
2240   /* Index within current psymtab dependency list */
2241   struct partial_symtab **dependency_list;
2242   int dependencies_used, dependencies_allocated;
2243   struct cleanup *old_chain;
2244   char *name;
2245   enum language prev_language;
2246   asection *text_sect;
2247   int relocatable = 0;
2248
2249   /* Irix 5.2 shared libraries have a fh->adr field of zero, but
2250      the shared libraries are prelinked at a high memory address.
2251      We have to adjust the start address of the object file for this case,
2252      by setting it to the start address of the first procedure in the file.
2253      But we should do no adjustments if we are debugging a .o file, where
2254      the text section (and fh->adr) really starts at zero.  */
2255   text_sect = bfd_get_section_by_name (cur_bfd, ".text");
2256   if (text_sect != NULL
2257       && (bfd_get_section_flags (cur_bfd, text_sect) & SEC_RELOC))
2258     relocatable = 1;
2259
2260   extern_tab = (EXTR *) obstack_alloc (&objfile->psymbol_obstack,
2261                                        sizeof (EXTR) * hdr->iextMax);
2262
2263   includes_allocated = 30;
2264   includes_used = 0;
2265   psymtab_include_list = (char **) alloca (includes_allocated *
2266                                            sizeof (char *));
2267   next_symbol_text_func = mdebug_next_symbol_text;
2268
2269   dependencies_allocated = 30;
2270   dependencies_used = 0;
2271   dependency_list =
2272     (struct partial_symtab **) alloca (dependencies_allocated *
2273                                        sizeof (struct partial_symtab *));
2274
2275   last_source_file = NULL;
2276
2277   /*
2278    * Big plan:
2279    *
2280    * Only parse the Local and External symbols, and the Relative FDR.
2281    * Fixup enough of the loader symtab to be able to use it.
2282    * Allocate space only for the file's portions we need to
2283    * look at. (XXX)
2284    */
2285
2286   max_gdbinfo = 0;
2287   max_glevel = MIN_GLEVEL;
2288
2289   /* Allocate the map FDR -> PST.
2290      Minor hack: -O3 images might claim some global data belongs
2291      to FDR -1. We`ll go along with that */
2292   fdr_to_pst = (struct pst_map *) xzalloc ((hdr->ifdMax + 1) * sizeof *fdr_to_pst);
2293   old_chain = make_cleanup (xfree, fdr_to_pst);
2294   fdr_to_pst++;
2295   {
2296     struct partial_symtab *pst = new_psymtab ("", objfile);
2297     fdr_to_pst[-1].pst = pst;
2298     FDR_IDX (pst) = -1;
2299   }
2300
2301   /* Allocate the global pending list.  */
2302   pending_list =
2303     ((struct mdebug_pending **)
2304      obstack_alloc (&objfile->psymbol_obstack,
2305                     hdr->ifdMax * sizeof (struct mdebug_pending *)));
2306   memset (pending_list, 0,
2307           hdr->ifdMax * sizeof (struct mdebug_pending *));
2308
2309   /* Pass 0 over external syms: swap them in.  */
2310   ext_block = (EXTR *) xmalloc (hdr->iextMax * sizeof (EXTR));
2311   make_cleanup (xfree, ext_block);
2312
2313   ext_out = (char *) debug_info->external_ext;
2314   ext_out_end = ext_out + hdr->iextMax * external_ext_size;
2315   ext_in = ext_block;
2316   for (; ext_out < ext_out_end; ext_out += external_ext_size, ext_in++)
2317     (*swap_ext_in) (cur_bfd, ext_out, ext_in);
2318
2319   /* Pass 1 over external syms: Presize and partition the list */
2320   ext_in = ext_block;
2321   ext_in_end = ext_in + hdr->iextMax;
2322   for (; ext_in < ext_in_end; ext_in++)
2323     {
2324       /* See calls to complain below.  */
2325       if (ext_in->ifd >= -1
2326           && ext_in->ifd < hdr->ifdMax
2327           && ext_in->asym.iss >= 0
2328           && ext_in->asym.iss < hdr->issExtMax)
2329         fdr_to_pst[ext_in->ifd].n_globals++;
2330     }
2331
2332   /* Pass 1.5 over files:  partition out global symbol space */
2333   s_idx = 0;
2334   for (f_idx = -1; f_idx < hdr->ifdMax; f_idx++)
2335     {
2336       fdr_to_pst[f_idx].globals_offset = s_idx;
2337       s_idx += fdr_to_pst[f_idx].n_globals;
2338       fdr_to_pst[f_idx].n_globals = 0;
2339     }
2340
2341   /* ECOFF in ELF:
2342
2343      For ECOFF in ELF, we skip the creation of the minimal symbols.
2344      The ECOFF symbols should be a subset of the Elf symbols, and the 
2345      section information of the elf symbols will be more accurate.
2346      FIXME!  What about Irix 5's native linker?
2347
2348      By default, Elf sections which don't exist in ECOFF 
2349      get put in ECOFF's absolute section by the gnu linker.
2350      Since absolute sections don't get relocated, we 
2351      end up calculating an address different from that of 
2352      the symbol's minimal symbol (created earlier from the
2353      Elf symtab).  
2354
2355      To fix this, either :
2356      1) don't create the duplicate symbol
2357      (assumes ECOFF symtab is a subset of the ELF symtab;
2358      assumes no side-effects result from ignoring ECOFF symbol)
2359      2) create it, only if lookup for existing symbol in ELF's minimal 
2360      symbols fails
2361      (inefficient; 
2362      assumes no side-effects result from ignoring ECOFF symbol)
2363      3) create it, but lookup ELF's minimal symbol and use it's section
2364      during relocation, then modify "uniqify" phase to merge and 
2365      eliminate the duplicate symbol
2366      (highly inefficient)
2367
2368      I've implemented #1 here...
2369      Skip the creation of the minimal symbols based on the ECOFF 
2370      symbol table. */
2371
2372   /* Pass 2 over external syms: fill in external symbols */
2373   ext_in = ext_block;
2374   ext_in_end = ext_in + hdr->iextMax;
2375   for (; ext_in < ext_in_end; ext_in++)
2376     {
2377       enum minimal_symbol_type ms_type = mst_text;
2378       CORE_ADDR svalue = ext_in->asym.value;
2379
2380       /* The Irix 5 native tools seem to sometimes generate bogus
2381          external symbols.  */
2382       if (ext_in->ifd < -1 || ext_in->ifd >= hdr->ifdMax)
2383         {
2384           complaint (&symfile_complaints,
2385                      "bad ifd for external symbol: %d (max %ld)", ext_in->ifd,
2386                      hdr->ifdMax);
2387           continue;
2388         }
2389       if (ext_in->asym.iss < 0 || ext_in->asym.iss >= hdr->issExtMax)
2390         {
2391           complaint (&symfile_complaints,
2392                      "bad iss for external symbol: %ld (max %ld)",
2393                      ext_in->asym.iss, hdr->issExtMax);
2394           continue;
2395         }
2396
2397       extern_tab[fdr_to_pst[ext_in->ifd].globals_offset
2398                  + fdr_to_pst[ext_in->ifd].n_globals++] = *ext_in;
2399
2400
2401       if (SC_IS_UNDEF (ext_in->asym.sc) || ext_in->asym.sc == scNil)
2402         continue;
2403
2404
2405       /* Pass 3 over files, over local syms: fill in static symbols */
2406       name = debug_info->ssext + ext_in->asym.iss;
2407
2408       /* Process ECOFF Symbol Types and Storage Classes */
2409       switch (ext_in->asym.st)
2410         {
2411         case stProc:
2412           /* Beginnning of Procedure */
2413           svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2414           break;
2415         case stStaticProc:
2416           /* Load time only static procs */
2417           ms_type = mst_file_text;
2418           svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2419           break;
2420         case stGlobal:
2421           /* External symbol */
2422           if (SC_IS_COMMON (ext_in->asym.sc))
2423             {
2424               /* The value of a common symbol is its size, not its address.
2425                  Ignore it.  */
2426               continue;
2427             }
2428           else if (SC_IS_DATA (ext_in->asym.sc))
2429             {
2430               ms_type = mst_data;
2431               svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
2432             }
2433           else if (SC_IS_BSS (ext_in->asym.sc))
2434             {
2435               ms_type = mst_bss;
2436               svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
2437             }
2438           else if (SC_IS_SBSS (ext_in->asym.sc))
2439             {
2440               ms_type = mst_bss;
2441               svalue += ANOFFSET (objfile->section_offsets, 
2442                                   get_section_index (objfile, ".sbss"));
2443             }
2444           else
2445             ms_type = mst_abs;
2446           break;
2447         case stLabel:
2448           /* Label */
2449
2450           /* On certain platforms, some extra label symbols can be
2451              generated by the linker. One possible usage for this kind
2452              of symbols is to represent the address of the begining of a
2453              given section. For instance, on Tru64 5.1, the address of
2454              the _ftext label is the start address of the .text section.
2455
2456              The storage class of these symbols is usually directly
2457              related to the section to which the symbol refers. For
2458              instance, on Tru64 5.1, the storage class for the _fdata
2459              label is scData, refering to the .data section.
2460
2461              It is actually possible that the section associated to the
2462              storage class of the label does not exist. On True64 5.1
2463              for instance, the libm.so shared library does not contain
2464              any .data section, although it contains a _fpdata label
2465              which storage class is scData... Since these symbols are
2466              usually useless for the debugger user anyway, we just
2467              discard these symbols.
2468            */
2469           
2470           if (SC_IS_TEXT (ext_in->asym.sc))
2471             {
2472               if (objfile->sect_index_text == -1)
2473                 continue;
2474                 
2475               ms_type = mst_file_text;
2476               svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2477             }
2478           else if (SC_IS_DATA (ext_in->asym.sc))
2479             {
2480               if (objfile->sect_index_data == -1)
2481                 continue;
2482
2483               ms_type = mst_file_data;
2484               svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
2485             }
2486           else if (SC_IS_BSS (ext_in->asym.sc))
2487             {
2488               if (objfile->sect_index_bss == -1)
2489                 continue;
2490
2491               ms_type = mst_file_bss;
2492               svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
2493             }
2494           else if (SC_IS_SBSS (ext_in->asym.sc))
2495             {
2496               const int sbss_sect_index = get_section_index (objfile, ".sbss");
2497
2498               if (sbss_sect_index == -1)
2499                 continue;
2500
2501               ms_type = mst_file_bss;
2502               svalue += ANOFFSET (objfile->section_offsets, sbss_sect_index);
2503             }
2504           else
2505             ms_type = mst_abs;
2506           break;
2507         case stLocal:
2508         case stNil:
2509           /* The alpha has the section start addresses in stLocal symbols
2510              whose name starts with a `.'. Skip those but complain for all
2511              other stLocal symbols.
2512              Irix6 puts the section start addresses in stNil symbols, skip
2513              those too. */
2514           if (name[0] == '.')
2515             continue;
2516           /* Fall through.  */
2517         default:
2518           ms_type = mst_unknown;
2519           unknown_ext_complaint (name);
2520         }
2521       if (!ECOFF_IN_ELF (cur_bfd))
2522         prim_record_minimal_symbol (name, svalue, ms_type, objfile);
2523     }
2524
2525   /* Pass 3 over files, over local syms: fill in static symbols */
2526   for (f_idx = 0; f_idx < hdr->ifdMax; f_idx++)
2527     {
2528       struct partial_symtab *save_pst;
2529       EXTR *ext_ptr;
2530       CORE_ADDR textlow;
2531
2532       cur_fdr = fh = debug_info->fdr + f_idx;
2533
2534       if (fh->csym == 0)
2535         {
2536           fdr_to_pst[f_idx].pst = NULL;
2537           continue;
2538         }
2539
2540       /* Determine the start address for this object file from the
2541          file header and relocate it, except for Irix 5.2 zero fh->adr.  */
2542       if (fh->cpd)
2543         {
2544           textlow = fh->adr;
2545           if (relocatable || textlow != 0)
2546             textlow += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2547         }
2548       else
2549         textlow = 0;
2550       pst = start_psymtab_common (objfile, objfile->section_offsets,
2551                                   fdr_name (fh),
2552                                   textlow,
2553                                   objfile->global_psymbols.next,
2554                                   objfile->static_psymbols.next);
2555       pst->read_symtab_private = ((char *)
2556                                   obstack_alloc (&objfile->psymbol_obstack,
2557                                                  sizeof (struct symloc)));
2558       memset (pst->read_symtab_private, 0, sizeof (struct symloc));
2559
2560       save_pst = pst;
2561       FDR_IDX (pst) = f_idx;
2562       CUR_BFD (pst) = cur_bfd;
2563       DEBUG_SWAP (pst) = debug_swap;
2564       DEBUG_INFO (pst) = debug_info;
2565       PENDING_LIST (pst) = pending_list;
2566
2567       /* The way to turn this into a symtab is to call... */
2568       pst->read_symtab = mdebug_psymtab_to_symtab;
2569
2570       /* Set up language for the pst.
2571          The language from the FDR is used if it is unambigious (e.g. cfront
2572          with native cc and g++ will set the language to C).
2573          Otherwise we have to deduce the language from the filename.
2574          Native ecoff has every header file in a separate FDR, so
2575          deduce_language_from_filename will return language_unknown for
2576          a header file, which is not what we want.
2577          But the FDRs for the header files are after the FDR for the source
2578          file, so we can assign the language of the source file to the
2579          following header files. Then we save the language in the private
2580          pst data so that we can reuse it when building symtabs.  */
2581       prev_language = psymtab_language;
2582
2583       switch (fh->lang)
2584         {
2585         case langCplusplusV2:
2586           psymtab_language = language_cplus;
2587           break;
2588         default:
2589           psymtab_language = deduce_language_from_filename (fdr_name (fh));
2590           break;
2591         }
2592       if (psymtab_language == language_unknown)
2593         psymtab_language = prev_language;
2594       PST_PRIVATE (pst)->pst_language = psymtab_language;
2595
2596       pst->texthigh = pst->textlow;
2597
2598       /* For stabs-in-ecoff files, the second symbol must be @stab.
2599          This symbol is emitted by mips-tfile to signal that the
2600          current object file uses encapsulated stabs instead of mips
2601          ecoff for local symbols.  (It is the second symbol because
2602          the first symbol is the stFile used to signal the start of a
2603          file). */
2604       processing_gcc_compilation = 0;
2605       if (fh->csym >= 2)
2606         {
2607           (*swap_sym_in) (cur_bfd,
2608                           ((char *) debug_info->external_sym
2609                            + (fh->isymBase + 1) * external_sym_size),
2610                           &sh);
2611           if (STREQ (debug_info->ss + fh->issBase + sh.iss, stabs_symbol))
2612             processing_gcc_compilation = 2;
2613         }
2614
2615       if (processing_gcc_compilation != 0)
2616         {
2617           for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
2618             {
2619               int type_code;
2620               char *namestring;
2621
2622               (*swap_sym_in) (cur_bfd,
2623                               (((char *) debug_info->external_sym)
2624                             + (fh->isymBase + cur_sdx) * external_sym_size),
2625                               &sh);
2626               type_code = ECOFF_UNMARK_STAB (sh.index);
2627               if (!ECOFF_IS_STAB (&sh))
2628                 {
2629                   if (sh.st == stProc || sh.st == stStaticProc)
2630                     {
2631                       CORE_ADDR procaddr;
2632                       long isym;
2633
2634                       sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2635                       if (sh.st == stStaticProc)
2636                         {
2637                           namestring = debug_info->ss + fh->issBase + sh.iss;
2638                           prim_record_minimal_symbol_and_info (namestring,
2639                                                                sh.value,
2640                                                                mst_file_text,
2641                                                                NULL,
2642                                                                SECT_OFF_TEXT (objfile),
2643                                                                NULL,
2644                                                                objfile);
2645                         }
2646                       procaddr = sh.value;
2647
2648                       isym = AUX_GET_ISYM (fh->fBigendian,
2649                                            (debug_info->external_aux
2650                                             + fh->iauxBase
2651                                             + sh.index));
2652                       (*swap_sym_in) (cur_bfd,
2653                                       ((char *) debug_info->external_sym
2654                                        + ((fh->isymBase + isym - 1)
2655                                           * external_sym_size)),
2656                                       &sh);
2657                       if (sh.st == stEnd)
2658                         {
2659                           CORE_ADDR high = procaddr + sh.value;
2660
2661                           /* Kludge for Irix 5.2 zero fh->adr.  */
2662                           if (!relocatable
2663                           && (pst->textlow == 0 || procaddr < pst->textlow))
2664                             pst->textlow = procaddr;
2665                           if (high > pst->texthigh)
2666                             pst->texthigh = high;
2667                         }
2668                     }
2669                   else if (sh.st == stStatic)
2670                     {
2671                       switch (sh.sc)
2672                         {
2673                         case scUndefined:
2674                         case scSUndefined:
2675                         case scNil:
2676                         case scAbs:
2677                           break;
2678
2679                         case scData:
2680                         case scSData:
2681                         case scRData:
2682                         case scPData:
2683                         case scXData:
2684                           namestring = debug_info->ss + fh->issBase + sh.iss;
2685                           sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
2686                           prim_record_minimal_symbol_and_info (namestring,
2687                                                                sh.value,
2688                                                                mst_file_data,
2689                                                                NULL,
2690                                                                SECT_OFF_DATA (objfile),
2691                                                                NULL,
2692                                                                objfile);
2693                           break;
2694
2695                         default:
2696                           /* FIXME!  Shouldn't this use cases for bss, 
2697                              then have the default be abs? */
2698                           namestring = debug_info->ss + fh->issBase + sh.iss;
2699                           sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
2700                           prim_record_minimal_symbol_and_info (namestring,
2701                                                                sh.value,
2702                                                                mst_file_bss,
2703                                                                NULL,
2704                                                                SECT_OFF_BSS (objfile),
2705                                                                NULL,
2706                                                                objfile);
2707                           break;
2708                         }
2709                     }
2710                   continue;
2711                 }
2712               /* Handle stabs continuation */
2713               {
2714                 char *stabstring = debug_info->ss + fh->issBase + sh.iss;
2715                 int len = strlen (stabstring);
2716                 while (stabstring[len - 1] == '\\')
2717                   {
2718                     SYMR sh2;
2719                     char *stabstring1 = stabstring;
2720                     char *stabstring2;
2721                     int len2;
2722
2723                     /* Ignore continuation char from 1st string */
2724                     len--;
2725
2726                     /* Read next stabstring */
2727                     cur_sdx++;
2728                     (*swap_sym_in) (cur_bfd,
2729                                     (((char *) debug_info->external_sym)
2730                                      + (fh->isymBase + cur_sdx)
2731                                      * external_sym_size),
2732                                     &sh2);
2733                     stabstring2 = debug_info->ss + fh->issBase + sh2.iss;
2734                     len2 = strlen (stabstring2);
2735
2736                     /* Concatinate stabstring2 with stabstring1 */
2737                     if (stabstring
2738                      && stabstring != debug_info->ss + fh->issBase + sh.iss)
2739                       stabstring = xrealloc (stabstring, len + len2 + 1);
2740                     else
2741                       {
2742                         stabstring = xmalloc (len + len2 + 1);
2743                         strcpy (stabstring, stabstring1);
2744                       }
2745                     strcpy (stabstring + len, stabstring2);
2746                     len += len2;
2747                   }
2748
2749                 switch (type_code)
2750                   {
2751                     char *p;
2752                     /*
2753                      * Standard, external, non-debugger, symbols
2754                      */
2755
2756                   case N_TEXT | N_EXT:
2757                   case N_NBTEXT | N_EXT:
2758                     sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2759                     goto record_it;
2760
2761                   case N_DATA | N_EXT:
2762                   case N_NBDATA | N_EXT:
2763                     sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
2764                     goto record_it;
2765
2766                   case N_BSS:
2767                   case N_BSS | N_EXT:
2768                   case N_NBBSS | N_EXT:
2769                   case N_SETV | N_EXT:          /* FIXME, is this in BSS? */
2770                     sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
2771                     goto record_it;
2772
2773                   case N_ABS | N_EXT:
2774                   record_it:
2775                   continue;
2776
2777                   /* Standard, local, non-debugger, symbols */
2778
2779                   case N_NBTEXT:
2780
2781                     /* We need to be able to deal with both N_FN or N_TEXT,
2782                        because we have no way of knowing whether the sys-supplied ld
2783                        or GNU ld was used to make the executable.  Sequents throw
2784                        in another wrinkle -- they renumbered N_FN.  */
2785
2786                   case N_FN:
2787                   case N_FN_SEQ:
2788                   case N_TEXT:
2789                     continue;
2790
2791                   case N_DATA:
2792                     sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
2793                     goto record_it;
2794
2795                   case N_UNDF | N_EXT:
2796                     continue;                   /* Just undefined, not COMMON */
2797
2798                   case N_UNDF:
2799                     continue;
2800
2801                     /* Lots of symbol types we can just ignore.  */
2802
2803                   case N_ABS:
2804                   case N_NBDATA:
2805                   case N_NBBSS:
2806                     continue;
2807
2808                     /* Keep going . . . */
2809
2810                     /*
2811                      * Special symbol types for GNU
2812                      */
2813                   case N_INDR:
2814                   case N_INDR | N_EXT:
2815                   case N_SETA:
2816                   case N_SETA | N_EXT:
2817                   case N_SETT:
2818                   case N_SETT | N_EXT:
2819                   case N_SETD:
2820                   case N_SETD | N_EXT:
2821                   case N_SETB:
2822                   case N_SETB | N_EXT:
2823                   case N_SETV:
2824                     continue;
2825
2826                     /*
2827                      * Debugger symbols
2828                      */
2829
2830                   case N_SO:
2831                     {
2832                       CORE_ADDR valu;
2833                       static int prev_so_symnum = -10;
2834                       static int first_so_symnum;
2835                       char *p;
2836                       int prev_textlow_not_set;
2837
2838                       valu = sh.value + ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2839
2840                       prev_textlow_not_set = textlow_not_set;
2841
2842 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
2843                       /* A zero value is probably an indication for the SunPRO 3.0
2844                          compiler. end_psymtab explicitly tests for zero, so
2845                          don't relocate it.  */
2846
2847                       if (sh.value == 0)
2848                         {
2849                           textlow_not_set = 1;
2850                           valu = 0;
2851                         }
2852                       else
2853                         textlow_not_set = 0;
2854 #else
2855                       textlow_not_set = 0;
2856 #endif
2857                       past_first_source_file = 1;
2858
2859                       if (prev_so_symnum != symnum - 1)
2860                         {                       /* Here if prev stab wasn't N_SO */
2861                           first_so_symnum = symnum;
2862
2863                           if (pst)
2864                             {
2865                               pst = (struct partial_symtab *) 0;
2866                               includes_used = 0;
2867                               dependencies_used = 0;
2868                             }
2869                         }
2870
2871                       prev_so_symnum = symnum;
2872
2873                       /* End the current partial symtab and start a new one */
2874
2875                       /* SET_NAMESTRING ();*/
2876                       namestring = stabstring;
2877
2878                       /* Null name means end of .o file.  Don't start a new one. */
2879                       if (*namestring == '\000')
2880                         continue;
2881
2882                       /* Some compilers (including gcc) emit a pair of initial N_SOs.
2883                          The first one is a directory name; the second the file name.
2884                          If pst exists, is empty, and has a filename ending in '/',
2885                          we assume the previous N_SO was a directory name. */
2886
2887                       p = strrchr (namestring, '/');
2888                       if (p && *(p + 1) == '\000')
2889                         continue;               /* Simply ignore directory name SOs */
2890
2891                       /* Some other compilers (C++ ones in particular) emit useless
2892                          SOs for non-existant .c files.  We ignore all subsequent SOs that
2893                          immediately follow the first.  */
2894
2895                       if (!pst)
2896                         pst = save_pst;
2897                       continue;
2898                     }
2899
2900                   case N_BINCL:
2901                     continue;
2902
2903                   case N_SOL:
2904                     {
2905                       enum language tmp_language;
2906                       /* Mark down an include file in the current psymtab */
2907
2908                       /* SET_NAMESTRING ();*/
2909                       namestring = stabstring;
2910
2911                       tmp_language = deduce_language_from_filename (namestring);
2912
2913                       /* Only change the psymtab's language if we've learned
2914                          something useful (eg. tmp_language is not language_unknown).
2915                          In addition, to match what start_subfile does, never change
2916                          from C++ to C.  */
2917                       if (tmp_language != language_unknown
2918                           && (tmp_language != language_c
2919                               || psymtab_language != language_cplus))
2920                         psymtab_language = tmp_language;
2921
2922                       /* In C++, one may expect the same filename to come round many
2923                          times, when code is coming alternately from the main file
2924                          and from inline functions in other files. So I check to see
2925                          if this is a file we've seen before -- either the main
2926                          source file, or a previously included file.
2927
2928                          This seems to be a lot of time to be spending on N_SOL, but
2929                          things like "break c-exp.y:435" need to work (I
2930                          suppose the psymtab_include_list could be hashed or put
2931                          in a binary tree, if profiling shows this is a major hog).  */
2932                       if (pst && STREQ (namestring, pst->filename))
2933                         continue;
2934                       {
2935                         int i;
2936                         for (i = 0; i < includes_used; i++)
2937                           if (STREQ (namestring, psymtab_include_list[i]))
2938                             {
2939                               i = -1;
2940                               break;
2941                             }
2942                         if (i == -1)
2943                           continue;
2944                       }
2945
2946                       psymtab_include_list[includes_used++] = namestring;
2947                       if (includes_used >= includes_allocated)
2948                         {
2949                           char **orig = psymtab_include_list;
2950
2951                           psymtab_include_list = (char **)
2952                             alloca ((includes_allocated *= 2) *
2953                                     sizeof (char *));
2954                           memcpy (psymtab_include_list, orig,
2955                                   includes_used * sizeof (char *));
2956                         }
2957                       continue;
2958                     }
2959                   case N_LSYM:                  /* Typedef or automatic variable. */
2960                   case N_STSYM:         /* Data seg var -- static  */
2961                   case N_LCSYM:         /* BSS      "  */
2962                   case N_ROSYM:         /* Read-only data seg var -- static.  */
2963                   case N_NBSTS:         /* Gould nobase.  */
2964                   case N_NBLCS:         /* symbols.  */
2965                   case N_FUN:
2966                   case N_GSYM:                  /* Global (extern) variable; can be
2967                                                    data or bss (sigh FIXME).  */
2968
2969                     /* Following may probably be ignored; I'll leave them here
2970                        for now (until I do Pascal and Modula 2 extensions).  */
2971
2972                   case N_PC:                    /* I may or may not need this; I
2973                                                    suspect not.  */
2974                   case N_M2C:                   /* I suspect that I can ignore this here. */
2975                   case N_SCOPE:         /* Same.   */
2976
2977                     /*    SET_NAMESTRING ();*/
2978                     namestring = stabstring;
2979                     p = (char *) strchr (namestring, ':');
2980                     if (!p)
2981                       continue;                 /* Not a debugging symbol.   */
2982
2983
2984
2985                     /* Main processing section for debugging symbols which
2986                        the initial read through the symbol tables needs to worry
2987                        about.  If we reach this point, the symbol which we are
2988                        considering is definitely one we are interested in.
2989                        p must also contain the (valid) index into the namestring
2990                        which indicates the debugging type symbol.  */
2991
2992                     switch (p[1])
2993                       {
2994                       case 'S':
2995                         sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
2996 #ifdef STATIC_TRANSFORM_NAME
2997                         namestring = STATIC_TRANSFORM_NAME (namestring);
2998 #endif
2999                         add_psymbol_to_list (namestring, p - namestring,
3000                                              VAR_DOMAIN, LOC_STATIC,
3001                                              &objfile->static_psymbols,
3002                                              0, sh.value,
3003                                              psymtab_language, objfile);
3004                         continue;
3005                       case 'G':
3006                         sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
3007                         /* The addresses in these entries are reported to be
3008                            wrong.  See the code that reads 'G's for symtabs. */
3009                         add_psymbol_to_list (namestring, p - namestring,
3010                                              VAR_DOMAIN, LOC_STATIC,
3011                                              &objfile->global_psymbols,
3012                                              0, sh.value,
3013                                              psymtab_language, objfile);
3014                         continue;
3015
3016                       case 'T':
3017                         /* When a 'T' entry is defining an anonymous enum, it
3018                            may have a name which is the empty string, or a
3019                            single space.  Since they're not really defining a
3020                            symbol, those shouldn't go in the partial symbol
3021                            table.  We do pick up the elements of such enums at
3022                            'check_enum:', below.  */
3023                         if (p >= namestring + 2
3024                             || (p == namestring + 1
3025                                 && namestring[0] != ' '))
3026                           {
3027                             add_psymbol_to_list (namestring, p - namestring,
3028                                                  STRUCT_DOMAIN, LOC_TYPEDEF,
3029                                                  &objfile->static_psymbols,
3030                                                  sh.value, 0,
3031                                                  psymtab_language, objfile);
3032                             if (p[2] == 't')
3033                               {
3034                                 /* Also a typedef with the same name.  */
3035                                 add_psymbol_to_list (namestring, p - namestring,
3036                                                      VAR_DOMAIN, LOC_TYPEDEF,
3037                                                      &objfile->static_psymbols,
3038                                                      sh.value, 0,
3039                                                      psymtab_language, objfile);
3040                                 p += 1;
3041                               }
3042                           }
3043                         goto check_enum;
3044                       case 't':
3045                         if (p != namestring)    /* a name is there, not just :T... */
3046                           {
3047                             add_psymbol_to_list (namestring, p - namestring,
3048                                                  VAR_DOMAIN, LOC_TYPEDEF,
3049                                                  &objfile->static_psymbols,
3050                                                  sh.value, 0,
3051                                                  psymtab_language, objfile);
3052                           }
3053                       check_enum:
3054                         /* If this is an enumerated type, we need to
3055                            add all the enum constants to the partial symbol
3056                            table.  This does not cover enums without names, e.g.
3057                            "enum {a, b} c;" in C, but fortunately those are
3058                            rare.  There is no way for GDB to find those from the
3059                            enum type without spending too much time on it.  Thus
3060                            to solve this problem, the compiler needs to put out the
3061                            enum in a nameless type.  GCC2 does this.  */
3062
3063                         /* We are looking for something of the form
3064                            <name> ":" ("t" | "T") [<number> "="] "e"
3065                            {<constant> ":" <value> ","} ";".  */
3066
3067                         /* Skip over the colon and the 't' or 'T'.  */
3068                         p += 2;
3069                         /* This type may be given a number.  Also, numbers can come
3070                            in pairs like (0,26).  Skip over it.  */
3071                         while ((*p >= '0' && *p <= '9')
3072                                || *p == '(' || *p == ',' || *p == ')'
3073                                || *p == '=')
3074                           p++;
3075
3076                         if (*p++ == 'e')
3077                           {
3078                             /* The aix4 compiler emits extra crud before the members.  */
3079                             if (*p == '-')
3080                               {
3081                                 /* Skip over the type (?).  */
3082                                 while (*p != ':')
3083                                   p++;
3084
3085                                 /* Skip over the colon.  */
3086                                 p++;
3087                               }
3088
3089                             /* We have found an enumerated type.  */
3090                             /* According to comments in read_enum_type
3091                                a comma could end it instead of a semicolon.
3092                                I don't know where that happens.
3093                                Accept either.  */
3094                             while (*p && *p != ';' && *p != ',')
3095                               {
3096                                 char *q;
3097
3098                                 /* Check for and handle cretinous dbx symbol name
3099                                    continuation!  */
3100                                 if (*p == '\\' || (*p == '?' && p[1] == '\0'))
3101                                   p = next_symbol_text (objfile);
3102
3103                                 /* Point to the character after the name
3104                                    of the enum constant.  */
3105                                 for (q = p; *q && *q != ':'; q++)
3106                                   ;
3107                                 /* Note that the value doesn't matter for
3108                                    enum constants in psymtabs, just in symtabs.  */
3109                                 add_psymbol_to_list (p, q - p,
3110                                                      VAR_DOMAIN, LOC_CONST,
3111                                                      &objfile->static_psymbols, 0,
3112                                                      0, psymtab_language, objfile);
3113                                 /* Point past the name.  */
3114                                 p = q;
3115                                 /* Skip over the value.  */
3116                                 while (*p && *p != ',')
3117                                   p++;
3118                                 /* Advance past the comma.  */
3119                                 if (*p)
3120                                   p++;
3121                               }
3122                           }
3123                         continue;
3124                       case 'c':
3125                         /* Constant, e.g. from "const" in Pascal.  */
3126                         add_psymbol_to_list (namestring, p - namestring,
3127                                              VAR_DOMAIN, LOC_CONST,
3128                                              &objfile->static_psymbols, sh.value,
3129                                              0, psymtab_language, objfile);
3130                         continue;
3131
3132                       case 'f':
3133                         if (! pst)
3134                           {
3135                             int name_len = p - namestring;
3136                             char *name = xmalloc (name_len + 1);
3137                             memcpy (name, namestring, name_len);
3138                             name[name_len] = '\0';
3139                             function_outside_compilation_unit_complaint (name);
3140                             xfree (name);
3141                           }
3142                         sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
3143                         add_psymbol_to_list (namestring, p - namestring,
3144                                              VAR_DOMAIN, LOC_BLOCK,
3145                                              &objfile->static_psymbols,
3146                                              0, sh.value,
3147                                              psymtab_language, objfile);
3148                         continue;
3149
3150                         /* Global functions were ignored here, but now they
3151                            are put into the global psymtab like one would expect.
3152                            They're also in the minimal symbol table.  */
3153                       case 'F':
3154                         if (! pst)
3155                           {
3156                             int name_len = p - namestring;
3157                             char *name = xmalloc (name_len + 1);
3158                             memcpy (name, namestring, name_len);
3159                             name[name_len] = '\0';
3160                             function_outside_compilation_unit_complaint (name);
3161                             xfree (name);
3162                           }
3163                         sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
3164                         add_psymbol_to_list (namestring, p - namestring,
3165                                              VAR_DOMAIN, LOC_BLOCK,
3166                                              &objfile->global_psymbols,
3167                                              0, sh.value,
3168                                              psymtab_language, objfile);
3169                         continue;
3170
3171                         /* Two things show up here (hopefully); static symbols of
3172                            local scope (static used inside braces) or extensions
3173                            of structure symbols.  We can ignore both.  */
3174                       case 'V':
3175                       case '(':
3176                       case '0':
3177                       case '1':
3178                       case '2':
3179                       case '3':
3180                       case '4':
3181                       case '5':
3182                       case '6':
3183                       case '7':
3184                       case '8':
3185                       case '9':
3186                       case '-':
3187                       case '#':         /* for symbol identification (used in live ranges) */
3188                         continue;
3189
3190                       case ':':
3191                         /* It is a C++ nested symbol.  We don't need to record it
3192                            (I don't think); if we try to look up foo::bar::baz,
3193                            then symbols for the symtab containing foo should get
3194                            read in, I think.  */
3195                         /* Someone says sun cc puts out symbols like
3196                            /foo/baz/maclib::/usr/local/bin/maclib,
3197                            which would get here with a symbol type of ':'.  */
3198                         continue;
3199
3200                       default:
3201                         /* Unexpected symbol descriptor.  The second and subsequent stabs
3202                            of a continued stab can show up here.  The question is
3203                            whether they ever can mimic a normal stab--it would be
3204                            nice if not, since we certainly don't want to spend the
3205                            time searching to the end of every string looking for
3206                            a backslash.  */
3207
3208                         complaint (&symfile_complaints,
3209                                    "unknown symbol descriptor `%c'", p[1]);
3210
3211                         /* Ignore it; perhaps it is an extension that we don't
3212                            know about.  */
3213                         continue;
3214                       }
3215
3216                   case N_EXCL:
3217                     continue;
3218
3219                   case N_ENDM:
3220 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
3221                     /* Solaris 2 end of module, finish current partial
3222                        symbol table.  END_PSYMTAB will set
3223                        pst->texthigh to the proper value, which is
3224                        necessary if a module compiled without
3225                        debugging info follows this module.  */
3226                     if (pst)
3227                       {
3228                         pst = (struct partial_symtab *) 0;
3229                         includes_used = 0;
3230                         dependencies_used = 0;
3231                       }
3232 #endif
3233                     continue;
3234
3235                   case N_RBRAC:
3236                     if (sh.value > save_pst->texthigh)
3237                       save_pst->texthigh = sh.value;
3238                     continue;
3239                   case N_EINCL:
3240                   case N_DSLINE:
3241                   case N_BSLINE:
3242                   case N_SSYM:                  /* Claim: Structure or union element.
3243                                                    Hopefully, I can ignore this.  */
3244                   case N_ENTRY:         /* Alternate entry point; can ignore. */
3245                   case N_MAIN:                  /* Can definitely ignore this.   */
3246                   case N_CATCH:         /* These are GNU C++ extensions */
3247                   case N_EHDECL:                /* that can safely be ignored here. */
3248                   case N_LENG:
3249                   case N_BCOMM:
3250                   case N_ECOMM:
3251                   case N_ECOML:
3252                   case N_FNAME:
3253                   case N_SLINE:
3254                   case N_RSYM:
3255                   case N_PSYM:
3256                   case N_LBRAC:
3257                   case N_NSYMS:         /* Ultrix 4.0: symbol count */
3258                   case N_DEFD:                  /* GNU Modula-2 */
3259                   case N_ALIAS:         /* SunPro F77: alias name, ignore for now.  */
3260
3261                   case N_OBJ:                   /* useless types from Solaris */
3262                   case N_OPT:
3263                     /* These symbols aren't interesting; don't worry about them */
3264
3265                     continue;
3266
3267                   default:
3268                     /* If we haven't found it yet, ignore it.  It's probably some
3269                        new type we don't know about yet.  */
3270                     complaint (&symfile_complaints, "unknown symbol type %s",
3271                                local_hex_string (type_code)); /*CUR_SYMBOL_TYPE*/
3272                     continue;
3273                   }
3274                 if (stabstring
3275                     && stabstring != debug_info->ss + fh->issBase + sh.iss)
3276                   xfree (stabstring);
3277               }
3278               /* end - Handle continuation */
3279             }
3280         }
3281       else
3282         {
3283           for (cur_sdx = 0; cur_sdx < fh->csym;)
3284             {
3285               char *name;
3286               enum address_class class;
3287
3288               (*swap_sym_in) (cur_bfd,
3289                               ((char *) debug_info->external_sym
3290                                + ((fh->isymBase + cur_sdx)
3291                                   * external_sym_size)),
3292                               &sh);
3293
3294               if (ECOFF_IS_STAB (&sh))
3295                 {
3296                   cur_sdx++;
3297                   continue;
3298                 }
3299
3300               /* Non absolute static symbols go into the minimal table.  */
3301               if (SC_IS_UNDEF (sh.sc) || sh.sc == scNil
3302                   || (sh.index == indexNil
3303                       && (sh.st != stStatic || sh.sc == scAbs)))
3304                 {
3305                   /* FIXME, premature? */
3306                   cur_sdx++;
3307                   continue;
3308                 }
3309
3310               name = debug_info->ss + fh->issBase + sh.iss;
3311
3312               switch (sh.sc)
3313                 {
3314                 case scText:
3315                 case scRConst:
3316                   /* The value of a stEnd symbol is the displacement from the
3317                      corresponding start symbol value, do not relocate it.  */
3318                   if (sh.st != stEnd)
3319                     sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
3320                   break;
3321                 case scData:
3322                 case scSData:
3323                 case scRData:
3324                 case scPData:
3325                 case scXData:
3326                   sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
3327                   break;
3328                 case scBss:
3329                 case scSBss:
3330                   sh.value += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
3331                   break;
3332                 }
3333
3334               switch (sh.st)
3335                 {
3336                   CORE_ADDR high;
3337                   CORE_ADDR procaddr;
3338                   int new_sdx;
3339
3340                 case stStaticProc:
3341                   prim_record_minimal_symbol_and_info (name, sh.value,
3342                                                        mst_file_text, NULL,
3343                                                        SECT_OFF_TEXT (objfile), NULL,
3344                                                        objfile);
3345
3346                   /* FALLTHROUGH */
3347
3348                 case stProc:
3349                   /* Ignore all parameter symbol records.  */
3350                   if (sh.index >= hdr->iauxMax)
3351                     {
3352                       /* Should not happen, but does when cross-compiling
3353                          with the MIPS compiler.  FIXME -- pull later.  */
3354                       index_complaint (name);
3355                       new_sdx = cur_sdx + 1;    /* Don't skip at all */
3356                     }
3357                   else
3358                     new_sdx = AUX_GET_ISYM (fh->fBigendian,
3359                                             (debug_info->external_aux
3360                                              + fh->iauxBase
3361                                              + sh.index));
3362
3363                   if (new_sdx <= cur_sdx)
3364                     {
3365                       /* This should not happen either... FIXME.  */
3366                       complaint (&symfile_complaints,
3367                                  "bad proc end in aux found from symbol %s",
3368                                  name);
3369                       new_sdx = cur_sdx + 1;    /* Don't skip backward */
3370                     }
3371
3372                   /* For stProc symbol records, we need to check the
3373                      storage class as well, as only (stProc, scText)
3374                      entries represent "real" procedures - See the
3375                      Compaq document titled "Object File / Symbol Table
3376                      Format Specification" for more information.  If the
3377                      storage class is not scText, we discard the whole
3378                      block of symbol records for this stProc.  */
3379                   if (sh.st == stProc && sh.sc != scText)
3380                     goto skip;
3381
3382                   /* Usually there is a local and a global stProc symbol
3383                      for a function. This means that the function name
3384                      has already been entered into the mimimal symbol table
3385                      while processing the global symbols in pass 2 above.
3386                      One notable exception is the PROGRAM name from
3387                      f77 compiled executables, it is only put out as
3388                      local stProc symbol, and a global MAIN__ stProc symbol
3389                      points to it.  It doesn't matter though, as gdb is
3390                      still able to find the PROGRAM name via the partial
3391                      symbol table, and the MAIN__ symbol via the minimal
3392                      symbol table.  */
3393                   if (sh.st == stProc)
3394                     add_psymbol_to_list (name, strlen (name),
3395                                          VAR_DOMAIN, LOC_BLOCK,
3396                                          &objfile->global_psymbols,
3397                                     0, sh.value, psymtab_language, objfile);
3398                   else
3399                     add_psymbol_to_list (name, strlen (name),
3400                                          VAR_DOMAIN, LOC_BLOCK,
3401                                          &objfile->static_psymbols,
3402                                     0, sh.value, psymtab_language, objfile);
3403
3404                   procaddr = sh.value;
3405
3406                   cur_sdx = new_sdx;
3407                   (*swap_sym_in) (cur_bfd,
3408                                   ((char *) debug_info->external_sym
3409                                    + ((fh->isymBase + cur_sdx - 1)
3410                                       * external_sym_size)),
3411                                   &sh);
3412                   if (sh.st != stEnd)
3413                     continue;
3414
3415                   /* Kludge for Irix 5.2 zero fh->adr.  */
3416                   if (!relocatable
3417                       && (pst->textlow == 0 || procaddr < pst->textlow))
3418                     pst->textlow = procaddr;
3419
3420                   high = procaddr + sh.value;
3421                   if (high > pst->texthigh)
3422                     pst->texthigh = high;
3423                   continue;
3424
3425                 case stStatic:  /* Variable */
3426                   if (SC_IS_DATA (sh.sc))
3427                     prim_record_minimal_symbol_and_info (name, sh.value,
3428                                                          mst_file_data, NULL,
3429                                                          SECT_OFF_DATA (objfile),
3430                                                          NULL,
3431                                                          objfile);
3432                   else
3433                     prim_record_minimal_symbol_and_info (name, sh.value,
3434                                                          mst_file_bss, NULL,
3435                                                          SECT_OFF_BSS (objfile),
3436                                                          NULL,
3437                                                          objfile);
3438                   class = LOC_STATIC;
3439                   break;
3440
3441                 case stIndirect:        /* Irix5 forward declaration */
3442                   /* Skip forward declarations from Irix5 cc */
3443                   goto skip;
3444
3445                 case stTypedef: /* Typedef */
3446                   /* Skip typedefs for forward declarations and opaque
3447                      structs from alpha and mips cc.  */
3448                   if (sh.iss == 0 || has_opaque_xref (fh, &sh))
3449                     goto skip;
3450                   class = LOC_TYPEDEF;
3451                   break;
3452
3453                 case stConstant:        /* Constant decl */
3454                   class = LOC_CONST;
3455                   break;
3456
3457                 case stUnion:
3458                 case stStruct:
3459                 case stEnum:
3460                 case stBlock:   /* { }, str, un, enum */
3461                   /* Do not create a partial symbol for cc unnamed aggregates
3462                      and gcc empty aggregates. */
3463                   if ((sh.sc == scInfo
3464                        || SC_IS_COMMON (sh.sc))
3465                       && sh.iss != 0
3466                       && sh.index != cur_sdx + 2)
3467                     {
3468                       add_psymbol_to_list (name, strlen (name),
3469                                            STRUCT_DOMAIN, LOC_TYPEDEF,
3470                                            &objfile->static_psymbols,
3471                                            0, (CORE_ADDR) 0,
3472                                            psymtab_language, objfile);
3473                     }
3474                   handle_psymbol_enumerators (objfile, fh, sh.st, sh.value);
3475
3476                   /* Skip over the block */
3477                   new_sdx = sh.index;
3478                   if (new_sdx <= cur_sdx)
3479                     {
3480                       /* This happens with the Ultrix kernel. */
3481                       complaint (&symfile_complaints,
3482                                  "bad aux index at block symbol %s", name);
3483                       new_sdx = cur_sdx + 1;    /* Don't skip backward */
3484                     }
3485                   cur_sdx = new_sdx;
3486                   continue;
3487
3488                 case stFile:    /* File headers */
3489                 case stLabel:   /* Labels */
3490                 case stEnd:     /* Ends of files */
3491                   goto skip;
3492
3493                 case stLocal:   /* Local variables */
3494                   /* Normally these are skipped because we skip over
3495                      all blocks we see.  However, these can occur
3496                      as visible symbols in a .h file that contains code. */
3497                   goto skip;
3498
3499                 default:
3500                   /* Both complaints are valid:  one gives symbol name,
3501                      the other the offending symbol type.  */
3502                   complaint (&symfile_complaints, "unknown local symbol %s",
3503                              name);
3504                   complaint (&symfile_complaints, "with type %d", sh.st);
3505                   cur_sdx++;
3506                   continue;
3507                 }
3508               /* Use this gdb symbol */
3509               add_psymbol_to_list (name, strlen (name),
3510                                    VAR_DOMAIN, class,
3511                                    &objfile->static_psymbols,
3512                                    0, sh.value, psymtab_language, objfile);
3513             skip:
3514               cur_sdx++;        /* Go to next file symbol */
3515             }
3516
3517           /* Now do enter the external symbols. */
3518           ext_ptr = &extern_tab[fdr_to_pst[f_idx].globals_offset];
3519           cur_sdx = fdr_to_pst[f_idx].n_globals;
3520           PST_PRIVATE (save_pst)->extern_count = cur_sdx;
3521           PST_PRIVATE (save_pst)->extern_tab = ext_ptr;
3522           for (; --cur_sdx >= 0; ext_ptr++)
3523             {
3524               enum address_class class;
3525               SYMR *psh;
3526               char *name;
3527               CORE_ADDR svalue;
3528
3529               if (ext_ptr->ifd != f_idx)
3530                 internal_error (__FILE__, __LINE__, "failed internal consistency check");
3531               psh = &ext_ptr->asym;
3532
3533               /* Do not add undefined symbols to the partial symbol table.  */
3534               if (SC_IS_UNDEF (psh->sc) || psh->sc == scNil)
3535                 continue;
3536
3537               svalue = psh->value;
3538               switch (psh->sc)
3539                 {
3540                 case scText:
3541                 case scRConst:
3542                   svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
3543                   break;
3544                 case scData:
3545                 case scSData:
3546                 case scRData:
3547                 case scPData:
3548                 case scXData:
3549                   svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
3550                   break;
3551                 case scBss:
3552                 case scSBss:
3553                   svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
3554                   break;
3555                 }
3556
3557               switch (psh->st)
3558                 {
3559                 case stNil:
3560                   /* These are generated for static symbols in .o files,
3561                      ignore them.  */
3562                   continue;
3563                 case stProc:
3564                 case stStaticProc:
3565                   /* External procedure symbols have been entered
3566                      into the minimal symbol table in pass 2 above.
3567                      Ignore them, as parse_external will ignore them too.  */
3568                   continue;
3569                 case stLabel:
3570                   class = LOC_LABEL;
3571                   break;
3572                 default:
3573                   unknown_ext_complaint (debug_info->ssext + psh->iss);
3574                   /* Fall through, pretend it's global.  */
3575                 case stGlobal:
3576                   /* Global common symbols are resolved by the runtime loader,
3577                      ignore them.  */
3578                   if (SC_IS_COMMON (psh->sc))
3579                     continue;
3580
3581                   class = LOC_STATIC;
3582                   break;
3583                 }
3584               name = debug_info->ssext + psh->iss;
3585               add_psymbol_to_list (name, strlen (name),
3586                                    VAR_DOMAIN, class,
3587                                    &objfile->global_psymbols,
3588                                    0, svalue,
3589                                    psymtab_language, objfile);
3590             }
3591         }
3592
3593       /* Link pst to FDR. end_psymtab returns NULL if the psymtab was
3594          empty and put on the free list.  */
3595       fdr_to_pst[f_idx].pst = end_psymtab (save_pst,
3596                                         psymtab_include_list, includes_used,
3597                                            -1, save_pst->texthigh,
3598                        dependency_list, dependencies_used, textlow_not_set);
3599       includes_used = 0;
3600       dependencies_used = 0;
3601
3602       if (objfile->ei.entry_point >= save_pst->textlow &&
3603           objfile->ei.entry_point < save_pst->texthigh)
3604         {
3605           objfile->ei.deprecated_entry_file_lowpc = save_pst->textlow;
3606           objfile->ei.deprecated_entry_file_highpc = save_pst->texthigh;
3607         }
3608
3609       /* The objfile has its functions reordered if this partial symbol
3610          table overlaps any other partial symbol table.
3611          We cannot assume a reordered objfile if a partial symbol table
3612          is contained within another partial symbol table, as partial symbol
3613          tables for include files with executable code are contained
3614          within the partial symbol table for the including source file,
3615          and we do not want to flag the objfile reordered for these cases.
3616
3617          This strategy works well for Irix-5.2 shared libraries, but we
3618          might have to use a more elaborate (and slower) algorithm for
3619          other cases.  */
3620       save_pst = fdr_to_pst[f_idx].pst;
3621       if (save_pst != NULL
3622           && save_pst->textlow != 0
3623           && !(objfile->flags & OBJF_REORDERED))
3624         {
3625           ALL_OBJFILE_PSYMTABS (objfile, pst)
3626           {
3627             if (save_pst != pst
3628                 && save_pst->textlow >= pst->textlow
3629                 && save_pst->textlow < pst->texthigh
3630                 && save_pst->texthigh > pst->texthigh)
3631               {
3632                 objfile->flags |= OBJF_REORDERED;
3633                 break;
3634               }
3635           }
3636         }
3637     }
3638
3639   /* Now scan the FDRs for dependencies */
3640   for (f_idx = 0; f_idx < hdr->ifdMax; f_idx++)
3641     {
3642       fh = f_idx + debug_info->fdr;
3643       pst = fdr_to_pst[f_idx].pst;
3644
3645       if (pst == (struct partial_symtab *) NULL)
3646         continue;
3647
3648       /* This should catch stabs-in-ecoff. */
3649       if (fh->crfd <= 1)
3650         continue;
3651
3652       /* Skip the first file indirect entry as it is a self dependency
3653          for source files or a reverse .h -> .c dependency for header files.  */
3654       pst->number_of_dependencies = 0;
3655       pst->dependencies =
3656         ((struct partial_symtab **)
3657          obstack_alloc (&objfile->psymbol_obstack,
3658                         ((fh->crfd - 1)
3659                          * sizeof (struct partial_symtab *))));
3660       for (s_idx = 1; s_idx < fh->crfd; s_idx++)
3661         {
3662           RFDT rh;
3663
3664           (*swap_rfd_in) (cur_bfd,
3665                           ((char *) debug_info->external_rfd
3666                            + (fh->rfdBase + s_idx) * external_rfd_size),
3667                           &rh);
3668           if (rh < 0 || rh >= hdr->ifdMax)
3669             {
3670               complaint (&symfile_complaints, "bad file number %ld", rh);
3671               continue;
3672             }
3673
3674           /* Skip self dependencies of header files.  */
3675           if (rh == f_idx)
3676             continue;
3677
3678           /* Do not add to dependeny list if psymtab was empty.  */
3679           if (fdr_to_pst[rh].pst == (struct partial_symtab *) NULL)
3680             continue;
3681           pst->dependencies[pst->number_of_dependencies++] = fdr_to_pst[rh].pst;
3682         }
3683     }
3684
3685   /* Remove the dummy psymtab created for -O3 images above, if it is
3686      still empty, to enable the detection of stripped executables.  */
3687   if (objfile->psymtabs->next == NULL
3688       && objfile->psymtabs->number_of_dependencies == 0
3689       && objfile->psymtabs->n_global_syms == 0
3690       && objfile->psymtabs->n_static_syms == 0)
3691     objfile->psymtabs = NULL;
3692   do_cleanups (old_chain);
3693 }
3694
3695 /* If the current psymbol has an enumerated type, we need to add
3696    all the the enum constants to the partial symbol table.  */
3697
3698 static void
3699 handle_psymbol_enumerators (struct objfile *objfile, FDR *fh, int stype,
3700                             CORE_ADDR svalue)
3701 {
3702   const bfd_size_type external_sym_size = debug_swap->external_sym_size;
3703   void (*const swap_sym_in) (bfd *, void *, SYMR *) = debug_swap->swap_sym_in;
3704   char *ext_sym = ((char *) debug_info->external_sym
3705                    + ((fh->isymBase + cur_sdx + 1) * external_sym_size));
3706   SYMR sh;
3707   TIR tir;
3708
3709   switch (stype)
3710     {
3711     case stEnum:
3712       break;
3713
3714     case stBlock:
3715       /* It is an enumerated type if the next symbol entry is a stMember
3716          and its auxiliary index is indexNil or its auxiliary entry
3717          is a plain btNil or btVoid.
3718          Alpha cc -migrate enums are recognized by a zero index and
3719          a zero symbol value.
3720          DU 4.0 cc enums are recognized by a member type of btEnum without
3721          qualifiers and a zero symbol value.  */
3722       (*swap_sym_in) (cur_bfd, ext_sym, &sh);
3723       if (sh.st != stMember)
3724         return;
3725
3726       if (sh.index == indexNil
3727           || (sh.index == 0 && svalue == 0))
3728         break;
3729       (*debug_swap->swap_tir_in) (fh->fBigendian,
3730                                   &(debug_info->external_aux
3731                                     + fh->iauxBase + sh.index)->a_ti,
3732                                   &tir);
3733       if ((tir.bt != btNil
3734            && tir.bt != btVoid
3735            && (tir.bt != btEnum || svalue != 0))
3736           || tir.tq0 != tqNil)
3737         return;
3738       break;
3739
3740     default:
3741       return;
3742     }
3743
3744   for (;;)
3745     {
3746       char *name;
3747
3748       (*swap_sym_in) (cur_bfd, ext_sym, &sh);
3749       if (sh.st != stMember)
3750         break;
3751       name = debug_info->ss + cur_fdr->issBase + sh.iss;
3752
3753       /* Note that the value doesn't matter for enum constants
3754          in psymtabs, just in symtabs.  */
3755       add_psymbol_to_list (name, strlen (name),
3756                            VAR_DOMAIN, LOC_CONST,
3757                            &objfile->static_psymbols, 0,
3758                            (CORE_ADDR) 0, psymtab_language, objfile);
3759       ext_sym += external_sym_size;
3760     }
3761 }
3762
3763 /* Get the next symbol.  OBJFILE is unused. */
3764
3765 static char *
3766 mdebug_next_symbol_text (struct objfile *objfile)
3767 {
3768   SYMR sh;
3769
3770   cur_sdx++;
3771   (*debug_swap->swap_sym_in) (cur_bfd,
3772                               ((char *) debug_info->external_sym
3773                                + ((cur_fdr->isymBase + cur_sdx)
3774                                   * debug_swap->external_sym_size)),
3775                               &sh);
3776   return debug_info->ss + cur_fdr->issBase + sh.iss;
3777 }
3778
3779 /* Ancillary function to psymtab_to_symtab().  Does all the work
3780    for turning the partial symtab PST into a symtab, recurring
3781    first on all dependent psymtabs.  The argument FILENAME is
3782    only passed so we can see in debug stack traces what file
3783    is being read.
3784
3785    This function has a split personality, based on whether the
3786    symbol table contains ordinary ecoff symbols, or stabs-in-ecoff.
3787    The flow of control and even the memory allocation differs.  FIXME.  */
3788
3789 static void
3790 psymtab_to_symtab_1 (struct partial_symtab *pst, char *filename)
3791 {
3792   bfd_size_type external_sym_size;
3793   bfd_size_type external_pdr_size;
3794   void (*swap_sym_in) (bfd *, void *, SYMR *);
3795   void (*swap_pdr_in) (bfd *, void *, PDR *);
3796   int i;
3797   struct symtab *st = NULL;
3798   FDR *fh;
3799   struct linetable *lines;
3800   CORE_ADDR lowest_pdr_addr = 0;
3801   int last_symtab_ended = 0;
3802
3803   if (pst->readin)
3804     return;
3805   pst->readin = 1;
3806
3807   /* Read in all partial symbtabs on which this one is dependent.
3808      NOTE that we do have circular dependencies, sigh.  We solved
3809      that by setting pst->readin before this point.  */
3810
3811   for (i = 0; i < pst->number_of_dependencies; i++)
3812     if (!pst->dependencies[i]->readin)
3813       {
3814         /* Inform about additional files to be read in.  */
3815         if (info_verbose)
3816           {
3817             fputs_filtered (" ", gdb_stdout);
3818             wrap_here ("");
3819             fputs_filtered ("and ", gdb_stdout);
3820             wrap_here ("");
3821             printf_filtered ("%s...",
3822                              pst->dependencies[i]->filename);
3823             wrap_here ("");     /* Flush output */
3824             gdb_flush (gdb_stdout);
3825           }
3826         /* We only pass the filename for debug purposes */
3827         psymtab_to_symtab_1 (pst->dependencies[i],
3828                              pst->dependencies[i]->filename);
3829       }
3830
3831   /* Do nothing if this is a dummy psymtab.  */
3832
3833   if (pst->n_global_syms == 0 && pst->n_static_syms == 0
3834       && pst->textlow == 0 && pst->texthigh == 0)
3835     return;
3836
3837   /* Now read the symbols for this symtab */
3838
3839   cur_bfd = CUR_BFD (pst);
3840   debug_swap = DEBUG_SWAP (pst);
3841   debug_info = DEBUG_INFO (pst);
3842   pending_list = PENDING_LIST (pst);
3843   external_sym_size = debug_swap->external_sym_size;
3844   external_pdr_size = debug_swap->external_pdr_size;
3845   swap_sym_in = debug_swap->swap_sym_in;
3846   swap_pdr_in = debug_swap->swap_pdr_in;
3847   current_objfile = pst->objfile;
3848   cur_fd = FDR_IDX (pst);
3849   fh = ((cur_fd == -1)
3850         ? (FDR *) NULL
3851         : debug_info->fdr + cur_fd);
3852   cur_fdr = fh;
3853
3854   /* See comment in parse_partial_symbols about the @stabs sentinel. */
3855   processing_gcc_compilation = 0;
3856   if (fh != (FDR *) NULL && fh->csym >= 2)
3857     {
3858       SYMR sh;
3859
3860       (*swap_sym_in) (cur_bfd,
3861                       ((char *) debug_info->external_sym
3862                        + (fh->isymBase + 1) * external_sym_size),
3863                       &sh);
3864       if (STREQ (debug_info->ss + fh->issBase + sh.iss,
3865                  stabs_symbol))
3866         {
3867           /* We indicate that this is a GCC compilation so that certain
3868              features will be enabled in stabsread/dbxread.  */
3869           processing_gcc_compilation = 2;
3870         }
3871     }
3872
3873   if (processing_gcc_compilation != 0)
3874     {
3875
3876       /* This symbol table contains stabs-in-ecoff entries.  */
3877
3878       /* Parse local symbols first */
3879
3880       if (fh->csym <= 2)        /* FIXME, this blows psymtab->symtab ptr */
3881         {
3882           current_objfile = NULL;
3883           return;
3884         }
3885       for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
3886         {
3887           SYMR sh;
3888           char *name;
3889           CORE_ADDR valu;
3890
3891           (*swap_sym_in) (cur_bfd,
3892                           (((char *) debug_info->external_sym)
3893                            + (fh->isymBase + cur_sdx) * external_sym_size),
3894                           &sh);
3895           name = debug_info->ss + fh->issBase + sh.iss;
3896           valu = sh.value;
3897           /* XXX This is a hack.  It will go away!  */
3898           if (ECOFF_IS_STAB (&sh) || (name[0] == '#'))
3899             {
3900               int type_code = ECOFF_UNMARK_STAB (sh.index);
3901
3902               /* We should never get non N_STAB symbols here, but they
3903                  should be harmless, so keep process_one_symbol from
3904                  complaining about them.  */
3905               if (type_code & N_STAB)
3906                 {
3907                   /* If we found a trailing N_SO with no name, process
3908                      it here instead of in process_one_symbol, so we
3909                      can keep a handle to its symtab.  The symtab
3910                      would otherwise be ended twice, once in
3911                      process_one_symbol, and once after this loop. */
3912                   if (type_code == N_SO
3913                       && last_source_file
3914                       && previous_stab_code != (unsigned char) N_SO
3915                       && *name == '\000')
3916                     {
3917                       valu += ANOFFSET (pst->section_offsets,
3918                                         SECT_OFF_TEXT (pst->objfile));
3919                       previous_stab_code = N_SO;
3920                       st = end_symtab (valu, pst->objfile,
3921                                        SECT_OFF_TEXT (pst->objfile));
3922                       end_stabs ();
3923                       last_symtab_ended = 1;
3924                     }
3925                   else
3926                     {
3927                       last_symtab_ended = 0;
3928                       process_one_symbol (type_code, 0, valu, name,
3929                                           pst->section_offsets, pst->objfile);
3930                     }
3931                 }
3932               /* Similarly a hack.  */
3933               else if (name[0] == '#')
3934                 {
3935                   process_one_symbol (N_SLINE, 0, valu, name,
3936                                       pst->section_offsets, pst->objfile);
3937                 }
3938               if (type_code == N_FUN)
3939                 {
3940                   /* Make up special symbol to contain
3941                      procedure specific info */
3942                   struct mips_extra_func_info *e =
3943                   ((struct mips_extra_func_info *)
3944                    obstack_alloc (&current_objfile->symbol_obstack,
3945                                   sizeof (struct mips_extra_func_info)));
3946                   struct symbol *s = new_symbol (MIPS_EFI_SYMBOL_NAME);
3947
3948                   memset (e, 0, sizeof (struct mips_extra_func_info));
3949                   SYMBOL_DOMAIN (s) = LABEL_DOMAIN;
3950                   SYMBOL_CLASS (s) = LOC_CONST;
3951                   SYMBOL_TYPE (s) = mdebug_type_void;
3952                   SYMBOL_VALUE (s) = (long) e;
3953                   e->pdr.framereg = -1;
3954                   add_symbol_to_list (s, &local_symbols);
3955                 }
3956             }
3957           else if (sh.st == stLabel)
3958             {
3959               if (sh.index == indexNil)
3960                 {
3961                   /* This is what the gcc2_compiled and __gnu_compiled_*
3962                      show up as.  So don't complain.  */
3963                   ;
3964                 }
3965               else
3966                 {
3967                   /* Handle encoded stab line number. */
3968                   valu += ANOFFSET (pst->section_offsets, SECT_OFF_TEXT (pst->objfile));
3969                   record_line (current_subfile, sh.index, valu);
3970                 }
3971             }
3972           else if (sh.st == stProc || sh.st == stStaticProc
3973                    || sh.st == stStatic || sh.st == stEnd)
3974             /* These are generated by gcc-2.x, do not complain */
3975             ;
3976           else
3977             complaint (&symfile_complaints, "unknown stabs symbol %s", name);
3978         }
3979
3980       if (! last_symtab_ended)
3981         {
3982           st = end_symtab (pst->texthigh, pst->objfile, SECT_OFF_TEXT (pst->objfile));
3983           end_stabs ();
3984         }
3985
3986       /* There used to be a call to sort_blocks here, but this should not
3987          be necessary for stabs symtabs.  And as sort_blocks modifies the
3988          start address of the GLOBAL_BLOCK to the FIRST_LOCAL_BLOCK,
3989          it did the wrong thing if the first procedure in a file was
3990          generated via asm statements.  */
3991
3992       /* Fill in procedure info next.  */
3993       if (fh->cpd > 0)
3994         {
3995           PDR *pr_block;
3996           struct cleanup *old_chain;
3997           char *pdr_ptr;
3998           char *pdr_end;
3999           PDR *pdr_in;
4000           PDR *pdr_in_end;
4001
4002           pr_block = (PDR *) xmalloc (fh->cpd * sizeof (PDR));
4003           old_chain = make_cleanup (xfree, pr_block);
4004
4005           pdr_ptr = ((char *) debug_info->external_pdr
4006                      + fh->ipdFirst * external_pdr_size);
4007           pdr_end = pdr_ptr + fh->cpd * external_pdr_size;
4008           pdr_in = pr_block;
4009           for (;
4010                pdr_ptr < pdr_end;
4011                pdr_ptr += external_pdr_size, pdr_in++)
4012             {
4013               (*swap_pdr_in) (cur_bfd, pdr_ptr, pdr_in);
4014
4015               /* Determine lowest PDR address, the PDRs are not always
4016                  sorted.  */
4017               if (pdr_in == pr_block)
4018                 lowest_pdr_addr = pdr_in->adr;
4019               else if (pdr_in->adr < lowest_pdr_addr)
4020                 lowest_pdr_addr = pdr_in->adr;
4021             }
4022
4023           pdr_in = pr_block;
4024           pdr_in_end = pdr_in + fh->cpd;
4025           for (; pdr_in < pdr_in_end; pdr_in++)
4026             parse_procedure (pdr_in, st, pst);
4027
4028           do_cleanups (old_chain);
4029         }
4030     }
4031   else
4032     {
4033       /* This symbol table contains ordinary ecoff entries.  */
4034
4035       int f_max;
4036       int maxlines;
4037       EXTR *ext_ptr;
4038
4039       if (fh == 0)
4040         {
4041           maxlines = 0;
4042           st = new_symtab ("unknown", 0, pst->objfile);
4043         }
4044       else
4045         {
4046           maxlines = 2 * fh->cline;
4047           st = new_symtab (pst->filename, maxlines, pst->objfile);
4048
4049           /* The proper language was already determined when building
4050              the psymtab, use it.  */
4051           st->language = PST_PRIVATE (pst)->pst_language;
4052         }
4053
4054       psymtab_language = st->language;
4055
4056       lines = LINETABLE (st);
4057
4058       /* Get a new lexical context */
4059
4060       push_parse_stack ();
4061       top_stack->cur_st = st;
4062       top_stack->cur_block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (st),
4063                                                 STATIC_BLOCK);
4064       BLOCK_START (top_stack->cur_block) = pst->textlow;
4065       BLOCK_END (top_stack->cur_block) = 0;
4066       top_stack->blocktype = stFile;
4067       top_stack->cur_type = 0;
4068       top_stack->procadr = 0;
4069       top_stack->numargs = 0;
4070       found_ecoff_debugging_info = 0;
4071
4072       if (fh)
4073         {
4074           char *sym_ptr;
4075           char *sym_end;
4076
4077           /* Parse local symbols first */
4078           sym_ptr = ((char *) debug_info->external_sym
4079                      + fh->isymBase * external_sym_size);
4080           sym_end = sym_ptr + fh->csym * external_sym_size;
4081           while (sym_ptr < sym_end)
4082             {
4083               SYMR sh;
4084               int c;
4085
4086               (*swap_sym_in) (cur_bfd, sym_ptr, &sh);
4087               c = parse_symbol (&sh,
4088                                 debug_info->external_aux + fh->iauxBase,
4089                                 sym_ptr, fh->fBigendian, pst->section_offsets, pst->objfile);
4090               sym_ptr += c * external_sym_size;
4091             }
4092
4093           /* Linenumbers.  At the end, check if we can save memory.
4094              parse_lines has to look ahead an arbitrary number of PDR
4095              structures, so we swap them all first.  */
4096           if (fh->cpd > 0)
4097             {
4098               PDR *pr_block;
4099               struct cleanup *old_chain;
4100               char *pdr_ptr;
4101               char *pdr_end;
4102               PDR *pdr_in;
4103               PDR *pdr_in_end;
4104
4105               pr_block = (PDR *) xmalloc (fh->cpd * sizeof (PDR));
4106
4107               old_chain = make_cleanup (xfree, pr_block);
4108
4109               pdr_ptr = ((char *) debug_info->external_pdr
4110                          + fh->ipdFirst * external_pdr_size);
4111               pdr_end = pdr_ptr + fh->cpd * external_pdr_size;
4112               pdr_in = pr_block;
4113               for (;
4114                    pdr_ptr < pdr_end;
4115                    pdr_ptr += external_pdr_size, pdr_in++)
4116                 {
4117                   (*swap_pdr_in) (cur_bfd, pdr_ptr, pdr_in);
4118
4119                   /* Determine lowest PDR address, the PDRs are not always
4120                      sorted.  */
4121                   if (pdr_in == pr_block)
4122                     lowest_pdr_addr = pdr_in->adr;
4123                   else if (pdr_in->adr < lowest_pdr_addr)
4124                     lowest_pdr_addr = pdr_in->adr;
4125                 }
4126
4127               parse_lines (fh, pr_block, lines, maxlines, pst, lowest_pdr_addr);
4128               if (lines->nitems < fh->cline)
4129                 lines = shrink_linetable (lines);
4130
4131               /* Fill in procedure info next.  */
4132               pdr_in = pr_block;
4133               pdr_in_end = pdr_in + fh->cpd;
4134               for (; pdr_in < pdr_in_end; pdr_in++)
4135                 parse_procedure (pdr_in, 0, pst);
4136
4137               do_cleanups (old_chain);
4138             }
4139         }
4140
4141       LINETABLE (st) = lines;
4142
4143       /* .. and our share of externals.
4144          XXX use the global list to speed up things here. how?
4145          FIXME, Maybe quit once we have found the right number of ext's? */
4146       top_stack->cur_st = st;
4147       top_stack->cur_block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (top_stack->cur_st),
4148                                                 GLOBAL_BLOCK);
4149       top_stack->blocktype = stFile;
4150
4151       ext_ptr = PST_PRIVATE (pst)->extern_tab;
4152       for (i = PST_PRIVATE (pst)->extern_count; --i >= 0; ext_ptr++)
4153         parse_external (ext_ptr, fh->fBigendian, pst->section_offsets, pst->objfile);
4154
4155       /* If there are undefined symbols, tell the user.
4156          The alpha has an undefined symbol for every symbol that is
4157          from a shared library, so tell the user only if verbose is on.  */
4158       if (info_verbose && n_undef_symbols)
4159         {
4160           printf_filtered ("File %s contains %d unresolved references:",
4161                            st->filename, n_undef_symbols);
4162           printf_filtered ("\n\t%4d variables\n\t%4d procedures\n\t%4d labels\n",
4163                            n_undef_vars, n_undef_procs, n_undef_labels);
4164           n_undef_symbols = n_undef_labels = n_undef_vars = n_undef_procs = 0;
4165
4166         }
4167       pop_parse_stack ();
4168
4169       st->primary = 1;
4170
4171       sort_blocks (st);
4172     }
4173
4174   /* Now link the psymtab and the symtab.  */
4175   pst->symtab = st;
4176
4177   current_objfile = NULL;
4178 }
4179 \f
4180 /* Ancillary parsing procedures. */
4181
4182 /* Return 1 if the symbol pointed to by SH has a cross reference
4183    to an opaque aggregate type, else 0.  */
4184
4185 static int
4186 has_opaque_xref (FDR *fh, SYMR *sh)
4187 {
4188   TIR tir;
4189   union aux_ext *ax;
4190   RNDXR rn[1];
4191   unsigned int rf;
4192
4193   if (sh->index == indexNil)
4194     return 0;
4195
4196   ax = debug_info->external_aux + fh->iauxBase + sh->index;
4197   (*debug_swap->swap_tir_in) (fh->fBigendian, &ax->a_ti, &tir);
4198   if (tir.bt != btStruct && tir.bt != btUnion && tir.bt != btEnum)
4199     return 0;
4200
4201   ax++;
4202   (*debug_swap->swap_rndx_in) (fh->fBigendian, &ax->a_rndx, rn);
4203   if (rn->rfd == 0xfff)
4204     rf = AUX_GET_ISYM (fh->fBigendian, ax + 1);
4205   else
4206     rf = rn->rfd;
4207   if (rf != -1)
4208     return 0;
4209   return 1;
4210 }
4211
4212 /* Lookup the type at relative index RN.  Return it in TPP
4213    if found and in any event come up with its name PNAME.
4214    BIGEND says whether aux symbols are big-endian or not (from fh->fBigendian).
4215    Return value says how many aux symbols we ate. */
4216
4217 static int
4218 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. */
4219            char **pname, int bigend, char *sym_name)
4220 {
4221   RNDXR rn[1];
4222   unsigned int rf;
4223   int result = 1;
4224   FDR *fh;
4225   char *esh;
4226   SYMR sh;
4227   int xref_fd;
4228   struct mdebug_pending *pend;
4229
4230   *tpp = (struct type *) NULL;
4231
4232   (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, rn);
4233
4234   /* Escape index means 'the next one' */
4235   if (rn->rfd == 0xfff)
4236     {
4237       result++;
4238       rf = AUX_GET_ISYM (bigend, ax + 1);
4239     }
4240   else
4241     {
4242       rf = rn->rfd;
4243     }
4244
4245   /* mips cc uses a rf of -1 for opaque struct definitions.
4246      Set TYPE_FLAG_STUB for these types so that check_typedef will
4247      resolve them if the struct gets defined in another compilation unit.  */
4248   if (rf == -1)
4249     {
4250       *pname = "<undefined>";
4251       *tpp = init_type (type_code, 0, TYPE_FLAG_STUB, (char *) NULL, current_objfile);
4252       return result;
4253     }
4254
4255   /* mips cc uses an escaped rn->index of 0 for struct return types
4256      of procedures that were compiled without -g. These will always remain
4257      undefined.  */
4258   if (rn->rfd == 0xfff && rn->index == 0)
4259     {
4260       *pname = "<undefined>";
4261       return result;
4262     }
4263
4264   /* Find the relative file descriptor and the symbol in it.  */
4265   fh = get_rfd (fd, rf);
4266   xref_fd = fh - debug_info->fdr;
4267
4268   if (rn->index >= fh->csym)
4269     {
4270       /* File indirect entry is corrupt.  */
4271       *pname = "<illegal>";
4272       bad_rfd_entry_complaint (sym_name, xref_fd, rn->index);
4273       return result;
4274     }
4275
4276   /* If we have processed this symbol then we left a forwarding
4277      pointer to the type in the pending list.  If not, we`ll put
4278      it in a list of pending types, to be processed later when
4279      the file will be.  In any event, we collect the name for the
4280      type here.  */
4281
4282   esh = ((char *) debug_info->external_sym
4283          + ((fh->isymBase + rn->index)
4284             * debug_swap->external_sym_size));
4285   (*debug_swap->swap_sym_in) (cur_bfd, esh, &sh);
4286
4287   /* Make sure that this type of cross reference can be handled.  */
4288   if ((sh.sc != scInfo
4289        || (sh.st != stBlock && sh.st != stTypedef && sh.st != stIndirect
4290            && sh.st != stStruct && sh.st != stUnion
4291            && sh.st != stEnum))
4292       && (sh.st != stBlock || !SC_IS_COMMON (sh.sc)))
4293     {
4294       /* File indirect entry is corrupt.  */
4295       *pname = "<illegal>";
4296       bad_rfd_entry_complaint (sym_name, xref_fd, rn->index);
4297       return result;
4298     }
4299
4300   *pname = debug_info->ss + fh->issBase + sh.iss;
4301
4302   pend = is_pending_symbol (fh, esh);
4303   if (pend)
4304     *tpp = pend->t;
4305   else
4306     {
4307       /* We have not yet seen this type.  */
4308
4309       if ((sh.iss == 0 && sh.st == stTypedef) || sh.st == stIndirect)
4310         {
4311           TIR tir;
4312
4313           /* alpha cc puts out a stTypedef with a sh.iss of zero for
4314              two cases:
4315              a) forward declarations of structs/unions/enums which are not
4316              defined in this compilation unit.
4317              For these the type will be void. This is a bad design decision
4318              as cross referencing across compilation units is impossible
4319              due to the missing name.
4320              b) forward declarations of structs/unions/enums/typedefs which
4321              are defined later in this file or in another file in the same
4322              compilation unit. Irix5 cc uses a stIndirect symbol for this.
4323              Simply cross reference those again to get the true type.
4324              The forward references are not entered in the pending list and
4325              in the symbol table.  */
4326
4327           (*debug_swap->swap_tir_in) (bigend,
4328                                       &(debug_info->external_aux
4329                                         + fh->iauxBase + sh.index)->a_ti,
4330                                       &tir);
4331           if (tir.tq0 != tqNil)
4332             complaint (&symfile_complaints,
4333                        "illegal tq0 in forward typedef for %s", sym_name);
4334           switch (tir.bt)
4335             {
4336             case btVoid:
4337               *tpp = init_type (type_code, 0, 0, (char *) NULL,
4338                                 current_objfile);
4339               *pname = "<undefined>";
4340               break;
4341
4342             case btStruct:
4343             case btUnion:
4344             case btEnum:
4345               cross_ref (xref_fd,
4346                          (debug_info->external_aux
4347                           + fh->iauxBase + sh.index + 1),
4348                          tpp, type_code, pname,
4349                          fh->fBigendian, sym_name);
4350               break;
4351
4352             case btTypedef:
4353               /* Follow a forward typedef. This might recursively
4354                  call cross_ref till we get a non typedef'ed type.
4355                  FIXME: This is not correct behaviour, but gdb currently
4356                  cannot handle typedefs without type copying. Type
4357                  copying is impossible as we might have mutual forward
4358                  references between two files and the copied type would not
4359                  get filled in when we later parse its definition.  */
4360               *tpp = parse_type (xref_fd,
4361                                  debug_info->external_aux + fh->iauxBase,
4362                                  sh.index,
4363                                  (int *) NULL,
4364                                  fh->fBigendian,
4365                                  debug_info->ss + fh->issBase + sh.iss);
4366               add_pending (fh, esh, *tpp);
4367               break;
4368
4369             default:
4370               complaint (&symfile_complaints,
4371                          "illegal bt %d in forward typedef for %s", tir.bt,
4372                          sym_name);
4373               *tpp = init_type (type_code, 0, 0, (char *) NULL,
4374                                 current_objfile);
4375               break;
4376             }
4377           return result;
4378         }
4379       else if (sh.st == stTypedef)
4380         {
4381           /* Parse the type for a normal typedef. This might recursively call
4382              cross_ref till we get a non typedef'ed type.
4383              FIXME: This is not correct behaviour, but gdb currently
4384              cannot handle typedefs without type copying. But type copying is
4385              impossible as we might have mutual forward references between
4386              two files and the copied type would not get filled in when
4387              we later parse its definition.   */
4388           *tpp = parse_type (xref_fd,
4389                              debug_info->external_aux + fh->iauxBase,
4390                              sh.index,
4391                              (int *) NULL,
4392                              fh->fBigendian,
4393                              debug_info->ss + fh->issBase + sh.iss);
4394         }
4395       else
4396         {
4397           /* Cross reference to a struct/union/enum which is defined
4398              in another file in the same compilation unit but that file
4399              has not been parsed yet.
4400              Initialize the type only, it will be filled in when
4401              it's definition is parsed.  */
4402           *tpp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
4403         }
4404       add_pending (fh, esh, *tpp);
4405     }
4406
4407   /* We used one auxent normally, two if we got a "next one" rf. */
4408   return result;
4409 }
4410
4411
4412 /* Quick&dirty lookup procedure, to avoid the MI ones that require
4413    keeping the symtab sorted */
4414
4415 static struct symbol *
4416 mylookup_symbol (char *name, struct block *block,
4417                  domain_enum domain, enum address_class class)
4418 {
4419   struct dict_iterator iter;
4420   int inc;
4421   struct symbol *sym;
4422
4423   inc = name[0];
4424   ALL_BLOCK_SYMBOLS (block, iter, sym)
4425     {
4426       if (DEPRECATED_SYMBOL_NAME (sym)[0] == inc
4427           && SYMBOL_DOMAIN (sym) == domain
4428           && SYMBOL_CLASS (sym) == class
4429           && strcmp (DEPRECATED_SYMBOL_NAME (sym), name) == 0)
4430         return sym;
4431     }
4432
4433   block = BLOCK_SUPERBLOCK (block);
4434   if (block)
4435     return mylookup_symbol (name, block, domain, class);
4436   return 0;
4437 }
4438
4439
4440 /* Add a new symbol S to a block B.  */
4441
4442 static void
4443 add_symbol (struct symbol *s, struct block *b)
4444 {
4445   dict_add_symbol (BLOCK_DICT (b), s);
4446 }
4447
4448 /* Add a new block B to a symtab S */
4449
4450 static void
4451 add_block (struct block *b, struct symtab *s)
4452 {
4453   struct blockvector *bv = BLOCKVECTOR (s);
4454
4455   bv = (struct blockvector *) xrealloc ((void *) bv,
4456                                         (sizeof (struct blockvector)
4457                                          + BLOCKVECTOR_NBLOCKS (bv)
4458                                          * sizeof (bv->block)));
4459   if (bv != BLOCKVECTOR (s))
4460     BLOCKVECTOR (s) = bv;
4461
4462   BLOCKVECTOR_BLOCK (bv, BLOCKVECTOR_NBLOCKS (bv)++) = b;
4463 }
4464
4465 /* Add a new linenumber entry (LINENO,ADR) to a linevector LT.
4466    MIPS' linenumber encoding might need more than one byte
4467    to describe it, LAST is used to detect these continuation lines.
4468
4469    Combining lines with the same line number seems like a bad idea.
4470    E.g: There could be a line number entry with the same line number after the
4471    prologue and GDB should not ignore it (this is a better way to find
4472    a prologue than mips_skip_prologue).
4473    But due to the compressed line table format there are line number entries
4474    for the same line which are needed to bridge the gap to the next
4475    line number entry. These entries have a bogus address info with them
4476    and we are unable to tell them from intended duplicate line number
4477    entries.
4478    This is another reason why -ggdb debugging format is preferable.  */
4479
4480 static int
4481 add_line (struct linetable *lt, int lineno, CORE_ADDR adr, int last)
4482 {
4483   /* DEC c89 sometimes produces zero linenos which confuse gdb.
4484      Change them to something sensible. */
4485   if (lineno == 0)
4486     lineno = 1;
4487   if (last == 0)
4488     last = -2;                  /* make sure we record first line */
4489
4490   if (last == lineno)           /* skip continuation lines */
4491     return lineno;
4492
4493   lt->item[lt->nitems].line = lineno;
4494   lt->item[lt->nitems++].pc = adr << 2;
4495   return lineno;
4496 }
4497 \f
4498 /* Sorting and reordering procedures */
4499
4500 /* Blocks with a smaller low bound should come first */
4501
4502 static int
4503 compare_blocks (const void *arg1, const void *arg2)
4504 {
4505   int addr_diff;
4506   struct block **b1 = (struct block **) arg1;
4507   struct block **b2 = (struct block **) arg2;
4508
4509   addr_diff = (BLOCK_START ((*b1))) - (BLOCK_START ((*b2)));
4510   if (addr_diff == 0)
4511     return (BLOCK_END ((*b2))) - (BLOCK_END ((*b1)));
4512   return addr_diff;
4513 }
4514
4515 /* Sort the blocks of a symtab S.
4516    Reorder the blocks in the blockvector by code-address,
4517    as required by some MI search routines */
4518
4519 static void
4520 sort_blocks (struct symtab *s)
4521 {
4522   struct blockvector *bv = BLOCKVECTOR (s);
4523
4524   if (BLOCKVECTOR_NBLOCKS (bv) <= 2)
4525     {
4526       /* Cosmetic */
4527       if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) == 0)
4528         BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) = 0;
4529       if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) == 0)
4530         BLOCK_START (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) = 0;
4531       return;
4532     }
4533   /*
4534    * This is very unfortunate: normally all functions are compiled in
4535    * the order they are found, but if the file is compiled -O3 things
4536    * are very different.  It would be nice to find a reliable test
4537    * to detect -O3 images in advance.
4538    */
4539   if (BLOCKVECTOR_NBLOCKS (bv) > 3)
4540     qsort (&BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK),
4541            BLOCKVECTOR_NBLOCKS (bv) - FIRST_LOCAL_BLOCK,
4542            sizeof (struct block *),
4543            compare_blocks);
4544
4545   {
4546     CORE_ADDR high = 0;
4547     int i, j = BLOCKVECTOR_NBLOCKS (bv);
4548
4549     for (i = FIRST_LOCAL_BLOCK; i < j; i++)
4550       if (high < BLOCK_END (BLOCKVECTOR_BLOCK (bv, i)))
4551         high = BLOCK_END (BLOCKVECTOR_BLOCK (bv, i));
4552     BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) = high;
4553   }
4554
4555   BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) =
4556     BLOCK_START (BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK));
4557
4558   BLOCK_START (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
4559     BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
4560   BLOCK_END (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
4561     BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
4562 }
4563 \f
4564
4565 /* Constructor/restructor/destructor procedures */
4566
4567 /* Allocate a new symtab for NAME.  Needs an estimate of how many
4568    linenumbers MAXLINES we'll put in it */
4569
4570 static struct symtab *
4571 new_symtab (char *name, int maxlines, struct objfile *objfile)
4572 {
4573   struct symtab *s = allocate_symtab (name, objfile);
4574
4575   LINETABLE (s) = new_linetable (maxlines);
4576
4577   /* All symtabs must have at least two blocks */
4578   BLOCKVECTOR (s) = new_bvect (2);
4579   BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK)
4580     = new_block (NON_FUNCTION_BLOCK);
4581   BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)
4582     = new_block (NON_FUNCTION_BLOCK);
4583   BLOCK_SUPERBLOCK (BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)) =
4584     BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
4585
4586   s->free_code = free_linetable;
4587   s->debugformat = obsavestring ("ECOFF", 5,
4588                                  &objfile->symbol_obstack);
4589   return (s);
4590 }
4591
4592 /* Allocate a new partial_symtab NAME */
4593
4594 static struct partial_symtab *
4595 new_psymtab (char *name, struct objfile *objfile)
4596 {
4597   struct partial_symtab *psymtab;
4598
4599   psymtab = allocate_psymtab (name, objfile);
4600   psymtab->section_offsets = objfile->section_offsets;
4601
4602   /* Keep a backpointer to the file's symbols */
4603
4604   psymtab->read_symtab_private = ((char *)
4605                                   obstack_alloc (&objfile->psymbol_obstack,
4606                                                  sizeof (struct symloc)));
4607   memset (psymtab->read_symtab_private, 0, sizeof (struct symloc));
4608   CUR_BFD (psymtab) = cur_bfd;
4609   DEBUG_SWAP (psymtab) = debug_swap;
4610   DEBUG_INFO (psymtab) = debug_info;
4611   PENDING_LIST (psymtab) = pending_list;
4612
4613   /* The way to turn this into a symtab is to call... */
4614   psymtab->read_symtab = mdebug_psymtab_to_symtab;
4615   return (psymtab);
4616 }
4617
4618
4619 /* Allocate a linetable array of the given SIZE.  Since the struct
4620    already includes one item, we subtract one when calculating the
4621    proper size to allocate.  */
4622
4623 static struct linetable *
4624 new_linetable (int size)
4625 {
4626   struct linetable *l;
4627
4628   size = (size - 1) * sizeof (l->item) + sizeof (struct linetable);
4629   l = (struct linetable *) xmalloc (size);
4630   l->nitems = 0;
4631   return l;
4632 }
4633
4634 /* Oops, too big. Shrink it.  This was important with the 2.4 linetables,
4635    I am not so sure about the 3.4 ones.
4636
4637    Since the struct linetable already includes one item, we subtract one when
4638    calculating the proper size to allocate.  */
4639
4640 static struct linetable *
4641 shrink_linetable (struct linetable *lt)
4642 {
4643
4644   return (struct linetable *) xrealloc ((void *) lt,
4645                                         (sizeof (struct linetable)
4646                                          + ((lt->nitems - 1)
4647                                             * sizeof (lt->item))));
4648 }
4649
4650 /* Allocate and zero a new blockvector of NBLOCKS blocks. */
4651
4652 static struct blockvector *
4653 new_bvect (int nblocks)
4654 {
4655   struct blockvector *bv;
4656   int size;
4657
4658   size = sizeof (struct blockvector) + nblocks * sizeof (struct block *);
4659   bv = (struct blockvector *) xzalloc (size);
4660
4661   BLOCKVECTOR_NBLOCKS (bv) = nblocks;
4662
4663   return bv;
4664 }
4665
4666 /* Allocate and zero a new block, and set its BLOCK_DICT.  If function
4667    is non-zero, assume the block is associated to a function, and make
4668    sure that the symbols are stored linearly; otherwise, store them
4669    hashed.  */
4670
4671 static struct block *
4672 new_block (enum block_type type)
4673 {
4674   /* FIXME: carlton/2003-09-11: This should use allocate_block to
4675      allocate the block.  Which, in turn, suggests that the block
4676      should be allocated on an obstack.  */
4677   struct block *retval = xzalloc (sizeof (struct block));
4678
4679   if (type == FUNCTION_BLOCK)
4680     BLOCK_DICT (retval) = dict_create_linear_expandable ();
4681   else
4682     BLOCK_DICT (retval) = dict_create_hashed_expandable ();
4683
4684   return retval;
4685 }
4686
4687 /* Create a new symbol with printname NAME */
4688
4689 static struct symbol *
4690 new_symbol (char *name)
4691 {
4692   struct symbol *s = ((struct symbol *)
4693                       obstack_alloc (&current_objfile->symbol_obstack,
4694                                      sizeof (struct symbol)));
4695
4696   memset (s, 0, sizeof (*s));
4697   SYMBOL_LANGUAGE (s) = psymtab_language;
4698   SYMBOL_SET_NAMES (s, name, strlen (name), current_objfile);
4699   return s;
4700 }
4701
4702 /* Create a new type with printname NAME */
4703
4704 static struct type *
4705 new_type (char *name)
4706 {
4707   struct type *t;
4708
4709   t = alloc_type (current_objfile);
4710   TYPE_NAME (t) = name;
4711   TYPE_CPLUS_SPECIFIC (t) = (struct cplus_struct_type *) &cplus_struct_default;
4712   return t;
4713 }
4714 \f
4715 /* Read ECOFF debugging information from a BFD section.  This is
4716    called from elfread.c.  It parses the section into a
4717    ecoff_debug_info struct, and then lets the rest of the file handle
4718    it as normal.  */
4719
4720 void
4721 elfmdebug_build_psymtabs (struct objfile *objfile,
4722                           const struct ecoff_debug_swap *swap, asection *sec)
4723 {
4724   bfd *abfd = objfile->obfd;
4725   struct ecoff_debug_info *info;
4726   struct cleanup *back_to;
4727
4728   /* FIXME: It's not clear whether we should be getting minimal symbol
4729      information from .mdebug in an ELF file, or whether we will.
4730      Re-initialize the minimal symbol reader in case we do.  */
4731
4732   init_minimal_symbol_collection ();
4733   back_to = make_cleanup_discard_minimal_symbols ();
4734
4735   info = ((struct ecoff_debug_info *)
4736           obstack_alloc (&objfile->psymbol_obstack,
4737                          sizeof (struct ecoff_debug_info)));
4738
4739   if (!(*swap->read_debug_info) (abfd, sec, info))
4740     error ("Error reading ECOFF debugging information: %s",
4741            bfd_errmsg (bfd_get_error ()));
4742
4743   mdebug_build_psymtabs (objfile, swap, info);
4744
4745   install_minimal_symbols (objfile);
4746   do_cleanups (back_to);
4747 }
4748 \f
4749
4750 /* Things used for calling functions in the inferior.
4751    These functions are exported to our companion
4752    mips-tdep.c file and are here because they play
4753    with the symbol-table explicitly. */
4754
4755 /* Sigtramp: make sure we have all the necessary information
4756    about the signal trampoline code. Since the official code
4757    from MIPS does not do so, we make up that information ourselves.
4758    If they fix the library (unlikely) this code will neutralize itself. */
4759
4760 /* FIXME: This function is called only by mips-tdep.c.  It needs to be
4761    here because it calls functions defined in this file, but perhaps
4762    this could be handled in a better way.  Only compile it in when
4763    tm-mips.h is included. */
4764
4765 #ifdef TM_MIPS_H
4766
4767 void
4768 fixup_sigtramp (void)
4769 {
4770   struct symbol *s;
4771   struct symtab *st;
4772   struct block *b, *b0 = NULL;
4773
4774   sigtramp_address = -1;
4775
4776   /* We have to handle the following cases here:
4777      a) The Mips library has a sigtramp label within sigvec.
4778      b) Irix has a _sigtramp which we want to use, but it also has sigvec.  */
4779   s = lookup_symbol ("sigvec", 0, VAR_DOMAIN, 0, NULL);
4780   if (s != 0)
4781     {
4782       b0 = SYMBOL_BLOCK_VALUE (s);
4783       s = lookup_symbol ("sigtramp", b0, VAR_DOMAIN, 0, NULL);
4784     }
4785   if (s == 0)
4786     {
4787       /* No sigvec or no sigtramp inside sigvec, try _sigtramp.  */
4788       s = lookup_symbol ("_sigtramp", 0, VAR_DOMAIN, 0, NULL);
4789     }
4790
4791   /* But maybe this program uses its own version of sigvec */
4792   if (s == 0)
4793     return;
4794
4795   /* Did we or MIPSco fix the library ? */
4796   if (SYMBOL_CLASS (s) == LOC_BLOCK)
4797     {
4798       sigtramp_address = BLOCK_START (SYMBOL_BLOCK_VALUE (s));
4799       sigtramp_end = BLOCK_END (SYMBOL_BLOCK_VALUE (s));
4800       return;
4801     }
4802
4803   sigtramp_address = SYMBOL_VALUE (s);
4804   sigtramp_end = sigtramp_address + 0x88;       /* black magic */
4805
4806   /* But what symtab does it live in ? */
4807   st = find_pc_symtab (SYMBOL_VALUE (s));
4808
4809   /*
4810    * Ok, there goes the fix: turn it into a procedure, with all the
4811    * needed info.  Note we make it a nested procedure of sigvec,
4812    * which is the way the (assembly) code is actually written.
4813    */
4814   SYMBOL_DOMAIN (s) = VAR_DOMAIN;
4815   SYMBOL_CLASS (s) = LOC_BLOCK;
4816   SYMBOL_TYPE (s) = init_type (TYPE_CODE_FUNC, 4, 0, (char *) NULL,
4817                                st->objfile);
4818   TYPE_TARGET_TYPE (SYMBOL_TYPE (s)) = mdebug_type_void;
4819
4820   /* Need a block to allocate MIPS_EFI_SYMBOL_NAME in */
4821   b = new_block (NON_FUNCTION_BLOCK);
4822   SYMBOL_BLOCK_VALUE (s) = b;
4823   BLOCK_START (b) = sigtramp_address;
4824   BLOCK_END (b) = sigtramp_end;
4825   BLOCK_FUNCTION (b) = s;
4826   BLOCK_SUPERBLOCK (b) = BLOCK_SUPERBLOCK (b0);
4827   add_block (b, st);
4828   sort_blocks (st);
4829
4830   /* Make a MIPS_EFI_SYMBOL_NAME entry for it */
4831   {
4832     struct mips_extra_func_info *e =
4833     ((struct mips_extra_func_info *)
4834      xzalloc (sizeof (struct mips_extra_func_info)));
4835
4836     e->numargs = 0;             /* the kernel thinks otherwise */
4837     e->pdr.frameoffset = 32;
4838     e->pdr.framereg = SP_REGNUM;
4839     /* Note that setting pcreg is no longer strictly necessary as
4840        mips_frame_saved_pc is now aware of signal handler frames.  */
4841     e->pdr.pcreg = PC_REGNUM;
4842     e->pdr.regmask = -2;
4843     /* Offset to saved r31, in the sigtramp case the saved registers
4844        are above the frame in the sigcontext.
4845        We have 4 alignment bytes, 12 bytes for onstack, mask and pc,
4846        32 * 4 bytes for the general registers, 12 bytes for mdhi, mdlo, ownedfp
4847        and 32 * 4 bytes for the floating point registers.  */
4848     e->pdr.regoffset = 4 + 12 + 31 * 4;
4849     e->pdr.fregmask = -1;
4850     /* Offset to saved f30 (first saved *double* register).  */
4851     e->pdr.fregoffset = 4 + 12 + 32 * 4 + 12 + 30 * 4;
4852     e->pdr.isym = (long) s;
4853     e->pdr.adr = sigtramp_address;
4854
4855     current_objfile = st->objfile;      /* Keep new_symbol happy */
4856     s = new_symbol (MIPS_EFI_SYMBOL_NAME);
4857     SYMBOL_VALUE (s) = (long) e;
4858     SYMBOL_DOMAIN (s) = LABEL_DOMAIN;
4859     SYMBOL_CLASS (s) = LOC_CONST;
4860     SYMBOL_TYPE (s) = mdebug_type_void;
4861     current_objfile = NULL;
4862   }
4863
4864   dict_add_symbol (BLOCK_DICT (b), s);
4865 }
4866
4867 #endif /* TM_MIPS_H */
4868
4869 void
4870 _initialize_mdebugread (void)
4871 {
4872   mdebug_type_void =
4873     init_type (TYPE_CODE_VOID, 1,
4874                0,
4875                "void", (struct objfile *) NULL);
4876   mdebug_type_char =
4877     init_type (TYPE_CODE_INT, 1,
4878                0,
4879                "char", (struct objfile *) NULL);
4880   mdebug_type_unsigned_char =
4881     init_type (TYPE_CODE_INT, 1,
4882                TYPE_FLAG_UNSIGNED,
4883                "unsigned char", (struct objfile *) NULL);
4884   mdebug_type_short =
4885     init_type (TYPE_CODE_INT, 2,
4886                0,
4887                "short", (struct objfile *) NULL);
4888   mdebug_type_unsigned_short =
4889     init_type (TYPE_CODE_INT, 2,
4890                TYPE_FLAG_UNSIGNED,
4891                "unsigned short", (struct objfile *) NULL);
4892   mdebug_type_int_32 =
4893     init_type (TYPE_CODE_INT, 4,
4894                0,
4895                "int", (struct objfile *) NULL);
4896   mdebug_type_unsigned_int_32 =
4897     init_type (TYPE_CODE_INT, 4,
4898                TYPE_FLAG_UNSIGNED,
4899                "unsigned int", (struct objfile *) NULL);
4900   mdebug_type_int_64 =
4901     init_type (TYPE_CODE_INT, 8,
4902                0,
4903                "int", (struct objfile *) NULL);
4904   mdebug_type_unsigned_int_64 =
4905     init_type (TYPE_CODE_INT, 8,
4906                TYPE_FLAG_UNSIGNED,
4907                "unsigned int", (struct objfile *) NULL);
4908   mdebug_type_long_32 =
4909     init_type (TYPE_CODE_INT, 4,
4910                0,
4911                "long", (struct objfile *) NULL);
4912   mdebug_type_unsigned_long_32 =
4913     init_type (TYPE_CODE_INT, 4,
4914                TYPE_FLAG_UNSIGNED,
4915                "unsigned long", (struct objfile *) NULL);
4916   mdebug_type_long_64 =
4917     init_type (TYPE_CODE_INT, 8,
4918                0,
4919                "long", (struct objfile *) NULL);
4920   mdebug_type_unsigned_long_64 =
4921     init_type (TYPE_CODE_INT, 8,
4922                TYPE_FLAG_UNSIGNED,
4923                "unsigned long", (struct objfile *) NULL);
4924   mdebug_type_long_long_64 =
4925     init_type (TYPE_CODE_INT, 8,
4926                0,
4927                "long long", (struct objfile *) NULL);
4928   mdebug_type_unsigned_long_long_64 =
4929     init_type (TYPE_CODE_INT, 8,
4930                TYPE_FLAG_UNSIGNED,
4931                "unsigned long long", (struct objfile *) NULL);
4932   mdebug_type_adr_32 =
4933     init_type (TYPE_CODE_PTR, 4,
4934                TYPE_FLAG_UNSIGNED,
4935                "adr_32", (struct objfile *) NULL);
4936   TYPE_TARGET_TYPE (mdebug_type_adr_32) = mdebug_type_void;
4937   mdebug_type_adr_64 =
4938     init_type (TYPE_CODE_PTR, 8,
4939                TYPE_FLAG_UNSIGNED,
4940                "adr_64", (struct objfile *) NULL);
4941   TYPE_TARGET_TYPE (mdebug_type_adr_64) = mdebug_type_void;
4942   mdebug_type_float =
4943     init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
4944                0,
4945                "float", (struct objfile *) NULL);
4946   mdebug_type_double =
4947     init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
4948                0,
4949                "double", (struct objfile *) NULL);
4950   mdebug_type_complex =
4951     init_type (TYPE_CODE_COMPLEX, 2 * TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
4952                0,
4953                "complex", (struct objfile *) NULL);
4954   TYPE_TARGET_TYPE (mdebug_type_complex) = mdebug_type_float;
4955   mdebug_type_double_complex =
4956     init_type (TYPE_CODE_COMPLEX, 2 * TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
4957                0,
4958                "double complex", (struct objfile *) NULL);
4959   TYPE_TARGET_TYPE (mdebug_type_double_complex) = mdebug_type_double;
4960
4961   /* Is a "string" the way btString means it the same as TYPE_CODE_STRING?
4962      FIXME.  */
4963   mdebug_type_string =
4964     init_type (TYPE_CODE_STRING,
4965                TARGET_CHAR_BIT / TARGET_CHAR_BIT,
4966                0, "string",
4967                (struct objfile *) NULL);
4968
4969   /* We use TYPE_CODE_INT to print these as integers.  Does this do any
4970      good?  Would we be better off with TYPE_CODE_ERROR?  Should
4971      TYPE_CODE_ERROR print things in hex if it knows the size?  */
4972   mdebug_type_fixed_dec =
4973     init_type (TYPE_CODE_INT,
4974                TARGET_INT_BIT / TARGET_CHAR_BIT,
4975                0, "fixed decimal",
4976                (struct objfile *) NULL);
4977
4978   mdebug_type_float_dec =
4979     init_type (TYPE_CODE_ERROR,
4980                TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
4981                0, "floating decimal",
4982                (struct objfile *) NULL);
4983
4984   nodebug_func_symbol_type = init_type (TYPE_CODE_FUNC, 1, 0,
4985                                         "<function, no debug info>", NULL);
4986   TYPE_TARGET_TYPE (nodebug_func_symbol_type) = mdebug_type_int;
4987   nodebug_var_symbol_type =
4988     init_type (TYPE_CODE_INT, TARGET_INT_BIT / HOST_CHAR_BIT, 0,
4989                "<variable, no debug info>", NULL);
4990 }