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