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