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