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