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