1 /* Read a symbol table in ECOFF format (Third-Eye).
2 Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995
3 Free Software Foundation, Inc.
4 Original version contributed by Alessandro Forin (af@cs.cmu.edu) at
5 CMU. Major work by Per Bothner, John Gilmore and Ian Lance Taylor
8 This file is part of GDB.
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
24 /* This module provides the function mdebug_build_psymtabs. It reads
25 ECOFF debugging information into partial symbol tables. The
26 debugging information is read from two structures. A struct
27 ecoff_debug_swap includes the sizes of each ECOFF structure and
28 swapping routines; these are fixed for a particular target. A
29 struct ecoff_debug_info points to the debugging information for a
30 particular object file.
32 ECOFF symbol tables are mostly written in the byte order of the
33 target machine. However, one section of the table (the auxiliary
34 symbol information) is written in the host byte order. There is a
35 bit in the other symbol info which describes which host byte order
36 was used. ECOFF thereby takes the trophy from Intel `b.out' for
37 the most brain-dead adaptation of a file format to byte order.
39 This module can read all four of the known byte-order combinations,
40 on any type of host. */
50 #include "stabsread.h"
51 #include "complaints.h"
53 #if !defined (SEEK_SET)
58 /* These are needed if the tm.h file does not contain the necessary
59 mips specific definitions. */
61 #ifndef MIPS_EFI_SYMBOL_NAME
62 #define MIPS_EFI_SYMBOL_NAME "__GDB_EFI_INFO__"
64 #include "coff/symconst.h"
65 typedef struct mips_extra_func_info {
68 } *mips_extra_func_info_t;
75 #include <sys/types.h>
78 #include <sys/param.h>
83 #include "gdb-stabs.h"
87 #include "coff/ecoff.h" /* COFF-like aspects of ecoff files */
89 #include "libaout.h" /* Private BFD a.out information. */
90 #include "aout/aout64.h"
91 #include "aout/stab_gnu.h" /* STABS information */
93 #include "expression.h"
94 #include "language.h" /* Needed inside partial-stab.h */
96 /* Provide a default mapping from a ecoff register number to a gdb REGNUM. */
97 #ifndef ECOFF_REG_TO_REGNUM
98 #define ECOFF_REG_TO_REGNUM(num) (num)
101 /* We put a pointer to this structure in the read_symtab_private field
106 /* Index of the FDR that this psymtab represents. */
108 /* The BFD that the psymtab was created from. */
110 const struct ecoff_debug_swap *debug_swap;
111 struct ecoff_debug_info *debug_info;
112 struct mdebug_pending **pending_list;
113 /* Pointer to external symbols for this file. */
115 /* Size of extern_tab. */
117 enum language pst_language;
120 #define PST_PRIVATE(p) ((struct symloc *)(p)->read_symtab_private)
121 #define FDR_IDX(p) (PST_PRIVATE(p)->fdr_idx)
122 #define CUR_BFD(p) (PST_PRIVATE(p)->cur_bfd)
123 #define DEBUG_SWAP(p) (PST_PRIVATE(p)->debug_swap)
124 #define DEBUG_INFO(p) (PST_PRIVATE(p)->debug_info)
125 #define PENDING_LIST(p) (PST_PRIVATE(p)->pending_list)
127 /* Things we import explicitly from other modules */
129 extern int info_verbose;
131 /* Various complaints about symbol reading that don't abort the process */
133 static struct complaint bad_file_number_complaint =
134 {"bad file number %d", 0, 0};
136 static struct complaint index_complaint =
137 {"bad aux index at symbol %s", 0, 0};
139 static struct complaint aux_index_complaint =
140 {"bad proc end in aux found from symbol %s", 0, 0};
142 static struct complaint block_index_complaint =
143 {"bad aux index at block symbol %s", 0, 0};
145 static struct complaint unknown_ext_complaint =
146 {"unknown external symbol %s", 0, 0};
148 static struct complaint unknown_sym_complaint =
149 {"unknown local symbol %s", 0, 0};
151 static struct complaint unknown_st_complaint =
152 {"with type %d", 0, 0};
154 static struct complaint block_overflow_complaint =
155 {"block containing %s overfilled", 0, 0};
157 static struct complaint basic_type_complaint =
158 {"cannot map ECOFF basic type 0x%x for %s", 0, 0};
160 static struct complaint unknown_type_qual_complaint =
161 {"unknown type qualifier 0x%x", 0, 0};
163 static struct complaint array_index_type_complaint =
164 {"illegal array index type for %s, assuming int", 0, 0};
166 static struct complaint bad_tag_guess_complaint =
167 {"guessed tag type of %s incorrectly", 0, 0};
169 static struct complaint block_member_complaint =
170 {"declaration block contains unhandled symbol type %d", 0, 0};
172 static struct complaint stEnd_complaint =
173 {"stEnd with storage class %d not handled", 0, 0};
175 static struct complaint unknown_mdebug_symtype_complaint =
176 {"unknown symbol type 0x%x", 0, 0};
178 static struct complaint stab_unknown_complaint =
179 {"unknown stabs symbol %s", 0, 0};
181 static struct complaint pdr_for_nonsymbol_complaint =
182 {"PDR for %s, but no symbol", 0, 0};
184 static struct complaint pdr_static_symbol_complaint =
185 {"can't handle PDR for static proc at 0x%lx", 0, 0};
187 static struct complaint bad_setjmp_pdr_complaint =
188 {"fixing bad setjmp PDR from libc", 0, 0};
190 static struct complaint bad_fbitfield_complaint =
191 {"can't handle TIR fBitfield for %s", 0, 0};
193 static struct complaint bad_continued_complaint =
194 {"illegal TIR continued for %s", 0, 0};
196 static struct complaint bad_rfd_entry_complaint =
197 {"bad rfd entry for %s: file %d, index %d", 0, 0};
199 static struct complaint unexpected_type_code_complaint =
200 {"unexpected type code for %s", 0, 0};
202 static struct complaint unable_to_cross_ref_complaint =
203 {"unable to cross ref btTypedef for %s", 0, 0};
205 static struct complaint illegal_forward_tq0_complaint =
206 {"illegal tq0 in forward typedef for %s", 0, 0};
208 static struct complaint illegal_forward_bt_complaint =
209 {"illegal bt %d in forward typedef for %s", 0, 0};
211 static struct complaint bad_linetable_guess_complaint =
212 {"guessed size of linetable for %s incorrectly", 0, 0};
214 static struct complaint bad_ext_ifd_complaint =
215 {"bad ifd for external symbol: %d (max %d)", 0, 0};
217 static struct complaint bad_ext_iss_complaint =
218 {"bad iss for external symbol: %ld (max %ld)", 0, 0};
220 /* Macros and extra defs */
222 /* Puns: hard to find whether -g was used and how */
224 #define MIN_GLEVEL GLEVEL_0
225 #define compare_glevel(a,b) \
226 (((a) == GLEVEL_3) ? ((b) < GLEVEL_3) : \
227 ((b) == GLEVEL_3) ? -1 : (int)((b) - (a)))
229 /* Things that really are local to this module */
231 /* Remember what we deduced to be the source language of this psymtab. */
233 static enum language psymtab_language = language_unknown;
239 /* How to parse debugging information for CUR_BFD. */
241 static const struct ecoff_debug_swap *debug_swap;
243 /* Pointers to debugging information for CUR_BFD. */
245 static struct ecoff_debug_info *debug_info;
247 /* Pointer to current file decriptor record, and its index */
252 /* Index of current symbol */
256 /* Note how much "debuggable" this image is. We would like
257 to see at least one FDR with full symbols */
262 /* When examining .o files, report on undefined symbols */
264 static int n_undef_symbols, n_undef_labels, n_undef_vars, n_undef_procs;
266 /* Pseudo symbol to use when putting stabs into the symbol table. */
268 static char stabs_symbol[] = STABS_SYMBOL;
270 /* Types corresponding to btComplex, btDComplex, etc. These are here
271 rather than in gdbtypes.c or some such, because the meaning of codes
272 like btComplex is specific to the mdebug debug format. FIXME: We should
273 be using our own types thoughout this file, instead of sometimes using
276 static struct type *mdebug_type_fixed_dec;
277 static struct type *mdebug_type_float_dec;
278 static struct type *mdebug_type_string;
280 /* Types for symbols from files compiled without debugging info. */
282 static struct type *nodebug_func_symbol_type;
283 static struct type *nodebug_var_symbol_type;
285 /* Nonzero if we have seen ecoff debugging info for a file. */
287 static int found_ecoff_debugging_info;
289 /* Forward declarations */
292 upgrade_type PARAMS ((int, struct type **, int, union aux_ext *, int, char *));
295 parse_partial_symbols PARAMS ((struct objfile *,
296 struct section_offsets *));
299 *get_rfd PARAMS ((int, int));
302 has_opaque_xref PARAMS ((FDR *, SYMR *));
305 cross_ref PARAMS ((int, union aux_ext *, struct type **, enum type_code,
306 char **, int, char *));
308 static struct symbol *
309 new_symbol PARAMS ((char *));
312 new_type PARAMS ((char *));
314 static struct block *
315 new_block PARAMS ((int));
317 static struct symtab *
318 new_symtab PARAMS ((char *, int, int, struct objfile *));
320 static struct linetable *
321 new_linetable PARAMS ((int));
323 static struct blockvector *
324 new_bvect PARAMS ((int));
327 parse_symbol PARAMS ((SYMR *, union aux_ext *, char *, int, struct section_offsets *));
330 parse_type PARAMS ((int, union aux_ext *, unsigned int, int *, int, char *));
332 static struct symbol *
333 mylookup_symbol PARAMS ((char *, struct block *, enum namespace,
334 enum address_class));
336 static struct block *
337 shrink_block PARAMS ((struct block *, struct symtab *));
340 xzalloc PARAMS ((unsigned int));
343 sort_blocks PARAMS ((struct symtab *));
346 compare_blocks PARAMS ((const void *, const void *));
348 static struct partial_symtab *
349 new_psymtab PARAMS ((char *, struct objfile *, struct section_offsets *));
352 psymtab_to_symtab_1 PARAMS ((struct partial_symtab *, char *));
355 add_block PARAMS ((struct block *, struct symtab *));
358 add_symbol PARAMS ((struct symbol *, struct block *));
361 add_line PARAMS ((struct linetable *, int, CORE_ADDR, int));
363 static struct linetable *
364 shrink_linetable PARAMS ((struct linetable *));
367 handle_psymbol_enumerators PARAMS ((struct objfile *, FDR *, int));
370 mdebug_next_symbol_text PARAMS ((void));
372 /* Address bounds for the signal trampoline in inferior, if any */
374 CORE_ADDR sigtramp_address, sigtramp_end;
376 /* Allocate zeroed memory */
382 PTR p = xmalloc (size);
388 /* Exported procedure: Builds a symtab from the PST partial one.
389 Restores the environment in effect when PST was created, delegates
390 most of the work to an ancillary procedure, and sorts
391 and reorders the symtab list at the end */
394 mdebug_psymtab_to_symtab (pst)
395 struct partial_symtab *pst;
403 printf_filtered ("Reading in symbols for %s...", pst->filename);
404 gdb_flush (gdb_stdout);
407 next_symbol_text_func = mdebug_next_symbol_text;
409 psymtab_to_symtab_1 (pst, pst->filename);
411 /* Match with global symbols. This only needs to be done once,
412 after all of the symtabs and dependencies have been read in. */
413 scan_file_globals (pst->objfile);
416 printf_filtered ("done.\n");
419 /* File-level interface functions */
421 /* Find a file descriptor given its index RF relative to a file CF */
431 fdrs = debug_info->fdr;
433 /* Object files do not have the RFD table, all refs are absolute */
436 (*debug_swap->swap_rfd_in) (cur_bfd,
437 ((char *) debug_info->external_rfd
439 * debug_swap->external_rfd_size)),
444 /* Return a safer print NAME for a file descriptor */
451 return "<stripped file>";
454 return debug_info->ss + f->issBase + f->rss;
458 /* Read in and parse the symtab of the file OBJFILE. Symbols from
459 different sections are relocated via the SECTION_OFFSETS. */
462 mdebug_build_psymtabs (objfile, swap, info, section_offsets)
463 struct objfile *objfile;
464 const struct ecoff_debug_swap *swap;
465 struct ecoff_debug_info *info;
466 struct section_offsets *section_offsets;
468 cur_bfd = objfile->obfd;
472 /* Make sure all the FDR information is swapped in. */
473 if (info->fdr == (FDR *) NULL)
479 info->fdr = (FDR *) obstack_alloc (&objfile->psymbol_obstack,
480 (info->symbolic_header.ifdMax
482 fdr_src = info->external_fdr;
484 + info->symbolic_header.ifdMax * swap->external_fdr_size);
486 for (; fdr_src < fdr_end; fdr_src += swap->external_fdr_size, fdr_ptr++)
487 (*swap->swap_fdr_in) (objfile->obfd, fdr_src, fdr_ptr);
490 parse_partial_symbols (objfile, section_offsets);
493 /* Check to make sure file was compiled with -g. If not, warn the
494 user of this limitation. */
495 if (compare_glevel (max_glevel, GLEVEL_2) < 0)
497 if (max_gdbinfo == 0)
498 printf_unfiltered ("\n%s not compiled with -g, debugging support is limited.\n",
500 printf_unfiltered ("You should compile with -g2 or -g3 for best debugging support.\n");
501 gdb_flush (gdb_stdout);
506 /* Local utilities */
508 /* Map of FDR indexes to partial symtabs */
512 struct partial_symtab *pst; /* the psymtab proper */
513 long n_globals; /* exported globals (external symbols) */
514 long globals_offset; /* cumulative */
518 /* Utility stack, used to nest procedures and blocks properly.
519 It is a doubly linked list, to avoid too many alloc/free.
520 Since we might need it quite a few times it is NOT deallocated
523 static struct parse_stack
525 struct parse_stack *next, *prev;
526 struct symtab *cur_st; /* Current symtab. */
527 struct block *cur_block; /* Block in it. */
529 /* What are we parsing. stFile, or stBlock are for files and
530 blocks. stProc or stStaticProc means we have seen the start of a
531 procedure, but not the start of the block within in. When we see
532 the start of that block, we change it to stNil, without pushing a
533 new block, i.e. stNil means both a procedure and a block. */
537 int maxsyms; /* Max symbols in this block. */
538 struct type *cur_type; /* Type we parse fields for. */
539 int cur_field; /* Field number in cur_type. */
540 CORE_ADDR procadr; /* Start addres of this procedure */
541 int numargs; /* Its argument count */
544 *top_stack; /* Top stack ptr */
547 /* Enter a new lexical context */
552 struct parse_stack *new;
554 /* Reuse frames if possible */
555 if (top_stack && top_stack->prev)
556 new = top_stack->prev;
558 new = (struct parse_stack *) xzalloc (sizeof (struct parse_stack));
559 /* Initialize new frame with previous content */
562 register struct parse_stack *prev = new->prev;
565 top_stack->prev = new;
567 new->next = top_stack;
572 /* Exit a lexical context */
580 top_stack = top_stack->next;
584 /* Cross-references might be to things we haven't looked at
585 yet, e.g. type references. To avoid too many type
586 duplications we keep a quick fixup table, an array
587 of lists of references indexed by file descriptor */
589 struct mdebug_pending
591 struct mdebug_pending *next; /* link */
592 char *s; /* the unswapped symbol */
593 struct type *t; /* its partial type descriptor */
597 /* The pending information is kept for an entire object file, and used
598 to be in the sym_private field. I took it out when I split
599 mdebugread from mipsread, because this might not be the only type
600 of symbols read from an object file. Instead, we allocate the
601 pending information table when we create the partial symbols, and
602 we store a pointer to the single table in each psymtab. */
604 static struct mdebug_pending **pending_list;
606 /* Check whether we already saw symbol SH in file FH */
608 static struct mdebug_pending *
609 is_pending_symbol (fh, sh)
613 int f_idx = fh - debug_info->fdr;
614 register struct mdebug_pending *p;
616 /* Linear search is ok, list is typically no more than 10 deep */
617 for (p = pending_list[f_idx]; p; p = p->next)
623 /* Add a new symbol SH of type T */
626 add_pending (fh, sh, t)
631 int f_idx = fh - debug_info->fdr;
632 struct mdebug_pending *p = is_pending_symbol (fh, sh);
634 /* Make sure we do not make duplicates */
637 p = ((struct mdebug_pending *)
638 obstack_alloc (¤t_objfile->psymbol_obstack,
639 sizeof (struct mdebug_pending)));
642 p->next = pending_list[f_idx];
643 pending_list[f_idx] = p;
648 /* Parsing Routines proper. */
650 /* Parse a single symbol. Mostly just make up a GDB symbol for it.
651 For blocks, procedures and types we open a new lexical context.
652 This is basically just a big switch on the symbol's type. Argument
653 AX is the base pointer of aux symbols for this file (fh->iauxBase).
654 EXT_SH points to the unswapped symbol, which is needed for struct,
655 union, etc., types; it is NULL for an EXTR. BIGEND says whether
656 aux symbols are big-endian or little-endian. Return count of
657 SYMR's handled (normally one). */
660 parse_symbol (sh, ax, ext_sh, bigend, section_offsets)
665 struct section_offsets *section_offsets;
667 const bfd_size_type external_sym_size = debug_swap->external_sym_size;
668 void (* const swap_sym_in) PARAMS ((bfd *, PTR, SYMR *)) =
669 debug_swap->swap_sym_in;
673 struct mdebug_pending *pend;
677 enum address_class class;
679 long svalue = sh->value;
682 if (ext_sh == (char *) NULL)
683 name = debug_info->ssext + sh->iss;
685 name = debug_info->ss + cur_fdr->issBase + sh->iss;
690 /* The value of a stEnd symbol is the displacement from the
691 corresponding start symbol value, do not relocate it. */
693 sh->value += ANOFFSET (section_offsets, SECT_OFF_TEXT);
700 sh->value += ANOFFSET (section_offsets, SECT_OFF_DATA);
704 sh->value += ANOFFSET (section_offsets, SECT_OFF_BSS);
713 case stGlobal: /* external symbol, goes into global block */
715 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (top_stack->cur_st),
717 s = new_symbol (name);
718 SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
721 case stStatic: /* static data, goes into current block. */
723 b = top_stack->cur_block;
724 s = new_symbol (name);
725 if (sh->sc == scCommon || sh->sc == scSCommon)
727 /* It is a FORTRAN common block. At least for SGI Fortran the
728 address is not in the symbol; we need to fix it later in
729 scan_file_globals. */
730 int bucket = hashname (SYMBOL_NAME (s));
731 SYMBOL_VALUE_CHAIN (s) = global_sym_chain[bucket];
732 global_sym_chain[bucket] = s;
735 SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
738 case stLocal: /* local variable, goes into current block */
739 if (sh->sc == scRegister)
741 class = LOC_REGISTER;
742 svalue = ECOFF_REG_TO_REGNUM (svalue);
746 b = top_stack->cur_block;
747 s = new_symbol (name);
748 SYMBOL_VALUE (s) = svalue;
750 data: /* Common code for symbols describing data */
751 SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
752 SYMBOL_CLASS (s) = class;
755 /* Type could be missing if file is compiled without debugging info. */
756 if (sh->sc == scUndefined || sh->sc == scNil || sh->index == indexNil)
757 SYMBOL_TYPE (s) = nodebug_var_symbol_type;
759 SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
760 /* Value of a data symbol is its memory address */
763 case stParam: /* arg to procedure, goes into current block */
765 found_ecoff_debugging_info = 1;
766 top_stack->numargs++;
768 /* Special GNU C++ name. */
769 if (name[0] == CPLUS_MARKER && name[1] == 't' && name[2] == 0)
770 name = "this"; /* FIXME, not alloc'd in obstack */
771 s = new_symbol (name);
773 SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
777 /* Pass by value in register. */
778 SYMBOL_CLASS(s) = LOC_REGPARM;
779 svalue = ECOFF_REG_TO_REGNUM (svalue);
782 /* Pass by reference on stack. */
783 SYMBOL_CLASS(s) = LOC_REF_ARG;
786 /* Pass by reference in register. */
787 SYMBOL_CLASS(s) = LOC_REGPARM_ADDR;
788 svalue = ECOFF_REG_TO_REGNUM (svalue);
791 /* Pass by value on stack. */
792 SYMBOL_CLASS(s) = LOC_ARG;
795 SYMBOL_VALUE (s) = svalue;
796 SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
797 add_symbol (s, top_stack->cur_block);
800 case stLabel: /* label, goes into current block */
801 s = new_symbol (name);
802 SYMBOL_NAMESPACE (s) = VAR_NAMESPACE; /* so that it can be used */
803 SYMBOL_CLASS (s) = LOC_LABEL; /* but not misused */
804 SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
805 SYMBOL_TYPE (s) = builtin_type_int;
806 add_symbol (s, top_stack->cur_block);
809 case stProc: /* Procedure, usually goes into global block */
810 case stStaticProc: /* Static procedure, goes into current block */
811 s = new_symbol (name);
812 SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
813 SYMBOL_CLASS (s) = LOC_BLOCK;
814 /* Type of the return value */
815 if (sh->sc == scUndefined || sh->sc == scNil)
816 t = builtin_type_int;
818 t = parse_type (cur_fd, ax, sh->index + 1, 0, bigend, name);
819 b = top_stack->cur_block;
820 if (sh->st == stProc)
822 struct blockvector *bv = BLOCKVECTOR (top_stack->cur_st);
823 /* The next test should normally be true, but provides a
824 hook for nested functions (which we don't want to make
826 if (b == BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK))
827 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
828 /* Irix 5 sometimes has duplicate names for the same
829 function. We want to add such names up at the global
830 level, not as a nested function. */
831 else if (sh->value == top_stack->procadr)
832 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
836 /* Make a type for the procedure itself */
837 SYMBOL_TYPE (s) = lookup_function_type (t);
839 /* Create and enter a new lexical context */
840 b = new_block (top_stack->maxsyms);
841 SYMBOL_BLOCK_VALUE (s) = b;
842 BLOCK_FUNCTION (b) = s;
843 BLOCK_START (b) = BLOCK_END (b) = sh->value;
844 BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
845 add_block (b, top_stack->cur_st);
847 /* Not if we only have partial info */
848 if (sh->sc == scUndefined || sh->sc == scNil)
852 top_stack->cur_block = b;
853 top_stack->blocktype = sh->st;
854 top_stack->cur_type = SYMBOL_TYPE (s);
855 top_stack->cur_field = -1;
856 top_stack->procadr = sh->value;
857 top_stack->numargs = 0;
860 /* Beginning of code for structure, union, and enum definitions.
861 They all share a common set of local variables, defined here. */
863 enum type_code type_code;
869 case stStruct: /* Start a block defining a struct type */
870 type_code = TYPE_CODE_STRUCT;
871 goto structured_common;
873 case stUnion: /* Start a block defining a union type */
874 type_code = TYPE_CODE_UNION;
875 goto structured_common;
877 case stEnum: /* Start a block defining an enum type */
878 type_code = TYPE_CODE_ENUM;
879 goto structured_common;
881 case stBlock: /* Either a lexical block, or some type */
882 if (sh->sc != scInfo && sh->sc != scCommon && sh->sc != scSCommon)
883 goto case_stBlock_code; /* Lexical block */
885 type_code = TYPE_CODE_UNDEF; /* We have a type. */
887 /* Common code for handling struct, union, enum, and/or as-yet-
888 unknown-type blocks of info about structured data. `type_code'
889 has been set to the proper TYPE_CODE, if we know it. */
891 found_ecoff_debugging_info = 1;
893 top_stack->blocktype = stBlock;
895 /* First count the number of fields and the highest value. */
898 for (ext_tsym = ext_sh + external_sym_size;
900 ext_tsym += external_sym_size)
904 (*swap_sym_in) (cur_bfd, ext_tsym, &tsym);
912 if (nfields == 0 && type_code == TYPE_CODE_UNDEF)
913 /* If the type of the member is Nil (or Void),
914 without qualifiers, assume the tag is an
916 if (tsym.index == indexNil)
917 type_code = TYPE_CODE_ENUM;
920 (*debug_swap->swap_tir_in) (bigend,
921 &ax[tsym.index].a_ti,
923 if ((tir.bt == btNil || tir.bt == btVoid)
925 type_code = TYPE_CODE_ENUM;
928 if (tsym.value > max_value)
929 max_value = tsym.value;
938 /* This is a no-op; is it trying to tell us something
939 we should be checking? */
940 if (tsym.sc == scVariant); /*UNIMPLEMENTED*/
944 /* This is something like a struct within a
945 struct. Skip over the fields of the inner
946 struct. The -1 is because the for loop will
947 increment ext_tsym. */
948 ext_tsym = ((char *) debug_info->external_sym
949 + ((cur_fdr->isymBase + tsym.index - 1)
950 * external_sym_size));
956 /* mips cc puts out a typedef for struct x if it is not yet
957 defined when it encounters
958 struct y { struct x *xp; };
963 /* Irix5 cc puts out a stIndirect for struct x if it is not
964 yet defined when it encounters
965 struct y { struct x *xp; };
970 complain (&block_member_complaint, tsym.st);
975 /* In an stBlock, there is no way to distinguish structs,
976 unions, and enums at this point. This is a bug in the
977 original design (that has been fixed with the recent
978 addition of the stStruct, stUnion, and stEnum symbol
979 types.) The way you can tell is if/when you see a variable
980 or field of that type. In that case the variable's type
981 (in the AUX table) says if the type is struct, union, or
982 enum, and points back to the stBlock here. So you can
983 patch the tag kind up later - but only if there actually is
984 a variable or field of that type.
986 So until we know for sure, we will guess at this point.
988 If the first member has index==indexNil or a void type,
989 assume we have an enumeration.
990 Otherwise, if there is more than one member, and all
991 the members have offset 0, assume we have a union.
992 Otherwise, assume we have a struct.
994 The heuristic could guess wrong in the case of of an
995 enumeration with no members or a union with one (or zero)
996 members, or when all except the last field of a struct have
997 width zero. These are uncommon and/or illegal situations,
998 and in any case guessing wrong probably doesn't matter
1001 But if we later do find out we were wrong, we fixup the tag
1002 kind. Members of an enumeration must be handled
1003 differently from struct/union fields, and that is harder to
1004 patch up, but luckily we shouldn't need to. (If there are
1005 any enumeration members, we can tell for sure it's an enum
1008 if (type_code == TYPE_CODE_UNDEF)
1009 if (nfields > 1 && max_value == 0)
1010 type_code = TYPE_CODE_UNION;
1012 type_code = TYPE_CODE_STRUCT;
1014 /* Create a new type or use the pending type. */
1015 pend = is_pending_symbol (cur_fdr, ext_sh);
1016 if (pend == (struct mdebug_pending *) NULL)
1018 t = new_type (NULL);
1019 add_pending (cur_fdr, ext_sh, t);
1024 /* Do not set the tag name if it is a compiler generated tag name
1025 (.Fxx or .xxfake or empty) for unnamed struct/union/enums.
1026 Alpha cc puts out an sh->iss of zero for those. */
1027 if (sh->iss == 0 || name[0] == '.' || name[0] == '\0')
1028 TYPE_TAG_NAME (t) = NULL;
1030 TYPE_TAG_NAME (t) = obconcat (¤t_objfile->symbol_obstack,
1033 TYPE_CODE (t) = type_code;
1034 TYPE_LENGTH (t) = sh->value;
1035 TYPE_NFIELDS (t) = nfields;
1036 TYPE_FIELDS (t) = f = ((struct field *)
1038 nfields * sizeof (struct field)));
1040 if (type_code == TYPE_CODE_ENUM)
1042 /* This is a non-empty enum. */
1044 /* DEC c89 has the number of enumerators in the sh.value field,
1045 not the type length, so we have to compensate for that
1046 incompatibility quirk.
1047 This might do the wrong thing for an enum with one or two
1048 enumerators and gcc -gcoff -fshort-enums, but these cases
1049 are hopefully rare enough. */
1050 if (TYPE_LENGTH (t) == TYPE_NFIELDS (t))
1051 TYPE_LENGTH (t) = TARGET_INT_BIT / HOST_CHAR_BIT;
1052 for (ext_tsym = ext_sh + external_sym_size;
1054 ext_tsym += external_sym_size)
1057 struct symbol *enum_sym;
1059 (*swap_sym_in) (cur_bfd, ext_tsym, &tsym);
1061 if (tsym.st != stMember)
1064 f->bitpos = tsym.value;
1066 f->name = debug_info->ss + cur_fdr->issBase + tsym.iss;
1069 enum_sym = ((struct symbol *)
1070 obstack_alloc (¤t_objfile->symbol_obstack,
1071 sizeof (struct symbol)));
1072 memset ((PTR) enum_sym, 0, sizeof (struct symbol));
1073 SYMBOL_NAME (enum_sym) = f->name;
1074 SYMBOL_CLASS (enum_sym) = LOC_CONST;
1075 SYMBOL_TYPE (enum_sym) = t;
1076 SYMBOL_NAMESPACE (enum_sym) = VAR_NAMESPACE;
1077 SYMBOL_VALUE (enum_sym) = tsym.value;
1078 add_symbol (enum_sym, top_stack->cur_block);
1080 /* Skip the stMembers that we've handled. */
1085 /* make this the current type */
1086 top_stack->cur_type = t;
1087 top_stack->cur_field = 0;
1089 /* Do not create a symbol for alpha cc unnamed structs. */
1093 /* gcc puts out an empty struct for an opaque struct definitions,
1094 do not create a symbol for it either. */
1095 if (TYPE_NFIELDS (t) == 0)
1097 TYPE_FLAGS (t) |= TYPE_FLAG_STUB;
1101 s = new_symbol (name);
1102 SYMBOL_NAMESPACE (s) = STRUCT_NAMESPACE;
1103 SYMBOL_CLASS (s) = LOC_TYPEDEF;
1104 SYMBOL_VALUE (s) = 0;
1105 SYMBOL_TYPE (s) = t;
1106 add_symbol (s, top_stack->cur_block);
1109 /* End of local variables shared by struct, union, enum, and
1110 block (as yet unknown struct/union/enum) processing. */
1114 found_ecoff_debugging_info = 1;
1115 /* beginnning of (code) block. Value of symbol
1116 is the displacement from procedure start */
1117 push_parse_stack ();
1119 /* Do not start a new block if this is the outermost block of a
1120 procedure. This allows the LOC_BLOCK symbol to point to the
1121 block with the local variables, so funcname::var works. */
1122 if (top_stack->blocktype == stProc
1123 || top_stack->blocktype == stStaticProc)
1125 top_stack->blocktype = stNil;
1129 top_stack->blocktype = stBlock;
1130 b = new_block (top_stack->maxsyms);
1131 BLOCK_START (b) = sh->value + top_stack->procadr;
1132 BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
1133 top_stack->cur_block = b;
1134 add_block (b, top_stack->cur_st);
1137 case stEnd: /* end (of anything) */
1138 if (sh->sc == scInfo || sh->sc == scCommon || sh->sc == scSCommon)
1140 /* Finished with type */
1141 top_stack->cur_type = 0;
1143 else if (sh->sc == scText &&
1144 (top_stack->blocktype == stProc ||
1145 top_stack->blocktype == stStaticProc))
1147 /* Finished with procedure */
1148 struct blockvector *bv = BLOCKVECTOR (top_stack->cur_st);
1149 struct mips_extra_func_info *e;
1151 struct type *ftype = top_stack->cur_type;
1154 BLOCK_END (top_stack->cur_block) += sh->value; /* size */
1156 /* Make up special symbol to contain procedure specific info */
1157 s = new_symbol (MIPS_EFI_SYMBOL_NAME);
1158 SYMBOL_NAMESPACE (s) = LABEL_NAMESPACE;
1159 SYMBOL_CLASS (s) = LOC_CONST;
1160 SYMBOL_TYPE (s) = builtin_type_void;
1161 e = ((struct mips_extra_func_info *)
1162 obstack_alloc (¤t_objfile->symbol_obstack,
1163 sizeof (struct mips_extra_func_info)));
1164 memset ((PTR) e, 0, sizeof (struct mips_extra_func_info));
1165 SYMBOL_VALUE (s) = (long) e;
1166 e->numargs = top_stack->numargs;
1167 e->pdr.framereg = -1;
1168 add_symbol (s, top_stack->cur_block);
1170 /* Reallocate symbols, saving memory */
1171 b = shrink_block (top_stack->cur_block, top_stack->cur_st);
1173 /* f77 emits proc-level with address bounds==[0,0],
1174 So look for such child blocks, and patch them. */
1175 for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); i++)
1177 struct block *b_bad = BLOCKVECTOR_BLOCK (bv, i);
1178 if (BLOCK_SUPERBLOCK (b_bad) == b
1179 && BLOCK_START (b_bad) == top_stack->procadr
1180 && BLOCK_END (b_bad) == top_stack->procadr)
1182 BLOCK_START (b_bad) = BLOCK_START (b);
1183 BLOCK_END (b_bad) = BLOCK_END (b);
1187 if (TYPE_NFIELDS (ftype) <= 0)
1189 /* No parameter type information is recorded with the function's
1190 type. Set that from the type of the parameter symbols. */
1191 int nparams = top_stack->numargs;
1197 TYPE_NFIELDS (ftype) = nparams;
1198 TYPE_FIELDS (ftype) = (struct field *)
1199 TYPE_ALLOC (ftype, nparams * sizeof (struct field));
1201 for (i = iparams = 0; iparams < nparams; i++)
1203 sym = BLOCK_SYM (b, i);
1204 switch (SYMBOL_CLASS (sym))
1209 case LOC_REGPARM_ADDR:
1210 TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym);
1220 else if (sh->sc == scText && top_stack->blocktype == stBlock)
1222 /* End of (code) block. The value of the symbol is the
1223 displacement from the procedure`s start address of the
1224 end of this block. */
1225 BLOCK_END (top_stack->cur_block) = sh->value + top_stack->procadr;
1226 shrink_block (top_stack->cur_block, top_stack->cur_st);
1228 else if (sh->sc == scText && top_stack->blocktype == stNil)
1230 /* End of outermost block. Pop parse stack and ignore. The
1231 following stEnd of stProc will take care of the block. */
1234 else if (sh->sc == scText && top_stack->blocktype == stFile)
1236 /* End of file. Pop parse stack and ignore. Higher
1237 level code deals with this. */
1241 complain (&stEnd_complaint, sh->sc);
1243 pop_parse_stack (); /* restore previous lexical context */
1246 case stMember: /* member of struct or union */
1247 f = &TYPE_FIELDS (top_stack->cur_type)[top_stack->cur_field++];
1249 f->bitpos = sh->value;
1251 f->type = parse_type (cur_fd, ax, sh->index, &bitsize, bigend, name);
1252 f->bitsize = bitsize;
1255 case stIndirect: /* forward declaration on Irix5 */
1256 /* Forward declarations from Irix5 cc are handled by cross_ref,
1260 case stTypedef: /* type definition */
1261 found_ecoff_debugging_info = 1;
1263 /* Typedefs for forward declarations and opaque structs from alpha cc
1264 are handled by cross_ref, skip them. */
1268 /* Parse the type or use the pending type. */
1269 pend = is_pending_symbol (cur_fdr, ext_sh);
1270 if (pend == (struct mdebug_pending *) NULL)
1272 t = parse_type (cur_fd, ax, sh->index, (int *)NULL, bigend, name);
1273 add_pending (cur_fdr, ext_sh, t);
1278 /* mips cc puts out a typedef with the name of the struct for forward
1279 declarations. These should not go into the symbol table and
1280 TYPE_NAME should not be set for them.
1281 They can't be distinguished from an intentional typedef to
1282 the same name however:
1284 struct x { int ix; int jx; };
1288 struct xx {int ixx; int jxx; };
1289 generates a cross referencing stTypedef for x and xx.
1290 The user visible effect of this is that the type of a pointer
1291 to struct foo sometimes is given as `foo *' instead of `struct foo *'.
1292 The problem is fixed with alpha cc and Irix5 cc. */
1294 /* However if the typedef cross references to an opaque aggregate, it
1295 is safe to omit it from the symbol table. */
1297 if (has_opaque_xref (cur_fdr, sh))
1299 s = new_symbol (name);
1300 SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
1301 SYMBOL_CLASS (s) = LOC_TYPEDEF;
1302 SYMBOL_BLOCK_VALUE (s) = top_stack->cur_block;
1303 SYMBOL_TYPE (s) = t;
1304 add_symbol (s, top_stack->cur_block);
1306 /* Incomplete definitions of structs should not get a name. */
1307 if (TYPE_NAME (SYMBOL_TYPE (s)) == NULL
1308 && (TYPE_NFIELDS (SYMBOL_TYPE (s)) != 0
1309 || (TYPE_CODE (SYMBOL_TYPE (s)) != TYPE_CODE_STRUCT
1310 && TYPE_CODE (SYMBOL_TYPE (s)) != TYPE_CODE_UNION)))
1312 if (TYPE_CODE (SYMBOL_TYPE (s)) == TYPE_CODE_PTR
1313 || TYPE_CODE (SYMBOL_TYPE (s)) == TYPE_CODE_FUNC)
1315 /* If we are giving a name to a type such as "pointer to
1316 foo" or "function returning foo", we better not set
1317 the TYPE_NAME. If the program contains "typedef char
1318 *caddr_t;", we don't want all variables of type char
1319 * to print as caddr_t. This is not just a
1320 consequence of GDB's type management; CC and GCC (at
1321 least through version 2.4) both output variables of
1322 either type char * or caddr_t with the type
1323 refering to the stTypedef symbol for caddr_t. If a future
1324 compiler cleans this up it GDB is not ready for it
1325 yet, but if it becomes ready we somehow need to
1326 disable this check (without breaking the PCC/GCC2.4
1331 Fortunately, this check seems not to be necessary
1332 for anything except pointers or functions. */
1335 TYPE_NAME (SYMBOL_TYPE (s)) = SYMBOL_NAME (s);
1339 case stFile: /* file name */
1340 push_parse_stack ();
1341 top_stack->blocktype = sh->st;
1344 /* I`ve never seen these for C */
1346 break; /* register relocation */
1348 break; /* forwarding address */
1350 break; /* constant */
1352 complain (&unknown_mdebug_symtype_complaint, sh->st);
1359 /* Parse the type information provided in the raw AX entries for
1360 the symbol SH. Return the bitfield size in BS, in case.
1361 We must byte-swap the AX entries before we use them; BIGEND says whether
1362 they are big-endian or little-endian (from fh->fBigendian). */
1364 static struct type *
1365 parse_type (fd, ax, aux_index, bs, bigend, sym_name)
1368 unsigned int aux_index;
1373 /* Null entries in this map are treated specially */
1374 static struct type **map_bt[] =
1376 &builtin_type_void, /* btNil */
1378 &builtin_type_char, /* btChar */
1379 &builtin_type_unsigned_char,/* btUChar */
1380 &builtin_type_short, /* btShort */
1381 &builtin_type_unsigned_short, /* btUShort */
1382 &builtin_type_int, /* btInt */
1383 &builtin_type_unsigned_int, /* btUInt */
1384 &builtin_type_long, /* btLong */
1385 &builtin_type_unsigned_long,/* btULong */
1386 &builtin_type_float, /* btFloat */
1387 &builtin_type_double, /* btDouble */
1394 &builtin_type_complex, /* btComplex */
1395 &builtin_type_double_complex,/* btDComplex */
1397 &mdebug_type_fixed_dec, /* btFixedDec */
1398 &mdebug_type_float_dec, /* btFloatDec */
1399 &mdebug_type_string, /* btString */
1402 &builtin_type_void, /* btVoid */
1403 0, /* DEC C++: Pointer to member */
1404 0, /* DEC C++: Virtual function table */
1405 0, /* DEC C++: Class (Record) */
1406 &builtin_type_long, /* btLong64 */
1407 &builtin_type_unsigned_long, /* btULong64 */
1408 &builtin_type_long_long, /* btLongLong64 */
1409 &builtin_type_unsigned_long_long, /* btULongLong64 */
1410 &builtin_type_unsigned_long, /* btAdr64 */
1411 &builtin_type_long, /* btInt64 */
1412 &builtin_type_unsigned_long, /* btUInt64 */
1416 struct type *tp = 0;
1417 enum type_code type_code = TYPE_CODE_UNDEF;
1419 /* Handle undefined types, they have indexNil. */
1420 if (aux_index == indexNil)
1421 return builtin_type_int;
1423 /* Handle corrupt aux indices. */
1424 if (aux_index >= (debug_info->fdr + fd)->caux)
1426 complain (&index_complaint, sym_name);
1427 return builtin_type_int;
1431 /* Use aux as a type information record, map its basic type. */
1432 (*debug_swap->swap_tir_in) (bigend, &ax->a_ti, t);
1433 if (t->bt >= (sizeof (map_bt) / sizeof (*map_bt)))
1435 complain (&basic_type_complaint, t->bt, sym_name);
1436 return builtin_type_int;
1440 tp = *map_bt[t->bt];
1445 /* Cannot use builtin types -- build our own */
1449 tp = lookup_pointer_type (builtin_type_void);
1452 type_code = TYPE_CODE_STRUCT;
1455 type_code = TYPE_CODE_UNION;
1458 type_code = TYPE_CODE_ENUM;
1461 type_code = TYPE_CODE_RANGE;
1464 type_code = TYPE_CODE_SET;
1467 /* alpha cc uses this for typedefs. The true type will be
1468 obtained by crossreferencing below. */
1469 type_code = TYPE_CODE_ERROR;
1472 complain (&basic_type_complaint, t->bt, sym_name);
1473 return builtin_type_int;
1477 /* Move on to next aux */
1482 /* Inhibit core dumps with some cfront generated objects that
1484 if (bs == (int *)NULL)
1486 complain (&bad_fbitfield_complaint, sym_name);
1487 return builtin_type_int;
1489 *bs = AUX_GET_WIDTH (bigend, ax);
1493 /* All these types really point to some (common) MIPS type
1494 definition, and only the type-qualifiers fully identify
1495 them. We'll make the same effort at sharing. */
1496 if (t->bt == btStruct ||
1500 /* btSet (I think) implies that the name is a tag name, not a typedef
1501 name. This apparently is a MIPS extension for C sets. */
1506 /* Try to cross reference this type, build new type on failure. */
1507 ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
1508 if (tp == (struct type *) NULL)
1509 tp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
1511 /* DEC c89 produces cross references to qualified aggregate types,
1512 dereference them. */
1513 while (TYPE_CODE (tp) == TYPE_CODE_PTR
1514 || TYPE_CODE (tp) == TYPE_CODE_ARRAY)
1515 tp = tp->target_type;
1517 /* Make sure that TYPE_CODE(tp) has an expected type code.
1518 Any type may be returned from cross_ref if file indirect entries
1520 if (TYPE_CODE (tp) != TYPE_CODE_STRUCT
1521 && TYPE_CODE (tp) != TYPE_CODE_UNION
1522 && TYPE_CODE (tp) != TYPE_CODE_ENUM)
1524 complain (&unexpected_type_code_complaint, sym_name);
1529 /* Usually, TYPE_CODE(tp) is already type_code. The main
1530 exception is if we guessed wrong re struct/union/enum.
1531 But for struct vs. union a wrong guess is harmless, so
1532 don't complain(). */
1533 if ((TYPE_CODE (tp) == TYPE_CODE_ENUM
1534 && type_code != TYPE_CODE_ENUM)
1535 || (TYPE_CODE (tp) != TYPE_CODE_ENUM
1536 && type_code == TYPE_CODE_ENUM))
1538 complain (&bad_tag_guess_complaint, sym_name);
1541 if (TYPE_CODE (tp) != type_code)
1543 TYPE_CODE (tp) = type_code;
1546 /* Do not set the tag name if it is a compiler generated tag name
1547 (.Fxx or .xxfake or empty) for unnamed struct/union/enums. */
1548 if (name[0] == '.' || name[0] == '\0')
1549 TYPE_TAG_NAME (tp) = NULL;
1550 else if (TYPE_TAG_NAME (tp) == NULL
1551 || !STREQ (TYPE_TAG_NAME (tp), name))
1552 TYPE_TAG_NAME (tp) = obsavestring (name, strlen (name),
1553 ¤t_objfile->type_obstack);
1557 /* All these types really point to some (common) MIPS type
1558 definition, and only the type-qualifiers fully identify
1559 them. We'll make the same effort at sharing.
1560 FIXME: btIndirect cannot happen here as it is handled by the
1561 switch t->bt above. And we are not doing any guessing on range types. */
1562 if (t->bt == btIndirect ||
1567 /* Try to cross reference this type, build new type on failure. */
1568 ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
1569 if (tp == (struct type *) NULL)
1570 tp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
1572 /* Make sure that TYPE_CODE(tp) has an expected type code.
1573 Any type may be returned from cross_ref if file indirect entries
1575 if (TYPE_CODE (tp) != TYPE_CODE_RANGE)
1577 complain (&unexpected_type_code_complaint, sym_name);
1581 /* Usually, TYPE_CODE(tp) is already type_code. The main
1582 exception is if we guessed wrong re struct/union/enum. */
1583 if (TYPE_CODE (tp) != type_code)
1585 complain (&bad_tag_guess_complaint, sym_name);
1586 TYPE_CODE (tp) = type_code;
1588 if (TYPE_NAME (tp) == NULL || !STREQ (TYPE_NAME (tp), name))
1589 TYPE_NAME (tp) = obsavestring (name, strlen (name),
1590 ¤t_objfile->type_obstack);
1593 if (t->bt == btTypedef)
1597 /* Try to cross reference this type, it should succeed. */
1598 ax += cross_ref (fd, ax, &tp, type_code, &name, bigend, sym_name);
1599 if (tp == (struct type *) NULL)
1601 complain (&unable_to_cross_ref_complaint, sym_name);
1602 tp = builtin_type_int;
1606 /* Deal with range types */
1607 if (t->bt == btRange)
1609 TYPE_NFIELDS (tp) = 2;
1610 TYPE_FIELDS (tp) = ((struct field *)
1611 TYPE_ALLOC (tp, 2 * sizeof (struct field)));
1612 TYPE_FIELD_NAME (tp, 0) = obsavestring ("Low", strlen ("Low"),
1613 ¤t_objfile->type_obstack);
1614 TYPE_FIELD_BITPOS (tp, 0) = AUX_GET_DNLOW (bigend, ax);
1616 TYPE_FIELD_NAME (tp, 1) = obsavestring ("High", strlen ("High"),
1617 ¤t_objfile->type_obstack);
1618 TYPE_FIELD_BITPOS (tp, 1) = AUX_GET_DNHIGH (bigend, ax);
1622 /* Parse all the type qualifiers now. If there are more
1623 than 6 the game will continue in the next aux */
1627 #define PARSE_TQ(tq) \
1628 if (t->tq != tqNil) \
1629 ax += upgrade_type(fd, &tp, t->tq, ax, bigend, sym_name); \
1641 /* mips cc 2.x and gcc never put out continued aux entries. */
1645 (*debug_swap->swap_tir_in) (bigend, &ax->a_ti, t);
1649 /* Complain for illegal continuations due to corrupt aux entries. */
1651 complain (&bad_continued_complaint, sym_name);
1656 /* Make up a complex type from a basic one. Type is passed by
1657 reference in TPP and side-effected as necessary. The type
1658 qualifier TQ says how to handle the aux symbols at AX for
1659 the symbol SX we are currently analyzing. BIGEND says whether
1660 aux symbols are big-endian or little-endian.
1661 Returns the number of aux symbols we parsed. */
1664 upgrade_type (fd, tpp, tq, ax, bigend, sym_name)
1675 /* Used in array processing */
1686 t = lookup_pointer_type (*tpp);
1691 t = lookup_function_type (*tpp);
1698 /* Determine and record the domain type (type of index) */
1699 (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, &rndx);
1705 rf = AUX_GET_ISYM (bigend, ax);
1708 fh = get_rfd (fd, rf);
1710 indx = parse_type (fd, debug_info->external_aux + fh->iauxBase,
1711 id, (int *) NULL, bigend, sym_name);
1713 /* The bounds type should be an integer type, but might be anything
1714 else due to corrupt aux entries. */
1715 if (TYPE_CODE (indx) != TYPE_CODE_INT)
1717 complain (&array_index_type_complaint, sym_name);
1718 indx = builtin_type_int;
1721 /* Get the bounds, and create the array type. */
1723 lower = AUX_GET_DNLOW (bigend, ax);
1725 upper = AUX_GET_DNHIGH (bigend, ax);
1727 rf = AUX_GET_WIDTH (bigend, ax); /* bit size of array element */
1729 range = create_range_type ((struct type *) NULL, indx,
1732 t = create_array_type ((struct type *) NULL, *tpp, range);
1734 /* We used to fill in the supplied array element bitsize
1735 here if the TYPE_LENGTH of the target type was zero.
1736 This happens for a `pointer to an array of anonymous structs',
1737 but in this case the array element bitsize is also zero,
1738 so nothing is gained.
1739 And we used to check the TYPE_LENGTH of the target type against
1740 the supplied array element bitsize.
1741 gcc causes a mismatch for `pointer to array of object',
1742 since the sdb directives it uses do not have a way of
1743 specifying the bitsize, but it does no harm (the
1744 TYPE_LENGTH should be correct) and we should be able to
1745 ignore the erroneous bitsize from the auxiliary entry safely.
1746 dbx seems to ignore it too. */
1752 /* Volatile -- currently ignored */
1756 /* Const -- currently ignored */
1760 complain (&unknown_type_qual_complaint, tq);
1766 /* Parse a procedure descriptor record PR. Note that the procedure is
1767 parsed _after_ the local symbols, now we just insert the extra
1768 information we need into a MIPS_EFI_SYMBOL_NAME symbol that has
1769 already been placed in the procedure's main block. Note also that
1770 images that have been partially stripped (ld -x) have been deprived
1771 of local symbols, and we have to cope with them here. FIRST_OFF is
1772 the offset of the first procedure for this FDR; we adjust the
1773 address by this amount, but I don't know why. SEARCH_SYMTAB is the symtab
1774 to look for the function which contains the MIPS_EFI_SYMBOL_NAME symbol
1775 in question, or NULL to use top_stack->cur_block. */
1777 static void parse_procedure PARAMS ((PDR *, struct symtab *, unsigned long,
1778 struct partial_symtab *));
1781 parse_procedure (pr, search_symtab, first_off, pst)
1783 struct symtab *search_symtab;
1784 unsigned long first_off;
1785 struct partial_symtab *pst;
1787 struct symbol *s, *i;
1789 struct mips_extra_func_info *e;
1792 /* Simple rule to find files linked "-x" */
1793 if (cur_fdr->rss == -1)
1797 /* Static procedure at address pr->adr. Sigh. */
1798 /* FIXME-32x64. assuming pr->adr fits in long. */
1799 complain (&pdr_static_symbol_complaint, (unsigned long) pr->adr);
1807 (*debug_swap->swap_ext_in) (cur_bfd,
1808 ((char *) debug_info->external_ext
1810 * debug_swap->external_ext_size)),
1812 sh_name = debug_info->ssext + she.asym.iss;
1820 (*debug_swap->swap_sym_in) (cur_bfd,
1821 ((char *) debug_info->external_sym
1822 + ((cur_fdr->isymBase + pr->isym)
1823 * debug_swap->external_sym_size)),
1825 sh_name = debug_info->ss + cur_fdr->issBase + sh.iss;
1828 if (search_symtab != NULL)
1831 /* This loses both in the case mentioned (want a static, find a global),
1832 but also if we are looking up a non-mangled name which happens to
1833 match the name of a mangled function. */
1834 /* We have to save the cur_fdr across the call to lookup_symbol.
1835 If the pdr is for a static function and if a global function with
1836 the same name exists, lookup_symbol will eventually read in the symtab
1837 for the global function and clobber cur_fdr. */
1838 FDR *save_cur_fdr = cur_fdr;
1839 s = lookup_symbol (sh_name, NULL, VAR_NAMESPACE, 0, NULL);
1840 cur_fdr = save_cur_fdr;
1844 BLOCKVECTOR_BLOCK (BLOCKVECTOR (search_symtab), STATIC_BLOCK),
1850 s = mylookup_symbol (sh_name, top_stack->cur_block,
1851 VAR_NAMESPACE, LOC_BLOCK);
1855 b = SYMBOL_BLOCK_VALUE (s);
1859 complain (&pdr_for_nonsymbol_complaint, sh_name);
1863 /* FIXME -- delete. We can't do symbol allocation now; it's all done. */
1864 s = new_symbol (sh_name);
1865 SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
1866 SYMBOL_CLASS (s) = LOC_BLOCK;
1867 /* Donno its type, hope int is ok */
1868 SYMBOL_TYPE (s) = lookup_function_type (builtin_type_int);
1869 add_symbol (s, top_stack->cur_block);
1870 /* Wont have symbols for this one */
1872 SYMBOL_BLOCK_VALUE (s) = b;
1873 BLOCK_FUNCTION (b) = s;
1874 BLOCK_START (b) = pr->adr;
1875 /* BOUND used to be the end of procedure's text, but the
1876 argument is no longer passed in. */
1877 BLOCK_END (b) = bound;
1878 BLOCK_SUPERBLOCK (b) = top_stack->cur_block;
1879 add_block (b, top_stack->cur_st);
1883 i = mylookup_symbol (MIPS_EFI_SYMBOL_NAME, b, LABEL_NAMESPACE, LOC_CONST);
1887 e = (struct mips_extra_func_info *) SYMBOL_VALUE (i);
1889 e->pdr.isym = (long) s;
1890 e->pdr.adr += pst->textlow - first_off;
1892 /* Correct incorrect setjmp procedure descriptor from the library
1893 to make backtrace through setjmp work. */
1894 if (e->pdr.pcreg == 0 && STREQ (sh_name, "setjmp"))
1896 complain (&bad_setjmp_pdr_complaint, 0);
1897 e->pdr.pcreg = RA_REGNUM;
1898 e->pdr.regmask = 0x80000000;
1899 e->pdr.regoffset = -4;
1903 /* It would be reasonable that functions that have been compiled
1904 without debugging info have a btNil type for their return value,
1905 and functions that are void and are compiled with debugging info
1907 gcc and DEC f77 put out btNil types for both cases, so btNil is mapped
1908 to TYPE_CODE_VOID in parse_type to get the `compiled with debugging info'
1910 The glevel field in cur_fdr could be used to determine the presence
1911 of debugging info, but GCC doesn't always pass the -g switch settings
1912 to the assembler and GAS doesn't set the glevel field from the -g switch
1914 To work around these problems, the return value type of a TYPE_CODE_VOID
1915 function is adjusted accordingly if no debugging info was found in the
1916 compilation unit. */
1918 if (processing_gcc_compilation == 0
1919 && found_ecoff_debugging_info == 0
1920 && TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (s))) == TYPE_CODE_VOID)
1921 SYMBOL_TYPE (s) = nodebug_func_symbol_type;
1924 /* Relocate the extra function info pointed to by the symbol table. */
1927 ecoff_relocate_efi (sym, delta)
1931 struct mips_extra_func_info *e;
1933 e = (struct mips_extra_func_info *) SYMBOL_VALUE (sym);
1935 e->pdr.adr += delta;
1938 /* Parse the external symbol ES. Just call parse_symbol() after
1939 making sure we know where the aux are for it.
1940 BIGEND says whether aux entries are big-endian or little-endian.
1942 This routine clobbers top_stack->cur_block and ->cur_st. */
1944 static void parse_external PARAMS ((EXTR *, int, struct section_offsets *));
1947 parse_external (es, bigend, section_offsets)
1950 struct section_offsets *section_offsets;
1954 if (es->ifd != ifdNil)
1957 cur_fdr = debug_info->fdr + cur_fd;
1958 ax = debug_info->external_aux + cur_fdr->iauxBase;
1962 cur_fdr = debug_info->fdr;
1966 /* Reading .o files */
1967 if (es->asym.sc == scUndefined || es->asym.sc == scNil)
1970 switch (es->asym.st)
1973 /* These are generated for static symbols in .o files,
1994 /* FIXME: Turn this into a complaint? */
1996 printf_filtered ("Warning: %s `%s' is undefined (in %s)\n",
1997 what, debug_info->ssext + es->asym.iss,
1998 fdr_name (cur_fdr));
2002 switch (es->asym.st)
2006 /* There is no need to parse the external procedure symbols.
2007 If they are from objects compiled without -g, their index will
2008 be indexNil, and the symbol definition from the minimal symbol
2009 is preferrable (yielding a function returning int instead of int).
2010 If the index points to a local procedure symbol, the local
2011 symbol already provides the correct type.
2012 Note that the index of the external procedure symbol points
2013 to the local procedure symbol in the local symbol table, and
2014 _not_ to the auxiliary symbol info. */
2018 /* Global common symbols are resolved by the runtime loader,
2020 if (es->asym.sc == scCommon || es->asym.sc == scSCommon)
2023 /* Note that the case of a symbol with indexNil must be handled
2024 anyways by parse_symbol(). */
2025 parse_symbol (&es->asym, ax, (char *) NULL, bigend, section_offsets);
2032 /* Parse the line number info for file descriptor FH into
2033 GDB's linetable LT. MIPS' encoding requires a little bit
2034 of magic to get things out. Note also that MIPS' line
2035 numbers can go back and forth, apparently we can live
2036 with that and do not need to reorder our linetables */
2038 static void parse_lines PARAMS ((FDR *, PDR *, struct linetable *, int,
2039 struct partial_symtab *));
2042 parse_lines (fh, pr, lt, maxlines, pst)
2045 struct linetable *lt;
2047 struct partial_symtab *pst;
2049 unsigned char *base;
2051 int delta, count, lineno = 0;
2052 unsigned long first_off = pr->adr;
2054 if (fh->cbLine == 0)
2057 /* Scan by procedure descriptors */
2059 for (j = 0; j < fh->cpd; j++, pr++)
2063 unsigned char *halt;
2065 /* No code for this one */
2066 if (pr->iline == ilineNil ||
2067 pr->lnLow == -1 || pr->lnHigh == -1)
2070 /* Determine start and end address of compressed line bytes for
2072 base = debug_info->line + fh->cbLineOffset;
2073 if (j != (fh->cpd - 1))
2074 halt = base + pr[1].cbLineOffset;
2076 halt = base + fh->cbLine;
2077 base += pr->cbLineOffset;
2079 adr = pst->textlow + pr->adr - first_off;
2081 l = adr >> 2; /* in words */
2082 for (lineno = pr->lnLow; base < halt; )
2084 count = *base & 0x0f;
2085 delta = *base++ >> 4;
2090 delta = (base[0] << 8) | base[1];
2091 if (delta >= 0x8000)
2095 lineno += delta; /* first delta is 0 */
2097 /* Complain if the line table overflows. Could happen
2098 with corrupt binaries. */
2099 if (lt->nitems >= maxlines)
2101 complain (&bad_linetable_guess_complaint, fdr_name (fh));
2104 k = add_line (lt, lineno, l, k);
2110 /* Master parsing procedure for first-pass reading of file symbols
2111 into a partial_symtab. */
2114 parse_partial_symbols (objfile, section_offsets)
2115 struct objfile *objfile;
2116 struct section_offsets *section_offsets;
2118 const bfd_size_type external_sym_size = debug_swap->external_sym_size;
2119 const bfd_size_type external_rfd_size = debug_swap->external_rfd_size;
2120 const bfd_size_type external_ext_size = debug_swap->external_ext_size;
2121 void (* const swap_ext_in) PARAMS ((bfd *, PTR, EXTR *))
2122 = debug_swap->swap_ext_in;
2123 void (* const swap_sym_in) PARAMS ((bfd *, PTR, SYMR *))
2124 = debug_swap->swap_sym_in;
2125 void (* const swap_rfd_in) PARAMS ((bfd *, PTR, RFDT *))
2126 = debug_swap->swap_rfd_in;
2128 HDRR *hdr = &debug_info->symbolic_header;
2129 /* Running pointers */
2134 register EXTR *ext_in;
2137 struct partial_symtab *pst;
2139 int past_first_source_file = 0;
2141 /* List of current psymtab's include files */
2142 char **psymtab_include_list;
2143 int includes_allocated;
2146 struct pst_map *fdr_to_pst;
2147 /* Index within current psymtab dependency list */
2148 struct partial_symtab **dependency_list;
2149 int dependencies_used, dependencies_allocated;
2150 struct cleanup *old_chain;
2152 enum language prev_language;
2153 asection *text_sect;
2154 int relocatable = 0;
2156 /* Irix 5.2 shared libraries have a fh->adr field of zero, but
2157 the shared libraries are prelinked at a high memory address.
2158 We have to adjust the start address of the object file for this case,
2159 by setting it to the start address of the first procedure in the file.
2160 But we should do no adjustments if we are debugging a .o file, where
2161 the text section (and fh->adr) really starts at zero. */
2162 text_sect = bfd_get_section_by_name (cur_bfd, ".text");
2163 if (text_sect != NULL
2164 && (bfd_get_section_flags (cur_bfd, text_sect) & SEC_RELOC))
2167 extern_tab = (EXTR *) obstack_alloc (&objfile->psymbol_obstack,
2168 sizeof (EXTR) * hdr->iextMax);
2170 includes_allocated = 30;
2172 psymtab_include_list = (char **) alloca (includes_allocated *
2174 next_symbol_text_func = mdebug_next_symbol_text;
2176 dependencies_allocated = 30;
2177 dependencies_used = 0;
2179 (struct partial_symtab **) alloca (dependencies_allocated *
2180 sizeof (struct partial_symtab *));
2182 last_source_file = NULL;
2187 * Only parse the Local and External symbols, and the Relative FDR.
2188 * Fixup enough of the loader symtab to be able to use it.
2189 * Allocate space only for the file's portions we need to
2194 max_glevel = MIN_GLEVEL;
2196 /* Allocate the map FDR -> PST.
2197 Minor hack: -O3 images might claim some global data belongs
2198 to FDR -1. We`ll go along with that */
2199 fdr_to_pst = (struct pst_map *) xzalloc ((hdr->ifdMax + 1) * sizeof *fdr_to_pst);
2200 old_chain = make_cleanup (free, fdr_to_pst);
2203 struct partial_symtab *pst = new_psymtab ("", objfile, section_offsets);
2204 fdr_to_pst[-1].pst = pst;
2208 /* Allocate the global pending list. */
2210 ((struct mdebug_pending **)
2211 obstack_alloc (&objfile->psymbol_obstack,
2212 hdr->ifdMax * sizeof (struct mdebug_pending *)));
2213 memset ((PTR) pending_list, 0,
2214 hdr->ifdMax * sizeof (struct mdebug_pending *));
2216 /* Pass 0 over external syms: swap them in. */
2217 ext_block = (EXTR *) xmalloc (hdr->iextMax * sizeof (EXTR));
2218 make_cleanup (free, ext_block);
2220 ext_out = (char *) debug_info->external_ext;
2221 ext_out_end = ext_out + hdr->iextMax * external_ext_size;
2223 for (; ext_out < ext_out_end; ext_out += external_ext_size, ext_in++)
2224 (*swap_ext_in) (cur_bfd, ext_out, ext_in);
2226 /* Pass 1 over external syms: Presize and partition the list */
2228 ext_in_end = ext_in + hdr->iextMax;
2229 for (; ext_in < ext_in_end; ext_in++)
2231 /* See calls to complain below. */
2232 if (ext_in->ifd >= -1
2233 && ext_in->ifd < hdr->ifdMax
2234 && ext_in->asym.iss >= 0
2235 && ext_in->asym.iss < hdr->issExtMax)
2236 fdr_to_pst[ext_in->ifd].n_globals++;
2239 /* Pass 1.5 over files: partition out global symbol space */
2241 for (f_idx = -1; f_idx < hdr->ifdMax; f_idx++)
2243 fdr_to_pst[f_idx].globals_offset = s_idx;
2244 s_idx += fdr_to_pst[f_idx].n_globals;
2245 fdr_to_pst[f_idx].n_globals = 0;
2248 /* Pass 2 over external syms: fill in external symbols */
2250 ext_in_end = ext_in + hdr->iextMax;
2251 for (; ext_in < ext_in_end; ext_in++)
2253 enum minimal_symbol_type ms_type = mst_text;
2254 CORE_ADDR svalue = ext_in->asym.value;
2256 /* The Irix 5 native tools seem to sometimes generate bogus
2257 external symbols. */
2258 if (ext_in->ifd < -1 || ext_in->ifd >= hdr->ifdMax)
2260 complain (&bad_ext_ifd_complaint, ext_in->ifd, hdr->ifdMax);
2263 if (ext_in->asym.iss < 0 || ext_in->asym.iss >= hdr->issExtMax)
2265 complain (&bad_ext_iss_complaint, ext_in->asym.iss,
2270 extern_tab[fdr_to_pst[ext_in->ifd].globals_offset
2271 + fdr_to_pst[ext_in->ifd].n_globals++] = *ext_in;
2273 if (ext_in->asym.sc == scUndefined || ext_in->asym.sc == scNil)
2276 name = debug_info->ssext + ext_in->asym.iss;
2277 switch (ext_in->asym.st)
2280 svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2283 ms_type = mst_file_text;
2284 svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2287 if (ext_in->asym.sc == scCommon || ext_in->asym.sc == scSCommon)
2289 /* The value of a common symbol is its size, not its address.
2293 else if (ext_in->asym.sc == scData
2294 || ext_in->asym.sc == scSData
2295 || ext_in->asym.sc == scRData
2296 || ext_in->asym.sc == scPData
2297 || ext_in->asym.sc == scXData)
2300 svalue += ANOFFSET (section_offsets, SECT_OFF_DATA);
2305 svalue += ANOFFSET (section_offsets, SECT_OFF_BSS);
2309 if (ext_in->asym.sc == scAbs)
2311 else if (ext_in->asym.sc == scText
2312 || ext_in->asym.sc == scInit
2313 || ext_in->asym.sc == scFini)
2315 ms_type = mst_file_text;
2316 svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2318 else if (ext_in->asym.sc == scData
2319 || ext_in->asym.sc == scSData
2320 || ext_in->asym.sc == scRData
2321 || ext_in->asym.sc == scPData
2322 || ext_in->asym.sc == scXData)
2324 ms_type = mst_file_data;
2325 svalue += ANOFFSET (section_offsets, SECT_OFF_DATA);
2329 ms_type = mst_file_bss;
2330 svalue += ANOFFSET (section_offsets, SECT_OFF_BSS);
2334 /* The alpha has the section start addresses in stLocal symbols
2335 whose name starts with a `.'. Skip those but complain for all
2336 other stLocal symbols. */
2341 ms_type = mst_unknown;
2342 complain (&unknown_ext_complaint, name);
2344 prim_record_minimal_symbol (name, svalue, ms_type, objfile);
2347 /* Pass 3 over files, over local syms: fill in static symbols */
2348 for (f_idx = 0; f_idx < hdr->ifdMax; f_idx++)
2350 struct partial_symtab *save_pst;
2354 cur_fdr = fh = debug_info->fdr + f_idx;
2358 fdr_to_pst[f_idx].pst = NULL;
2362 /* Determine the start address for this object file from the
2363 file header and relocate it, except for Irix 5.2 zero fh->adr. */
2367 if (relocatable || textlow != 0)
2368 textlow += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2372 pst = start_psymtab_common (objfile, section_offsets,
2375 objfile->global_psymbols.next,
2376 objfile->static_psymbols.next);
2377 pst->read_symtab_private = ((char *)
2378 obstack_alloc (&objfile->psymbol_obstack,
2379 sizeof (struct symloc)));
2380 memset ((PTR) pst->read_symtab_private, 0, sizeof (struct symloc));
2383 FDR_IDX (pst) = f_idx;
2384 CUR_BFD (pst) = cur_bfd;
2385 DEBUG_SWAP (pst) = debug_swap;
2386 DEBUG_INFO (pst) = debug_info;
2387 PENDING_LIST (pst) = pending_list;
2389 /* The way to turn this into a symtab is to call... */
2390 pst->read_symtab = mdebug_psymtab_to_symtab;
2392 /* Set up language for the pst.
2393 The language from the FDR is used if it is unambigious (e.g. cfront
2394 with native cc and g++ will set the language to C).
2395 Otherwise we have to deduce the language from the filename.
2396 Native ecoff has every header file in a separate FDR, so
2397 deduce_language_from_filename will return language_unknown for
2398 a header file, which is not what we want.
2399 But the FDRs for the header files are after the FDR for the source
2400 file, so we can assign the language of the source file to the
2401 following header files. Then we save the language in the private
2402 pst data so that we can reuse it when building symtabs. */
2403 prev_language = psymtab_language;
2407 case langCplusplusV2:
2408 psymtab_language = language_cplus;
2411 psymtab_language = deduce_language_from_filename (fdr_name (fh));
2414 if (psymtab_language == language_unknown)
2415 psymtab_language = prev_language;
2416 PST_PRIVATE (pst)->pst_language = psymtab_language;
2418 pst->texthigh = pst->textlow;
2420 /* For stabs-in-ecoff files, the second symbol must be @stab.
2421 This symbol is emitted by mips-tfile to signal that the
2422 current object file uses encapsulated stabs instead of mips
2423 ecoff for local symbols. (It is the second symbol because
2424 the first symbol is the stFile used to signal the start of a
2426 processing_gcc_compilation = 0;
2429 (*swap_sym_in) (cur_bfd,
2430 ((char *) debug_info->external_sym
2431 + (fh->isymBase + 1) * external_sym_size),
2433 if (STREQ (debug_info->ss + fh->issBase + sh.iss, stabs_symbol))
2434 processing_gcc_compilation = 2;
2437 if (processing_gcc_compilation != 0)
2439 for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
2444 (*swap_sym_in) (cur_bfd,
2445 (((char *) debug_info->external_sym)
2446 + (fh->isymBase + cur_sdx) * external_sym_size),
2448 type_code = ECOFF_UNMARK_STAB (sh.index);
2449 if (!ECOFF_IS_STAB (&sh))
2451 if (sh.st == stProc || sh.st == stStaticProc)
2456 sh.value += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2457 if (sh.st == stStaticProc)
2459 namestring = debug_info->ss + fh->issBase + sh.iss;
2460 prim_record_minimal_symbol_and_info (namestring,
2467 procaddr = sh.value;
2469 isym = AUX_GET_ISYM (fh->fBigendian,
2470 (debug_info->external_aux
2473 (*swap_sym_in) (cur_bfd,
2474 ((char *) debug_info->external_sym
2475 + ((fh->isymBase + isym - 1)
2476 * external_sym_size)),
2480 long high = procaddr + sh.value;
2482 /* Kludge for Irix 5.2 zero fh->adr. */
2484 && (pst->textlow == 0 || procaddr < pst->textlow))
2485 pst->textlow = procaddr;
2486 if (high > pst->texthigh)
2487 pst->texthigh = high;
2490 else if (sh.st == stStatic)
2504 namestring = debug_info->ss + fh->issBase + sh.iss;
2505 sh.value += ANOFFSET (section_offsets, SECT_OFF_DATA);
2506 prim_record_minimal_symbol_and_info (namestring,
2515 namestring = debug_info->ss + fh->issBase + sh.iss;
2516 sh.value += ANOFFSET (section_offsets, SECT_OFF_BSS);
2517 prim_record_minimal_symbol_and_info (namestring,
2528 #define SET_NAMESTRING() \
2529 namestring = debug_info->ss + fh->issBase + sh.iss
2530 #define CUR_SYMBOL_TYPE type_code
2531 #define CUR_SYMBOL_VALUE sh.value
2532 #define START_PSYMTAB(ofile,secoff,fname,low,symoff,global_syms,static_syms)\
2534 #define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps) (void)0
2535 #define HANDLE_RBRAC(val) \
2536 if ((val) > save_pst->texthigh) save_pst->texthigh = (val);
2537 #include "partial-stab.h"
2542 for (cur_sdx = 0; cur_sdx < fh->csym;)
2545 enum address_class class;
2547 (*swap_sym_in) (cur_bfd,
2548 ((char *) debug_info->external_sym
2549 + ((fh->isymBase + cur_sdx)
2550 * external_sym_size)),
2553 if (ECOFF_IS_STAB (&sh))
2559 /* Non absolute static symbols go into the minimal table. */
2560 if (sh.sc == scUndefined || sh.sc == scNil
2561 || (sh.index == indexNil
2562 && (sh.st != stStatic || sh.sc == scAbs)))
2564 /* FIXME, premature? */
2569 name = debug_info->ss + fh->issBase + sh.iss;
2574 /* The value of a stEnd symbol is the displacement from the
2575 corresponding start symbol value, do not relocate it. */
2577 sh.value += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2584 sh.value += ANOFFSET (section_offsets, SECT_OFF_DATA);
2588 sh.value += ANOFFSET (section_offsets, SECT_OFF_BSS);
2599 prim_record_minimal_symbol_and_info (name, sh.value,
2600 mst_file_text, NULL,
2601 SECT_OFF_TEXT, objfile);
2606 /* Usually there is a local and a global stProc symbol
2607 for a function. This means that the function name
2608 has already been entered into the mimimal symbol table
2609 while processing the global symbols in pass 2 above.
2610 One notable exception is the PROGRAM name from
2611 f77 compiled executables, it is only put out as
2612 local stProc symbol, and a global MAIN__ stProc symbol
2613 points to it. It doesn't matter though, as gdb is
2614 still able to find the PROGRAM name via the partial
2615 symbol table, and the MAIN__ symbol via the minimal
2617 if (sh.st == stProc)
2618 ADD_PSYMBOL_TO_LIST (name, strlen (name),
2619 VAR_NAMESPACE, LOC_BLOCK,
2620 objfile->global_psymbols,
2621 sh.value, psymtab_language, objfile);
2623 ADD_PSYMBOL_TO_LIST (name, strlen (name),
2624 VAR_NAMESPACE, LOC_BLOCK,
2625 objfile->static_psymbols,
2626 sh.value, psymtab_language, objfile);
2628 /* Skip over procedure to next one. */
2629 if (sh.index >= hdr->iauxMax)
2631 /* Should not happen, but does when cross-compiling
2632 with the MIPS compiler. FIXME -- pull later. */
2633 complain (&index_complaint, name);
2634 new_sdx = cur_sdx + 1; /* Don't skip at all */
2637 new_sdx = AUX_GET_ISYM (fh->fBigendian,
2638 (debug_info->external_aux
2641 procaddr = sh.value;
2643 if (new_sdx <= cur_sdx)
2645 /* This should not happen either... FIXME. */
2646 complain (&aux_index_complaint, name);
2647 new_sdx = cur_sdx + 1; /* Don't skip backward */
2651 (*swap_sym_in) (cur_bfd,
2652 ((char *) debug_info->external_sym
2653 + ((fh->isymBase + cur_sdx - 1)
2654 * external_sym_size)),
2659 /* Kludge for Irix 5.2 zero fh->adr. */
2661 && (pst->textlow == 0 || procaddr < pst->textlow))
2662 pst->textlow = procaddr;
2664 high = procaddr + sh.value;
2665 if (high > pst->texthigh)
2666 pst->texthigh = high;
2669 case stStatic: /* Variable */
2674 || sh.sc == scXData)
2675 prim_record_minimal_symbol_and_info (name, sh.value,
2676 mst_file_data, NULL,
2680 prim_record_minimal_symbol_and_info (name, sh.value,
2687 case stIndirect:/* Irix5 forward declaration */
2688 /* Skip forward declarations from Irix5 cc */
2691 case stTypedef:/* Typedef */
2692 /* Skip typedefs for forward declarations and opaque
2693 structs from alpha and mips cc. */
2694 if (sh.iss == 0 || has_opaque_xref (fh, &sh))
2696 class = LOC_TYPEDEF;
2699 case stConstant: /* Constant decl */
2706 case stBlock: /* { }, str, un, enum*/
2707 /* Do not create a partial symbol for cc unnamed aggregates
2708 and gcc empty aggregates. */
2709 if ((sh.sc == scInfo
2710 || sh.sc == scCommon || sh.sc == scSCommon)
2712 && sh.index != cur_sdx + 2)
2714 ADD_PSYMBOL_TO_LIST (name, strlen (name),
2715 STRUCT_NAMESPACE, LOC_TYPEDEF,
2716 objfile->static_psymbols,
2718 psymtab_language, objfile);
2720 handle_psymbol_enumerators (objfile, fh, sh.st);
2722 /* Skip over the block */
2724 if (new_sdx <= cur_sdx)
2726 /* This happens with the Ultrix kernel. */
2727 complain (&block_index_complaint, name);
2728 new_sdx = cur_sdx + 1; /* Don't skip backward */
2733 case stFile: /* File headers */
2734 case stLabel: /* Labels */
2735 case stEnd: /* Ends of files */
2738 case stLocal: /* Local variables */
2739 /* Normally these are skipped because we skip over
2740 all blocks we see. However, these can occur
2741 as visible symbols in a .h file that contains code. */
2745 /* Both complaints are valid: one gives symbol name,
2746 the other the offending symbol type. */
2747 complain (&unknown_sym_complaint, name);
2748 complain (&unknown_st_complaint, sh.st);
2752 /* Use this gdb symbol */
2753 ADD_PSYMBOL_TO_LIST (name, strlen (name),
2754 VAR_NAMESPACE, class,
2755 objfile->static_psymbols, sh.value,
2756 psymtab_language, objfile);
2758 cur_sdx++; /* Go to next file symbol */
2761 /* Now do enter the external symbols. */
2762 ext_ptr = &extern_tab[fdr_to_pst[f_idx].globals_offset];
2763 cur_sdx = fdr_to_pst[f_idx].n_globals;
2764 PST_PRIVATE (save_pst)->extern_count = cur_sdx;
2765 PST_PRIVATE (save_pst)->extern_tab = ext_ptr;
2766 for (; --cur_sdx >= 0; ext_ptr++)
2768 enum address_class class;
2773 if (ext_ptr->ifd != f_idx)
2775 psh = &ext_ptr->asym;
2777 /* Do not add undefined symbols to the partial symbol table. */
2778 if (psh->sc == scUndefined || psh->sc == scNil)
2781 svalue = psh->value;
2785 svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2792 svalue += ANOFFSET (section_offsets, SECT_OFF_DATA);
2796 svalue += ANOFFSET (section_offsets, SECT_OFF_BSS);
2803 /* These are generated for static symbols in .o files,
2808 /* External procedure symbols have been entered
2809 into the minimal symbol table in pass 2 above.
2810 Ignore them, as parse_external will ignore them too. */
2816 complain (&unknown_ext_complaint,
2817 debug_info->ssext + psh->iss);
2818 /* Fall through, pretend it's global. */
2820 /* Global common symbols are resolved by the runtime loader,
2822 if (psh->sc == scCommon || psh->sc == scSCommon)
2828 name = debug_info->ssext + psh->iss;
2829 ADD_PSYMBOL_ADDR_TO_LIST (name, strlen (name),
2830 VAR_NAMESPACE, class,
2831 objfile->global_psymbols,
2833 psymtab_language, objfile);
2837 /* Link pst to FDR. end_psymtab returns NULL if the psymtab was
2838 empty and put on the free list. */
2839 fdr_to_pst[f_idx].pst = end_psymtab (save_pst,
2840 psymtab_include_list, includes_used,
2841 -1, save_pst->texthigh,
2842 dependency_list, dependencies_used);
2843 if (objfile->ei.entry_point >= save_pst->textlow &&
2844 objfile->ei.entry_point < save_pst->texthigh)
2846 objfile->ei.entry_file_lowpc = save_pst->textlow;
2847 objfile->ei.entry_file_highpc = save_pst->texthigh;
2850 /* The objfile has its functions reordered if this partial symbol
2851 table overlaps any other partial symbol table.
2852 We cannot assume a reordered objfile if a partial symbol table
2853 is contained within another partial symbol table, as partial symbol
2854 tables for include files with executable code are contained
2855 within the partial symbol table for the including source file,
2856 and we do not want to flag the objfile reordered for these cases.
2858 This strategy works well for Irix-5.2 shared libraries, but we
2859 might have to use a more elaborate (and slower) algorithm for
2861 save_pst = fdr_to_pst[f_idx].pst;
2862 if (save_pst != NULL
2863 && save_pst->textlow != 0
2864 && !(objfile->flags & OBJF_REORDERED))
2866 ALL_OBJFILE_PSYMTABS (objfile, pst)
2869 && save_pst->textlow >= pst->textlow
2870 && save_pst->textlow < pst->texthigh
2871 && save_pst->texthigh > pst->texthigh)
2873 objfile->flags |= OBJF_REORDERED;
2880 /* Now scan the FDRs for dependencies */
2881 for (f_idx = 0; f_idx < hdr->ifdMax; f_idx++)
2883 fh = f_idx + debug_info->fdr;
2884 pst = fdr_to_pst[f_idx].pst;
2886 if (pst == (struct partial_symtab *)NULL)
2889 /* This should catch stabs-in-ecoff. */
2893 /* Skip the first file indirect entry as it is a self dependency
2894 for source files or a reverse .h -> .c dependency for header files. */
2895 pst->number_of_dependencies = 0;
2897 ((struct partial_symtab **)
2898 obstack_alloc (&objfile->psymbol_obstack,
2900 * sizeof (struct partial_symtab *))));
2901 for (s_idx = 1; s_idx < fh->crfd; s_idx++)
2905 (*swap_rfd_in) (cur_bfd,
2906 ((char *) debug_info->external_rfd
2907 + (fh->rfdBase + s_idx) * external_rfd_size),
2909 if (rh < 0 || rh >= hdr->ifdMax)
2911 complain (&bad_file_number_complaint, rh);
2915 /* Skip self dependencies of header files. */
2919 /* Do not add to dependeny list if psymtab was empty. */
2920 if (fdr_to_pst[rh].pst == (struct partial_symtab *)NULL)
2922 pst->dependencies[pst->number_of_dependencies++] = fdr_to_pst[rh].pst;
2926 /* Remove the dummy psymtab created for -O3 images above, if it is
2927 still empty, to enable the detection of stripped executables. */
2928 if (objfile->psymtabs->next == NULL
2929 && objfile->psymtabs->number_of_dependencies == 0
2930 && objfile->psymtabs->n_global_syms == 0
2931 && objfile->psymtabs->n_static_syms == 0)
2932 objfile->psymtabs = NULL;
2933 do_cleanups (old_chain);
2936 /* If the current psymbol has an enumerated type, we need to add
2937 all the the enum constants to the partial symbol table. */
2940 handle_psymbol_enumerators (objfile, fh, stype)
2941 struct objfile *objfile;
2945 const bfd_size_type external_sym_size = debug_swap->external_sym_size;
2946 void (* const swap_sym_in) PARAMS ((bfd *, PTR, SYMR *))
2947 = debug_swap->swap_sym_in;
2948 char *ext_sym = ((char *) debug_info->external_sym
2949 + ((fh->isymBase + cur_sdx + 1) * external_sym_size));
2959 /* It is an enumerated type if the next symbol entry is a stMember
2960 and its auxiliary index is indexNil or its auxiliary entry
2961 is a plain btNil or btVoid. */
2962 (*swap_sym_in) (cur_bfd, ext_sym, &sh);
2963 if (sh.st != stMember)
2966 if (sh.index == indexNil)
2968 (*debug_swap->swap_tir_in) (fh->fBigendian,
2969 &(debug_info->external_aux
2970 + fh->iauxBase + sh.index)->a_ti,
2972 if ((tir.bt != btNil && tir.bt != btVoid) || tir.tq0 != tqNil)
2984 (*swap_sym_in) (cur_bfd, ext_sym, &sh);
2985 if (sh.st != stMember)
2987 name = debug_info->ss + cur_fdr->issBase + sh.iss;
2989 /* Note that the value doesn't matter for enum constants
2990 in psymtabs, just in symtabs. */
2991 ADD_PSYMBOL_TO_LIST (name, strlen (name),
2992 VAR_NAMESPACE, LOC_CONST,
2993 objfile->static_psymbols, 0,
2994 psymtab_language, objfile);
2995 ext_sym += external_sym_size;
3000 mdebug_next_symbol_text ()
3005 (*debug_swap->swap_sym_in) (cur_bfd,
3006 ((char *) debug_info->external_sym
3007 + ((cur_fdr->isymBase + cur_sdx)
3008 * debug_swap->external_sym_size)),
3010 return debug_info->ss + cur_fdr->issBase + sh.iss;
3013 /* Ancillary function to psymtab_to_symtab(). Does all the work
3014 for turning the partial symtab PST into a symtab, recurring
3015 first on all dependent psymtabs. The argument FILENAME is
3016 only passed so we can see in debug stack traces what file
3019 This function has a split personality, based on whether the
3020 symbol table contains ordinary ecoff symbols, or stabs-in-ecoff.
3021 The flow of control and even the memory allocation differs. FIXME. */
3024 psymtab_to_symtab_1 (pst, filename)
3025 struct partial_symtab *pst;
3028 bfd_size_type external_sym_size;
3029 bfd_size_type external_pdr_size;
3030 void (*swap_sym_in) PARAMS ((bfd *, PTR, SYMR *));
3031 void (*swap_pdr_in) PARAMS ((bfd *, PTR, PDR *));
3035 struct linetable *lines;
3041 /* Read in all partial symbtabs on which this one is dependent.
3042 NOTE that we do have circular dependencies, sigh. We solved
3043 that by setting pst->readin before this point. */
3045 for (i = 0; i < pst->number_of_dependencies; i++)
3046 if (!pst->dependencies[i]->readin)
3048 /* Inform about additional files to be read in. */
3051 fputs_filtered (" ", gdb_stdout);
3053 fputs_filtered ("and ", gdb_stdout);
3055 printf_filtered ("%s...",
3056 pst->dependencies[i]->filename);
3057 wrap_here (""); /* Flush output */
3058 gdb_flush (gdb_stdout);
3060 /* We only pass the filename for debug purposes */
3061 psymtab_to_symtab_1 (pst->dependencies[i],
3062 pst->dependencies[i]->filename);
3065 /* Do nothing if this is a dummy psymtab. */
3067 if (pst->n_global_syms == 0 && pst->n_static_syms == 0
3068 && pst->textlow == 0 && pst->texthigh == 0)
3071 /* Now read the symbols for this symtab */
3073 cur_bfd = CUR_BFD (pst);
3074 debug_swap = DEBUG_SWAP (pst);
3075 debug_info = DEBUG_INFO (pst);
3076 pending_list = PENDING_LIST (pst);
3077 external_sym_size = debug_swap->external_sym_size;
3078 external_pdr_size = debug_swap->external_pdr_size;
3079 swap_sym_in = debug_swap->swap_sym_in;
3080 swap_pdr_in = debug_swap->swap_pdr_in;
3081 current_objfile = pst->objfile;
3082 cur_fd = FDR_IDX (pst);
3083 fh = ((cur_fd == -1)
3085 : debug_info->fdr + cur_fd);
3088 /* See comment in parse_partial_symbols about the @stabs sentinel. */
3089 processing_gcc_compilation = 0;
3090 if (fh != (FDR *) NULL && fh->csym >= 2)
3094 (*swap_sym_in) (cur_bfd,
3095 ((char *) debug_info->external_sym
3096 + (fh->isymBase + 1) * external_sym_size),
3098 if (STREQ (debug_info->ss + fh->issBase + sh.iss,
3101 /* We indicate that this is a GCC compilation so that certain
3102 features will be enabled in stabsread/dbxread. */
3103 processing_gcc_compilation = 2;
3107 if (processing_gcc_compilation != 0)
3112 unsigned long first_off = 0;
3114 /* This symbol table contains stabs-in-ecoff entries. */
3116 /* Parse local symbols first */
3118 if (fh->csym <= 2) /* FIXME, this blows psymtab->symtab ptr */
3120 current_objfile = NULL;
3123 for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
3129 (*swap_sym_in) (cur_bfd,
3130 (((char *) debug_info->external_sym)
3131 + (fh->isymBase + cur_sdx) * external_sym_size),
3133 name = debug_info->ss + fh->issBase + sh.iss;
3135 if (ECOFF_IS_STAB (&sh))
3137 int type_code = ECOFF_UNMARK_STAB (sh.index);
3139 /* We should never get non N_STAB symbols here, but they
3140 should be harmless, so keep process_one_symbol from
3141 complaining about them. */
3142 if (type_code & N_STAB)
3144 process_one_symbol (type_code, 0, valu, name,
3145 pst->section_offsets, pst->objfile);
3147 if (type_code == N_FUN)
3149 /* Make up special symbol to contain
3150 procedure specific info */
3151 struct mips_extra_func_info *e =
3152 ((struct mips_extra_func_info *)
3153 obstack_alloc (¤t_objfile->symbol_obstack,
3154 sizeof (struct mips_extra_func_info)));
3155 struct symbol *s = new_symbol (MIPS_EFI_SYMBOL_NAME);
3157 memset ((PTR) e, 0, sizeof (struct mips_extra_func_info));
3158 SYMBOL_NAMESPACE (s) = LABEL_NAMESPACE;
3159 SYMBOL_CLASS (s) = LOC_CONST;
3160 SYMBOL_TYPE (s) = builtin_type_void;
3161 SYMBOL_VALUE (s) = (long) e;
3162 e->pdr.framereg = -1;
3163 add_symbol_to_list (s, &local_symbols);
3166 else if (sh.st == stLabel)
3168 if (sh.index == indexNil)
3170 /* This is what the gcc2_compiled and __gnu_compiled_*
3171 show up as. So don't complain. */
3175 /* Handle encoded stab line number. */
3176 record_line (current_subfile, sh.index, valu);
3178 else if (sh.st == stProc || sh.st == stStaticProc
3179 || sh.st == stStatic || sh.st == stEnd)
3180 /* These are generated by gcc-2.x, do not complain */
3183 complain (&stab_unknown_complaint, name);
3185 st = end_symtab (pst->texthigh, 0, 0, pst->objfile, SECT_OFF_TEXT);
3188 /* Sort the symbol table now, we are done adding symbols to it.
3189 We must do this before parse_procedure calls lookup_symbol. */
3190 sort_symtab_syms (st);
3192 /* There used to be a call to sort_blocks here, but this should not
3193 be necessary for stabs symtabs. And as sort_blocks modifies the
3194 start address of the GLOBAL_BLOCK to the FIRST_LOCAL_BLOCK,
3195 it did the wrong thing if the first procedure in a file was
3196 generated via asm statements. */
3198 /* Fill in procedure info next. */
3200 pdr_ptr = ((char *) debug_info->external_pdr
3201 + fh->ipdFirst * external_pdr_size);
3202 pdr_end = pdr_ptr + fh->cpd * external_pdr_size;
3203 for (; pdr_ptr < pdr_end; pdr_ptr += external_pdr_size)
3207 (*swap_pdr_in) (cur_bfd, pdr_ptr, &pr);
3213 parse_procedure (&pr, st, first_off, pst);
3218 /* This symbol table contains ordinary ecoff entries. */
3220 /* FIXME: doesn't use pst->section_offsets. */
3226 /* How many symbols will we need */
3227 /* FIXME, this does not count enum values. */
3228 f_max = pst->n_global_syms + pst->n_static_syms;
3232 st = new_symtab ("unknown", f_max, 0, pst->objfile);
3236 f_max += fh->csym + fh->cpd;
3237 maxlines = 2 * fh->cline;
3238 st = new_symtab (pst->filename, 2 * f_max, maxlines, pst->objfile);
3240 /* The proper language was already determined when building
3241 the psymtab, use it. */
3242 st->language = PST_PRIVATE (pst)->pst_language;
3245 psymtab_language = st->language;
3247 lines = LINETABLE (st);
3249 /* Get a new lexical context */
3251 push_parse_stack ();
3252 top_stack->cur_st = st;
3253 top_stack->cur_block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (st),
3255 BLOCK_START (top_stack->cur_block) = pst->textlow;
3256 BLOCK_END (top_stack->cur_block) = 0;
3257 top_stack->blocktype = stFile;
3258 top_stack->maxsyms = 2 * f_max;
3259 top_stack->cur_type = 0;
3260 top_stack->procadr = 0;
3261 top_stack->numargs = 0;
3262 found_ecoff_debugging_info = 0;
3269 /* Parse local symbols first */
3270 sym_ptr = ((char *) debug_info->external_sym
3271 + fh->isymBase * external_sym_size);
3272 sym_end = sym_ptr + fh->csym * external_sym_size;
3273 while (sym_ptr < sym_end)
3278 (*swap_sym_in) (cur_bfd, sym_ptr, &sh);
3279 c = parse_symbol (&sh,
3280 debug_info->external_aux + fh->iauxBase,
3281 sym_ptr, fh->fBigendian, pst->section_offsets);
3282 sym_ptr += c * external_sym_size;
3285 /* Linenumbers. At the end, check if we can save memory.
3286 parse_lines has to look ahead an arbitrary number of PDR
3287 structures, so we swap them all first. */
3291 struct cleanup *old_chain;
3297 pr_block = (PDR *) xmalloc (fh->cpd * sizeof (PDR));
3299 old_chain = make_cleanup (free, pr_block);
3301 pdr_ptr = ((char *) debug_info->external_pdr
3302 + fh->ipdFirst * external_pdr_size);
3303 pdr_end = pdr_ptr + fh->cpd * external_pdr_size;
3307 pdr_ptr += external_pdr_size, pdr_in++)
3308 (*swap_pdr_in) (cur_bfd, pdr_ptr, pdr_in);
3310 parse_lines (fh, pr_block, lines, maxlines, pst);
3311 if (lines->nitems < fh->cline)
3312 lines = shrink_linetable (lines);
3314 /* Fill in procedure info next. */
3316 pdr_in_end = pdr_in + fh->cpd;
3317 for (; pdr_in < pdr_in_end; pdr_in++)
3318 parse_procedure (pdr_in, 0, pr_block->adr, pst);
3320 do_cleanups (old_chain);
3324 LINETABLE (st) = lines;
3326 /* .. and our share of externals.
3327 XXX use the global list to speed up things here. how?
3328 FIXME, Maybe quit once we have found the right number of ext's? */
3329 top_stack->cur_st = st;
3330 top_stack->cur_block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (top_stack->cur_st),
3332 top_stack->blocktype = stFile;
3334 = (debug_info->symbolic_header.isymMax
3335 + debug_info->symbolic_header.ipdMax
3336 + debug_info->symbolic_header.iextMax);
3338 ext_ptr = PST_PRIVATE (pst)->extern_tab;
3339 for (i = PST_PRIVATE (pst)->extern_count; --i >= 0; ext_ptr++)
3340 parse_external (ext_ptr, fh->fBigendian, pst->section_offsets);
3342 /* If there are undefined symbols, tell the user.
3343 The alpha has an undefined symbol for every symbol that is
3344 from a shared library, so tell the user only if verbose is on. */
3345 if (info_verbose && n_undef_symbols)
3347 printf_filtered ("File %s contains %d unresolved references:",
3348 st->filename, n_undef_symbols);
3349 printf_filtered ("\n\t%4d variables\n\t%4d procedures\n\t%4d labels\n",
3350 n_undef_vars, n_undef_procs, n_undef_labels);
3351 n_undef_symbols = n_undef_labels = n_undef_vars = n_undef_procs = 0;
3358 /* Sort the symbol table now, we are done adding symbols to it.*/
3359 sort_symtab_syms (st);
3364 /* Now link the psymtab and the symtab. */
3367 current_objfile = NULL;
3370 /* Ancillary parsing procedures. */
3372 /* Return 1 if the symbol pointed to by SH has a cross reference
3373 to an opaque aggregate type, else 0. */
3376 has_opaque_xref (fh, sh)
3385 if (sh->index == indexNil)
3388 ax = debug_info->external_aux + fh->iauxBase + sh->index;
3389 (*debug_swap->swap_tir_in) (fh->fBigendian, &ax->a_ti, &tir);
3390 if (tir.bt != btStruct && tir.bt != btUnion && tir.bt != btEnum)
3394 (*debug_swap->swap_rndx_in) (fh->fBigendian, &ax->a_rndx, rn);
3395 if (rn->rfd == 0xfff)
3396 rf = AUX_GET_ISYM (fh->fBigendian, ax + 1);
3404 /* Lookup the type at relative index RN. Return it in TPP
3405 if found and in any event come up with its name PNAME.
3406 BIGEND says whether aux symbols are big-endian or not (from fh->fBigendian).
3407 Return value says how many aux symbols we ate. */
3410 cross_ref (fd, ax, tpp, type_code, pname, bigend, sym_name)
3414 enum type_code type_code; /* Use to alloc new type if none is found. */
3426 struct mdebug_pending *pend;
3428 *tpp = (struct type *)NULL;
3430 (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, rn);
3432 /* Escape index means 'the next one' */
3433 if (rn->rfd == 0xfff)
3436 rf = AUX_GET_ISYM (bigend, ax + 1);
3443 /* mips cc uses a rf of -1 for opaque struct definitions.
3444 Set TYPE_FLAG_STUB for these types so that check_stub_type will
3445 resolve them if the struct gets defined in another compilation unit. */
3448 *pname = "<undefined>";
3449 *tpp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
3450 TYPE_FLAGS (*tpp) |= TYPE_FLAG_STUB;
3454 /* mips cc uses an escaped rn->index of 0 for struct return types
3455 of procedures that were compiled without -g. These will always remain
3457 if (rn->rfd == 0xfff && rn->index == 0)
3459 *pname = "<undefined>";
3463 /* Find the relative file descriptor and the symbol in it. */
3464 fh = get_rfd (fd, rf);
3465 xref_fd = fh - debug_info->fdr;
3467 if (rn->index >= fh->csym)
3469 /* File indirect entry is corrupt. */
3470 *pname = "<illegal>";
3471 complain (&bad_rfd_entry_complaint,
3472 sym_name, xref_fd, rn->index);
3476 /* If we have processed this symbol then we left a forwarding
3477 pointer to the type in the pending list. If not, we`ll put
3478 it in a list of pending types, to be processed later when
3479 the file will be. In any event, we collect the name for the
3482 esh = ((char *) debug_info->external_sym
3483 + ((fh->isymBase + rn->index)
3484 * debug_swap->external_sym_size));
3485 (*debug_swap->swap_sym_in) (cur_bfd, esh, &sh);
3487 /* Make sure that this type of cross reference can be handled. */
3488 if ((sh.sc != scInfo
3489 || (sh.st != stBlock && sh.st != stTypedef && sh.st != stIndirect
3490 && sh.st != stStruct && sh.st != stUnion
3491 && sh.st != stEnum))
3492 && (sh.st != stBlock || (sh.sc != scCommon && sh.sc != scSCommon)))
3494 /* File indirect entry is corrupt. */
3495 *pname = "<illegal>";
3496 complain (&bad_rfd_entry_complaint,
3497 sym_name, xref_fd, rn->index);
3501 *pname = debug_info->ss + fh->issBase + sh.iss;
3503 pend = is_pending_symbol (fh, esh);
3508 /* We have not yet seen this type. */
3510 if ((sh.iss == 0 && sh.st == stTypedef) || sh.st == stIndirect)
3514 /* alpha cc puts out a stTypedef with a sh.iss of zero for
3516 a) forward declarations of structs/unions/enums which are not
3517 defined in this compilation unit.
3518 For these the type will be void. This is a bad design decision
3519 as cross referencing across compilation units is impossible
3520 due to the missing name.
3521 b) forward declarations of structs/unions/enums which are defined
3522 later in this file or in another file in the same compilation
3523 unit. Irix5 cc uses a stIndirect symbol for this.
3524 Simply cross reference those again to get the true type.
3525 The forward references are not entered in the pending list and
3526 in the symbol table. */
3528 (*debug_swap->swap_tir_in) (bigend,
3529 &(debug_info->external_aux
3530 + fh->iauxBase + sh.index)->a_ti,
3532 if (tir.tq0 != tqNil)
3533 complain (&illegal_forward_tq0_complaint, sym_name);
3537 *tpp = init_type (type_code, 0, 0, (char *) NULL,
3539 *pname = "<undefined>";
3546 (debug_info->external_aux
3547 + fh->iauxBase + sh.index + 1),
3548 tpp, type_code, pname,
3549 fh->fBigendian, sym_name);
3553 complain (&illegal_forward_bt_complaint, tir.bt, sym_name);
3554 *tpp = init_type (type_code, 0, 0, (char *) NULL,
3560 else if (sh.st == stTypedef)
3562 /* Parse the type for a normal typedef. This might recursively call
3563 cross_ref till we get a non typedef'ed type.
3564 FIXME: This is not correct behaviour, but gdb currently
3565 cannot handle typedefs without type copying. But type copying is
3566 impossible as we might have mutual forward references between
3567 two files and the copied type would not get filled in when
3568 we later parse its definition. */
3569 *tpp = parse_type (xref_fd,
3570 debug_info->external_aux + fh->iauxBase,
3574 debug_info->ss + fh->issBase + sh.iss);
3578 /* Cross reference to a struct/union/enum which is defined
3579 in another file in the same compilation unit but that file
3580 has not been parsed yet.
3581 Initialize the type only, it will be filled in when
3582 it's definition is parsed. */
3583 *tpp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
3585 add_pending (fh, esh, *tpp);
3588 /* We used one auxent normally, two if we got a "next one" rf. */
3593 /* Quick&dirty lookup procedure, to avoid the MI ones that require
3594 keeping the symtab sorted */
3596 static struct symbol *
3597 mylookup_symbol (name, block, namespace, class)
3599 register struct block *block;
3600 enum namespace namespace;
3601 enum address_class class;
3603 register int bot, top, inc;
3604 register struct symbol *sym;
3607 top = BLOCK_NSYMS (block);
3611 sym = BLOCK_SYM (block, bot);
3612 if (SYMBOL_NAME (sym)[0] == inc
3613 && SYMBOL_NAMESPACE (sym) == namespace
3614 && SYMBOL_CLASS (sym) == class
3615 && strcmp (SYMBOL_NAME (sym), name) == 0)
3619 block = BLOCK_SUPERBLOCK (block);
3621 return mylookup_symbol (name, block, namespace, class);
3626 /* Add a new symbol S to a block B.
3627 Infrequently, we will need to reallocate the block to make it bigger.
3628 We only detect this case when adding to top_stack->cur_block, since
3629 that's the only time we know how big the block is. FIXME. */
3636 int nsyms = BLOCK_NSYMS (b)++;
3637 struct block *origb;
3638 struct parse_stack *stackp;
3640 if (b == top_stack->cur_block &&
3641 nsyms >= top_stack->maxsyms)
3643 complain (&block_overflow_complaint, SYMBOL_NAME (s));
3644 /* In this case shrink_block is actually grow_block, since
3645 BLOCK_NSYMS(b) is larger than its current size. */
3647 b = shrink_block (top_stack->cur_block, top_stack->cur_st);
3649 /* Now run through the stack replacing pointers to the
3650 original block. shrink_block has already done this
3651 for the blockvector and BLOCK_FUNCTION. */
3652 for (stackp = top_stack; stackp; stackp = stackp->next)
3654 if (stackp->cur_block == origb)
3656 stackp->cur_block = b;
3657 stackp->maxsyms = BLOCK_NSYMS (b);
3661 BLOCK_SYM (b, nsyms) = s;
3664 /* Add a new block B to a symtab S */
3671 struct blockvector *bv = BLOCKVECTOR (s);
3673 bv = (struct blockvector *) xrealloc ((PTR) bv,
3674 (sizeof (struct blockvector)
3675 + BLOCKVECTOR_NBLOCKS (bv)
3676 * sizeof (bv->block)));
3677 if (bv != BLOCKVECTOR (s))
3678 BLOCKVECTOR (s) = bv;
3680 BLOCKVECTOR_BLOCK (bv, BLOCKVECTOR_NBLOCKS (bv)++) = b;
3683 /* Add a new linenumber entry (LINENO,ADR) to a linevector LT.
3684 MIPS' linenumber encoding might need more than one byte
3685 to describe it, LAST is used to detect these continuation lines.
3687 Combining lines with the same line number seems like a bad idea.
3688 E.g: There could be a line number entry with the same line number after the
3689 prologue and GDB should not ignore it (this is a better way to find
3690 a prologue than mips_skip_prologue).
3691 But due to the compressed line table format there are line number entries
3692 for the same line which are needed to bridge the gap to the next
3693 line number entry. These entries have a bogus address info with them
3694 and we are unable to tell them from intended duplicate line number
3696 This is another reason why -ggdb debugging format is preferable. */
3699 add_line (lt, lineno, adr, last)
3700 struct linetable *lt;
3705 /* DEC c89 sometimes produces zero linenos which confuse gdb.
3706 Change them to something sensible. */
3710 last = -2; /* make sure we record first line */
3712 if (last == lineno) /* skip continuation lines */
3715 lt->item[lt->nitems].line = lineno;
3716 lt->item[lt->nitems++].pc = adr << 2;
3720 /* Sorting and reordering procedures */
3722 /* Blocks with a smaller low bound should come first */
3725 compare_blocks (arg1, arg2)
3729 register int addr_diff;
3730 struct block **b1 = (struct block **) arg1;
3731 struct block **b2 = (struct block **) arg2;
3733 addr_diff = (BLOCK_START ((*b1))) - (BLOCK_START ((*b2)));
3735 return (BLOCK_END ((*b2))) - (BLOCK_END ((*b1)));
3739 /* Sort the blocks of a symtab S.
3740 Reorder the blocks in the blockvector by code-address,
3741 as required by some MI search routines */
3747 struct blockvector *bv = BLOCKVECTOR (s);
3749 if (BLOCKVECTOR_NBLOCKS (bv) <= 2)
3752 if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) == 0)
3753 BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) = 0;
3754 if (BLOCK_END (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) == 0)
3755 BLOCK_START (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) = 0;
3759 * This is very unfortunate: normally all functions are compiled in
3760 * the order they are found, but if the file is compiled -O3 things
3761 * are very different. It would be nice to find a reliable test
3762 * to detect -O3 images in advance.
3764 if (BLOCKVECTOR_NBLOCKS (bv) > 3)
3765 qsort (&BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK),
3766 BLOCKVECTOR_NBLOCKS (bv) - FIRST_LOCAL_BLOCK,
3767 sizeof (struct block *),
3771 register CORE_ADDR high = 0;
3772 register int i, j = BLOCKVECTOR_NBLOCKS (bv);
3774 for (i = FIRST_LOCAL_BLOCK; i < j; i++)
3775 if (high < BLOCK_END (BLOCKVECTOR_BLOCK (bv, i)))
3776 high = BLOCK_END (BLOCKVECTOR_BLOCK (bv, i));
3777 BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) = high;
3780 BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) =
3781 BLOCK_START (BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK));
3783 BLOCK_START (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
3784 BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
3785 BLOCK_END (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) =
3786 BLOCK_END (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK));
3790 /* Constructor/restructor/destructor procedures */
3792 /* Allocate a new symtab for NAME. Needs an estimate of how many symbols
3793 MAXSYMS and linenumbers MAXLINES we'll put in it */
3795 static struct symtab *
3796 new_symtab (name, maxsyms, maxlines, objfile)
3800 struct objfile *objfile;
3802 struct symtab *s = allocate_symtab (name, objfile);
3804 LINETABLE (s) = new_linetable (maxlines);
3806 /* All symtabs must have at least two blocks */
3807 BLOCKVECTOR (s) = new_bvect (2);
3808 BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK) = new_block (maxsyms);
3809 BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK) = new_block (maxsyms);
3810 BLOCK_SUPERBLOCK (BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK)) =
3811 BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
3813 s->free_code = free_linetable;
3818 /* Allocate a new partial_symtab NAME */
3820 static struct partial_symtab *
3821 new_psymtab (name, objfile, section_offsets)
3823 struct objfile *objfile;
3824 struct section_offsets *section_offsets;
3826 struct partial_symtab *psymtab;
3828 psymtab = allocate_psymtab (name, objfile);
3829 psymtab->section_offsets = section_offsets;
3831 /* Keep a backpointer to the file's symbols */
3833 psymtab->read_symtab_private = ((char *)
3834 obstack_alloc (&objfile->psymbol_obstack,
3835 sizeof (struct symloc)));
3836 memset ((PTR) psymtab->read_symtab_private, 0, sizeof (struct symloc));
3837 CUR_BFD (psymtab) = cur_bfd;
3838 DEBUG_SWAP (psymtab) = debug_swap;
3839 DEBUG_INFO (psymtab) = debug_info;
3840 PENDING_LIST (psymtab) = pending_list;
3842 /* The way to turn this into a symtab is to call... */
3843 psymtab->read_symtab = mdebug_psymtab_to_symtab;
3848 /* Allocate a linetable array of the given SIZE. Since the struct
3849 already includes one item, we subtract one when calculating the
3850 proper size to allocate. */
3852 static struct linetable *
3853 new_linetable (size)
3856 struct linetable *l;
3858 size = (size - 1) * sizeof (l->item) + sizeof (struct linetable);
3859 l = (struct linetable *) xmalloc (size);
3864 /* Oops, too big. Shrink it. This was important with the 2.4 linetables,
3865 I am not so sure about the 3.4 ones.
3867 Since the struct linetable already includes one item, we subtract one when
3868 calculating the proper size to allocate. */
3870 static struct linetable *
3871 shrink_linetable (lt)
3872 struct linetable *lt;
3875 return (struct linetable *) xrealloc ((PTR) lt,
3876 (sizeof (struct linetable)
3878 * sizeof (lt->item))));
3881 /* Allocate and zero a new blockvector of NBLOCKS blocks. */
3883 static struct blockvector *
3887 struct blockvector *bv;
3890 size = sizeof (struct blockvector) + nblocks * sizeof (struct block *);
3891 bv = (struct blockvector *) xzalloc (size);
3893 BLOCKVECTOR_NBLOCKS (bv) = nblocks;
3898 /* Allocate and zero a new block of MAXSYMS symbols */
3900 static struct block *
3904 int size = sizeof (struct block) + (maxsyms - 1) * sizeof (struct symbol *);
3906 return (struct block *) xzalloc (size);
3909 /* Ooops, too big. Shrink block B in symtab S to its minimal size.
3910 Shrink_block can also be used by add_symbol to grow a block. */
3912 static struct block *
3918 struct blockvector *bv = BLOCKVECTOR (s);
3921 /* Just reallocate it and fix references to the old one */
3923 new = (struct block *) xrealloc ((PTR) b,
3924 (sizeof (struct block)
3925 + ((BLOCK_NSYMS (b) - 1)
3926 * sizeof (struct symbol *))));
3928 /* Should chase pointers to old one. Fortunately, that`s just
3929 the block`s function and inferior blocks */
3930 if (BLOCK_FUNCTION (new) && SYMBOL_BLOCK_VALUE (BLOCK_FUNCTION (new)) == b)
3931 SYMBOL_BLOCK_VALUE (BLOCK_FUNCTION (new)) = new;
3932 for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); i++)
3933 if (BLOCKVECTOR_BLOCK (bv, i) == b)
3934 BLOCKVECTOR_BLOCK (bv, i) = new;
3935 else if (BLOCK_SUPERBLOCK (BLOCKVECTOR_BLOCK (bv, i)) == b)
3936 BLOCK_SUPERBLOCK (BLOCKVECTOR_BLOCK (bv, i)) = new;
3940 /* Create a new symbol with printname NAME */
3942 static struct symbol *
3946 struct symbol *s = ((struct symbol *)
3947 obstack_alloc (¤t_objfile->symbol_obstack,
3948 sizeof (struct symbol)));
3950 memset ((PTR) s, 0, sizeof (*s));
3951 SYMBOL_NAME (s) = name;
3952 SYMBOL_LANGUAGE (s) = psymtab_language;
3953 SYMBOL_INIT_DEMANGLED_NAME (s, ¤t_objfile->symbol_obstack);
3957 /* Create a new type with printname NAME */
3959 static struct type *
3965 t = alloc_type (current_objfile);
3966 TYPE_NAME (t) = name;
3967 TYPE_CPLUS_SPECIFIC (t) = (struct cplus_struct_type *) &cplus_struct_default;
3971 /* Read ECOFF debugging information from a BFD section. This is
3972 called from elfread.c. It parses the section into a
3973 ecoff_debug_info struct, and then lets the rest of the file handle
3977 elfmdebug_build_psymtabs (objfile, swap, sec, section_offsets)
3978 struct objfile *objfile;
3979 const struct ecoff_debug_swap *swap;
3981 struct section_offsets *section_offsets;
3983 bfd *abfd = objfile->obfd;
3984 struct ecoff_debug_info *info;
3986 info = ((struct ecoff_debug_info *)
3987 obstack_alloc (&objfile->psymbol_obstack,
3988 sizeof (struct ecoff_debug_info)));
3990 if (!(*swap->read_debug_info) (abfd, sec, info))
3991 error ("Error reading ECOFF debugging information: %s",
3992 bfd_errmsg (bfd_get_error ()));
3994 mdebug_build_psymtabs (objfile, swap, info, section_offsets);
3998 /* Things used for calling functions in the inferior.
3999 These functions are exported to our companion
4000 mips-tdep.c file and are here because they play
4001 with the symbol-table explicitly. */
4003 /* Sigtramp: make sure we have all the necessary information
4004 about the signal trampoline code. Since the official code
4005 from MIPS does not do so, we make up that information ourselves.
4006 If they fix the library (unlikely) this code will neutralize itself. */
4008 /* FIXME: This function is called only by mips-tdep.c. It needs to be
4009 here because it calls functions defined in this file, but perhaps
4010 this could be handled in a better way. */
4017 struct block *b, *b0 = NULL;
4019 sigtramp_address = -1;
4021 /* We have to handle the following cases here:
4022 a) The Mips library has a sigtramp label within sigvec.
4023 b) Irix has a _sigtramp which we want to use, but it also has sigvec. */
4024 s = lookup_symbol ("sigvec", 0, VAR_NAMESPACE, 0, NULL);
4027 b0 = SYMBOL_BLOCK_VALUE (s);
4028 s = lookup_symbol ("sigtramp", b0, VAR_NAMESPACE, 0, NULL);
4032 /* No sigvec or no sigtramp inside sigvec, try _sigtramp. */
4033 s = lookup_symbol ("_sigtramp", 0, VAR_NAMESPACE, 0, NULL);
4036 /* But maybe this program uses its own version of sigvec */
4040 /* Did we or MIPSco fix the library ? */
4041 if (SYMBOL_CLASS (s) == LOC_BLOCK)
4043 sigtramp_address = BLOCK_START (SYMBOL_BLOCK_VALUE (s));
4044 sigtramp_end = BLOCK_END (SYMBOL_BLOCK_VALUE (s));
4048 sigtramp_address = SYMBOL_VALUE (s);
4049 sigtramp_end = sigtramp_address + 0x88; /* black magic */
4051 /* But what symtab does it live in ? */
4052 st = find_pc_symtab (SYMBOL_VALUE (s));
4055 * Ok, there goes the fix: turn it into a procedure, with all the
4056 * needed info. Note we make it a nested procedure of sigvec,
4057 * which is the way the (assembly) code is actually written.
4059 SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
4060 SYMBOL_CLASS (s) = LOC_BLOCK;
4061 SYMBOL_TYPE (s) = init_type (TYPE_CODE_FUNC, 4, 0, (char *) NULL,
4063 TYPE_TARGET_TYPE (SYMBOL_TYPE (s)) = builtin_type_void;
4065 /* Need a block to allocate MIPS_EFI_SYMBOL_NAME in */
4067 SYMBOL_BLOCK_VALUE (s) = b;
4068 BLOCK_START (b) = sigtramp_address;
4069 BLOCK_END (b) = sigtramp_end;
4070 BLOCK_FUNCTION (b) = s;
4071 BLOCK_SUPERBLOCK (b) = BLOCK_SUPERBLOCK (b0);
4075 /* Make a MIPS_EFI_SYMBOL_NAME entry for it */
4077 struct mips_extra_func_info *e =
4078 ((struct mips_extra_func_info *)
4079 xzalloc (sizeof (struct mips_extra_func_info)));
4081 e->numargs = 0; /* the kernel thinks otherwise */
4082 e->pdr.frameoffset = 32;
4083 e->pdr.framereg = SP_REGNUM;
4084 /* Note that setting pcreg is no longer strictly necessary as
4085 mips_frame_saved_pc is now aware of signal handler frames. */
4086 e->pdr.pcreg = PC_REGNUM;
4087 e->pdr.regmask = -2;
4088 /* Offset to saved r31, in the sigtramp case the saved registers
4089 are above the frame in the sigcontext.
4090 We have 4 alignment bytes, 12 bytes for onstack, mask and pc,
4091 32 * 4 bytes for the general registers, 12 bytes for mdhi, mdlo, ownedfp
4092 and 32 * 4 bytes for the floating point registers. */
4093 e->pdr.regoffset = 4 + 12 + 31 * 4;
4094 e->pdr.fregmask = -1;
4095 /* Offset to saved f30 (first saved *double* register). */
4096 e->pdr.fregoffset = 4 + 12 + 32 * 4 + 12 + 30 * 4;
4097 e->pdr.isym = (long) s;
4098 e->pdr.adr = sigtramp_address;
4100 current_objfile = st->objfile; /* Keep new_symbol happy */
4101 s = new_symbol (MIPS_EFI_SYMBOL_NAME);
4102 SYMBOL_VALUE (s) = (long) e;
4103 SYMBOL_NAMESPACE (s) = LABEL_NAMESPACE;
4104 SYMBOL_CLASS (s) = LOC_CONST;
4105 SYMBOL_TYPE (s) = builtin_type_void;
4106 current_objfile = NULL;
4109 BLOCK_SYM (b, BLOCK_NSYMS (b)++) = s;
4113 _initialize_mdebugread ()
4115 /* Missing basic types */
4117 /* Is a "string" the way btString means it the same as TYPE_CODE_STRING?
4119 mdebug_type_string =
4120 init_type (TYPE_CODE_STRING,
4121 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
4123 (struct objfile *) NULL);
4125 /* We use TYPE_CODE_INT to print these as integers. Does this do any
4126 good? Would we be better off with TYPE_CODE_ERROR? Should
4127 TYPE_CODE_ERROR print things in hex if it knows the size? */
4128 mdebug_type_fixed_dec =
4129 init_type (TYPE_CODE_INT,
4130 TARGET_INT_BIT / TARGET_CHAR_BIT,
4132 (struct objfile *) NULL);
4134 mdebug_type_float_dec =
4135 init_type (TYPE_CODE_ERROR,
4136 TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
4137 0, "floating decimal",
4138 (struct objfile *) NULL);
4140 nodebug_func_symbol_type = init_type (TYPE_CODE_FUNC, 1, 0,
4141 "<function, no debug info>", NULL);
4142 TYPE_TARGET_TYPE (nodebug_func_symbol_type) = builtin_type_int;
4143 nodebug_var_symbol_type =
4144 init_type (TYPE_CODE_INT, TARGET_INT_BIT / HOST_CHAR_BIT, 0,
4145 "<variable, no debug info>", NULL);