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