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