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