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