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 (af@cs.cmu.edu) at
8   CMU.  Major work by Per Bothner, John Gilmore and Ian Lance Taylor
9   at Cygnus Support.
10
11   This file is part of GDB.
12
13   This program is free software; you can redistribute it and/or modify
14   it under the terms of the GNU General Public License as published by
15   the Free Software Foundation; either version 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__"
65extern void ecoff_relocate_efi (struct symbol *, CORE_ADDR);
66#include "coff/sym.h"
67#include "coff/symconst.h"
68typedef 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
92extern 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
101
102/* We put a pointer to this structure in the read_symtab_private field
103   of the psymtab.  */
104
105struct 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
142/* Various complaints about symbol reading that don't abort the process */
143static void
144index_complaint (const char *arg1)
145{
146  complaint (&symfile_complaints, "bad aux index at symbol %s", arg1);
147}
148
149static void
150unknown_ext_complaint (const char *arg1)
151{
152  complaint (&symfile_complaints, "unknown external symbol %s", arg1);
153}
154
155static void
156basic_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
162static void
163bad_tag_guess_complaint (const char *arg1)
164{
165  complaint (&symfile_complaints, "guessed tag type of %s incorrectly", arg1);
166}
167
168static void
169bad_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
175static void
176unexpected_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
190/* Things that really are local to this module */
191
192/* Remember what we deduced to be the source language of this psymtab. */
193
194static enum language psymtab_language = language_unknown;
195
196/* Current BFD.  */
197
198static bfd *cur_bfd;
199
200/* How to parse debugging information for CUR_BFD.  */
201
202static const struct ecoff_debug_swap *debug_swap;
203
204/* Pointers to debugging information for CUR_BFD.  */
205
206static struct ecoff_debug_info *debug_info;
207
208/* Pointer to current file decriptor record, and its index */
209
210static FDR *cur_fdr;
211static int cur_fd;
212
213/* Index of current symbol */
214
215static 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
220static int max_gdbinfo;
221static int max_glevel;
222
223/* When examining .o files, report on undefined symbols */
224
225static 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
229static char stabs_symbol[] = STABS_SYMBOL;
230
231/* Types corresponding to mdebug format bt* basic types.  */
232
233static struct type *mdebug_type_void;
234static struct type *mdebug_type_char;
235static struct type *mdebug_type_short;
236static struct type *mdebug_type_int_32;
237#define mdebug_type_int mdebug_type_int_32
238static struct type *mdebug_type_int_64;
239static struct type *mdebug_type_long_32;
240static struct type *mdebug_type_long_64;
241static struct type *mdebug_type_long_long_64;
242static struct type *mdebug_type_unsigned_char;
243static struct type *mdebug_type_unsigned_short;
244static struct type *mdebug_type_unsigned_int_32;
245static struct type *mdebug_type_unsigned_int_64;
246static struct type *mdebug_type_unsigned_long_32;
247static struct type *mdebug_type_unsigned_long_64;
248static struct type *mdebug_type_unsigned_long_long_64;
249static struct type *mdebug_type_adr_32;
250static struct type *mdebug_type_adr_64;
251static struct type *mdebug_type_float;
252static struct type *mdebug_type_double;
253static struct type *mdebug_type_complex;
254static struct type *mdebug_type_double_complex;
255static struct type *mdebug_type_fixed_dec;
256static struct type *mdebug_type_float_dec;
257static struct type *mdebug_type_string;
258
259/* Types for symbols from files compiled without debugging info.  */
260
261static struct type *nodebug_func_symbol_type;
262static struct type *nodebug_var_symbol_type;
263
264/* Nonzero if we have seen ecoff debugging info for a file.  */
265
266static int found_ecoff_debugging_info;
267
268/* Forward declarations */
269
270static int upgrade_type (int, struct type **, int, union aux_ext *,
271			 int, char *);
272
273static void parse_partial_symbols (struct objfile *);
274
275static int has_opaque_xref (FDR *, SYMR *);
276
277static int cross_ref (int, union aux_ext *, struct type **, enum type_code,
278		      char **, int, char *);
279
280static struct symbol *new_symbol (char *);
281
282static struct type *new_type (char *);
283
284enum block_type { FUNCTION_BLOCK, NON_FUNCTION_BLOCK };
285
286static struct block *new_block (enum block_type);
287
288static struct symtab *new_symtab (char *, int, struct objfile *);
289
290static struct linetable *new_linetable (int);
291
292static struct blockvector *new_bvect (int);
293
294static struct type *parse_type (int, union aux_ext *, unsigned int, int *,
295				int, char *);
296
297static struct symbol *mylookup_symbol (char *, struct block *, domain_enum,
298				       enum address_class);
299
300static void sort_blocks (struct symtab *);
301
302static struct partial_symtab *new_psymtab (char *, struct objfile *);
303
304static void psymtab_to_symtab_1 (struct partial_symtab *, char *);
305
306static void add_block (struct block *, struct symtab *);
307
308static void add_symbol (struct symbol *, struct block *);
309
310static int add_line (struct linetable *, int, CORE_ADDR, int);
311
312static struct linetable *shrink_linetable (struct linetable *);
313
314static void handle_psymbol_enumerators (struct objfile *, FDR *, int,
315					CORE_ADDR);
316
317static char *mdebug_next_symbol_text (struct objfile *);
318
319/* Allocate zeroed memory */
320
321static void *
322xzalloc (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
335static void
336mdebug_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
360/* File-level interface functions */
361
362/* Find a file descriptor given its index RF relative to a file CF */
363
364static FDR *
365get_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
386static char *
387fdr_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
400void
401mdebug_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
448/* Local utilities */
449
450/* Map of FDR indexes to partial symtabs */
451
452struct 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
465static 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
490static void
491push_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
515static void
516pop_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
530struct 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
545static struct mdebug_pending **pending_list;
546
547/* Check whether we already saw symbol SH in file FH */
548
549static struct mdebug_pending *
550is_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
564static void
565add_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
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
595static int
596parse_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. (davidm@azstarnet.com)
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
1402static struct type *
1403parse_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
1740static int
1741upgrade_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
1858static void parse_procedure (PDR *, struct symtab *, struct partial_symtab *);
1859
1860static void
1861parse_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
2017void
2018ecoff_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
2033static void parse_external (EXTR *, int, struct section_offsets *,
2034			    struct objfile *);
2035
2036static void
2037parse_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
2126static void parse_lines (FDR *, PDR *, struct linetable *, int,
2127			 struct partial_symtab *, CORE_ADDR);
2128
2129static void
2130parse_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
2195static void
2196function_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
2206static void
2207parse_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
3688static void
3689handle_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
3755static char *
3756mdebug_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
3779static void
3780psymtab_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
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
4175static int
4176has_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
4207static int
4208cross_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
4405static struct symbol *
4406mylookup_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
4432static void
4433add_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
4440static void
4441add_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
4470static int
4471add_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
4488/* Sorting and reordering procedures */
4489
4490/* Blocks with a smaller low bound should come first */
4491
4492static int
4493compare_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
4509static void
4510sort_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
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
4560static struct symtab *
4561new_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
4584static struct partial_symtab *
4585new_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
4613static struct linetable *
4614new_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
4630static struct linetable *
4631shrink_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
4642static struct blockvector *
4643new_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
4661static struct block *
4662new_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
4679static struct symbol *
4680new_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
4694static struct type *
4695new_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
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
4710void
4711elfmdebug_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
4739void
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}
4861