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