* dwarfread.c (struct dwfinfo), dbxread.c (struct symloc),
[deliverable/binutils-gdb.git] / gdb / mdebugread.c
1 /* Read a symbol table in ECOFF format (Third-Eye).
2 Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995
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
6 at Cygnus Support.
7
8 This file is part of GDB.
9
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.
14
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.
19
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. */
23
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.
31
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.
38
39 This module can read all four of the known byte-order combinations,
40 on any type of host. */
41
42 #include "defs.h"
43 #include "symtab.h"
44 #include "gdbtypes.h"
45 #include "gdbcore.h"
46 #include "symfile.h"
47 #include "objfiles.h"
48 #include "obstack.h"
49 #include "buildsym.h"
50 #include "stabsread.h"
51 #include "complaints.h"
52
53 #if !defined (SEEK_SET)
54 #define SEEK_SET 0
55 #define SEEK_CUR 1
56 #endif
57
58 /* These are needed if the tm.h file does not contain the necessary
59 mips specific definitions. */
60
61 #ifndef MIPS_EFI_SYMBOL_NAME
62 #define MIPS_EFI_SYMBOL_NAME "__GDB_EFI_INFO__"
63 #include "coff/sym.h"
64 #include "coff/symconst.h"
65 typedef struct mips_extra_func_info {
66 long numargs;
67 PDR pdr;
68 } *mips_extra_func_info_t;
69 #ifndef RA_REGNUM
70 #define RA_REGNUM 0
71 #endif
72 #endif
73
74 #ifdef USG
75 #include <sys/types.h>
76 #endif
77
78 #include <sys/param.h>
79 #include <sys/file.h>
80 #include <sys/stat.h>
81 #include <string.h>
82
83 #include "gdb-stabs.h"
84
85 #include "bfd.h"
86
87 #include "coff/ecoff.h" /* COFF-like aspects of ecoff files */
88
89 #include "libaout.h" /* Private BFD a.out information. */
90 #include "aout/aout64.h"
91 #include "aout/stab_gnu.h" /* STABS information */
92
93 #include "expression.h"
94 #include "language.h" /* Needed inside partial-stab.h */
95
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)
99 #endif
100 \f
101 /* We put a pointer to this structure in the read_symtab_private field
102 of the psymtab. */
103
104 struct symloc
105 {
106 /* Index of the FDR that this psymtab represents. */
107 int fdr_idx;
108 /* The BFD that the psymtab was created from. */
109 bfd *cur_bfd;
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. */
114 EXTR *extern_tab;
115 /* Size of extern_tab. */
116 int extern_count;
117 enum language pst_language;
118 };
119
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)
126 \f
127 /* Things we import explicitly from other modules */
128
129 extern int info_verbose;
130
131 /* Various complaints about symbol reading that don't abort the process */
132
133 static struct complaint bad_file_number_complaint =
134 {"bad file number %d", 0, 0};
135
136 static struct complaint index_complaint =
137 {"bad aux index at symbol %s", 0, 0};
138
139 static struct complaint aux_index_complaint =
140 {"bad proc end in aux found from symbol %s", 0, 0};
141
142 static struct complaint block_index_complaint =
143 {"bad aux index at block symbol %s", 0, 0};
144
145 static struct complaint unknown_ext_complaint =
146 {"unknown external symbol %s", 0, 0};
147
148 static struct complaint unknown_sym_complaint =
149 {"unknown local symbol %s", 0, 0};
150
151 static struct complaint unknown_st_complaint =
152 {"with type %d", 0, 0};
153
154 static struct complaint block_overflow_complaint =
155 {"block containing %s overfilled", 0, 0};
156
157 static struct complaint basic_type_complaint =
158 {"cannot map ECOFF basic type 0x%x for %s", 0, 0};
159
160 static struct complaint unknown_type_qual_complaint =
161 {"unknown type qualifier 0x%x", 0, 0};
162
163 static struct complaint array_index_type_complaint =
164 {"illegal array index type for %s, assuming int", 0, 0};
165
166 static struct complaint bad_tag_guess_complaint =
167 {"guessed tag type of %s incorrectly", 0, 0};
168
169 static struct complaint block_member_complaint =
170 {"declaration block contains unhandled symbol type %d", 0, 0};
171
172 static struct complaint stEnd_complaint =
173 {"stEnd with storage class %d not handled", 0, 0};
174
175 static struct complaint unknown_mdebug_symtype_complaint =
176 {"unknown symbol type 0x%x", 0, 0};
177
178 static struct complaint stab_unknown_complaint =
179 {"unknown stabs symbol %s", 0, 0};
180
181 static struct complaint pdr_for_nonsymbol_complaint =
182 {"PDR for %s, but no symbol", 0, 0};
183
184 static struct complaint pdr_static_symbol_complaint =
185 {"can't handle PDR for static proc at 0x%lx", 0, 0};
186
187 static struct complaint bad_setjmp_pdr_complaint =
188 {"fixing bad setjmp PDR from libc", 0, 0};
189
190 static struct complaint bad_fbitfield_complaint =
191 {"can't handle TIR fBitfield for %s", 0, 0};
192
193 static struct complaint bad_continued_complaint =
194 {"illegal TIR continued for %s", 0, 0};
195
196 static struct complaint bad_rfd_entry_complaint =
197 {"bad rfd entry for %s: file %d, index %d", 0, 0};
198
199 static struct complaint unexpected_type_code_complaint =
200 {"unexpected type code for %s", 0, 0};
201
202 static struct complaint unable_to_cross_ref_complaint =
203 {"unable to cross ref btTypedef for %s", 0, 0};
204
205 static struct complaint illegal_forward_tq0_complaint =
206 {"illegal tq0 in forward typedef for %s", 0, 0};
207
208 static struct complaint illegal_forward_bt_complaint =
209 {"illegal bt %d in forward typedef for %s", 0, 0};
210
211 static struct complaint bad_linetable_guess_complaint =
212 {"guessed size of linetable for %s incorrectly", 0, 0};
213
214 static struct complaint bad_ext_ifd_complaint =
215 {"bad ifd for external symbol: %d (max %d)", 0, 0};
216
217 static struct complaint bad_ext_iss_complaint =
218 {"bad iss for external symbol: %ld (max %ld)", 0, 0};
219
220 /* Macros and extra defs */
221
222 /* Puns: hard to find whether -g was used and how */
223
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)))
228 \f
229 /* Things that really are local to this module */
230
231 /* Remember what we deduced to be the source language of this psymtab. */
232
233 static enum language psymtab_language = language_unknown;
234
235 /* Current BFD. */
236
237 static bfd *cur_bfd;
238
239 /* How to parse debugging information for CUR_BFD. */
240
241 static const struct ecoff_debug_swap *debug_swap;
242
243 /* Pointers to debugging information for CUR_BFD. */
244
245 static struct ecoff_debug_info *debug_info;
246
247 /* Pointer to current file decriptor record, and its index */
248
249 static FDR *cur_fdr;
250 static int cur_fd;
251
252 /* Index of current symbol */
253
254 static int cur_sdx;
255
256 /* Note how much "debuggable" this image is. We would like
257 to see at least one FDR with full symbols */
258
259 static max_gdbinfo;
260 static max_glevel;
261
262 /* When examining .o files, report on undefined symbols */
263
264 static int n_undef_symbols, n_undef_labels, n_undef_vars, n_undef_procs;
265
266 /* Pseudo symbol to use when putting stabs into the symbol table. */
267
268 static char stabs_symbol[] = STABS_SYMBOL;
269
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
274 builtin_type_*. */
275
276 static struct type *mdebug_type_fixed_dec;
277 static struct type *mdebug_type_float_dec;
278 static struct type *mdebug_type_string;
279
280 /* Types for symbols from files compiled without debugging info. */
281
282 static struct type *nodebug_func_symbol_type;
283 static struct type *nodebug_var_symbol_type;
284
285 /* Nonzero if we have seen ecoff debugging info for a file. */
286
287 static int found_ecoff_debugging_info;
288
289 /* Forward declarations */
290
291 static int
292 upgrade_type PARAMS ((int, struct type **, int, union aux_ext *, int, char *));
293
294 static void
295 parse_partial_symbols PARAMS ((struct objfile *,
296 struct section_offsets *));
297
298 static FDR
299 *get_rfd PARAMS ((int, int));
300
301 static int
302 has_opaque_xref PARAMS ((FDR *, SYMR *));
303
304 static int
305 cross_ref PARAMS ((int, union aux_ext *, struct type **, enum type_code,
306 char **, int, char *));
307
308 static struct symbol *
309 new_symbol PARAMS ((char *));
310
311 static struct type *
312 new_type PARAMS ((char *));
313
314 static struct block *
315 new_block PARAMS ((int));
316
317 static struct symtab *
318 new_symtab PARAMS ((char *, int, int, struct objfile *));
319
320 static struct linetable *
321 new_linetable PARAMS ((int));
322
323 static struct blockvector *
324 new_bvect PARAMS ((int));
325
326 static int
327 parse_symbol PARAMS ((SYMR *, union aux_ext *, char *, int, struct section_offsets *));
328
329 static struct type *
330 parse_type PARAMS ((int, union aux_ext *, unsigned int, int *, int, char *));
331
332 static struct symbol *
333 mylookup_symbol PARAMS ((char *, struct block *, enum namespace,
334 enum address_class));
335
336 static struct block *
337 shrink_block PARAMS ((struct block *, struct symtab *));
338
339 static PTR
340 xzalloc PARAMS ((unsigned int));
341
342 static void
343 sort_blocks PARAMS ((struct symtab *));
344
345 static int
346 compare_blocks PARAMS ((const void *, const void *));
347
348 static struct partial_symtab *
349 new_psymtab PARAMS ((char *, struct objfile *, struct section_offsets *));
350
351 static void
352 psymtab_to_symtab_1 PARAMS ((struct partial_symtab *, char *));
353
354 static void
355 add_block PARAMS ((struct block *, struct symtab *));
356
357 static void
358 add_symbol PARAMS ((struct symbol *, struct block *));
359
360 static int
361 add_line PARAMS ((struct linetable *, int, CORE_ADDR, int));
362
363 static struct linetable *
364 shrink_linetable PARAMS ((struct linetable *));
365
366 static void
367 handle_psymbol_enumerators PARAMS ((struct objfile *, FDR *, int));
368
369 static char *
370 mdebug_next_symbol_text PARAMS ((void));
371 \f
372 /* Address bounds for the signal trampoline in inferior, if any */
373
374 CORE_ADDR sigtramp_address, sigtramp_end;
375
376 /* Allocate zeroed memory */
377
378 static PTR
379 xzalloc (size)
380 unsigned int size;
381 {
382 PTR p = xmalloc (size);
383
384 memset (p, 0, size);
385 return p;
386 }
387
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 */
392
393 static void
394 mdebug_psymtab_to_symtab (pst)
395 struct partial_symtab *pst;
396 {
397
398 if (!pst)
399 return;
400
401 if (info_verbose)
402 {
403 printf_filtered ("Reading in symbols for %s...", pst->filename);
404 gdb_flush (gdb_stdout);
405 }
406
407 next_symbol_text_func = mdebug_next_symbol_text;
408
409 psymtab_to_symtab_1 (pst, pst->filename);
410
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);
414
415 if (info_verbose)
416 printf_filtered ("done.\n");
417 }
418 \f
419 /* File-level interface functions */
420
421 /* Find a file descriptor given its index RF relative to a file CF */
422
423 static FDR *
424 get_rfd (cf, rf)
425 int cf, rf;
426 {
427 FDR *fdrs;
428 register FDR *f;
429 RFDT rfd;
430
431 fdrs = debug_info->fdr;
432 f = fdrs + cf;
433 /* Object files do not have the RFD table, all refs are absolute */
434 if (f->rfdBase == 0)
435 return fdrs + rf;
436 (*debug_swap->swap_rfd_in) (cur_bfd,
437 ((char *) debug_info->external_rfd
438 + ((f->rfdBase + rf)
439 * debug_swap->external_rfd_size)),
440 &rfd);
441 return fdrs + rfd;
442 }
443
444 /* Return a safer print NAME for a file descriptor */
445
446 static char *
447 fdr_name (f)
448 FDR *f;
449 {
450 if (f->rss == -1)
451 return "<stripped file>";
452 if (f->rss == 0)
453 return "<NFY>";
454 return debug_info->ss + f->issBase + f->rss;
455 }
456
457
458 /* Read in and parse the symtab of the file OBJFILE. Symbols from
459 different sections are relocated via the SECTION_OFFSETS. */
460
461 void
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;
467 {
468 cur_bfd = objfile->obfd;
469 debug_swap = swap;
470 debug_info = info;
471
472 /* Make sure all the FDR information is swapped in. */
473 if (info->fdr == (FDR *) NULL)
474 {
475 char *fdr_src;
476 char *fdr_end;
477 FDR *fdr_ptr;
478
479 info->fdr = (FDR *) obstack_alloc (&objfile->psymbol_obstack,
480 (info->symbolic_header.ifdMax
481 * sizeof (FDR)));
482 fdr_src = info->external_fdr;
483 fdr_end = (fdr_src
484 + info->symbolic_header.ifdMax * swap->external_fdr_size);
485 fdr_ptr = info->fdr;
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);
488 }
489
490 parse_partial_symbols (objfile, section_offsets);
491
492 #if 0
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)
496 {
497 if (max_gdbinfo == 0)
498 printf_unfiltered ("\n%s not compiled with -g, debugging support is limited.\n",
499 objfile->name);
500 printf_unfiltered ("You should compile with -g2 or -g3 for best debugging support.\n");
501 gdb_flush (gdb_stdout);
502 }
503 #endif
504 }
505 \f
506 /* Local utilities */
507
508 /* Map of FDR indexes to partial symtabs */
509
510 struct pst_map
511 {
512 struct partial_symtab *pst; /* the psymtab proper */
513 long n_globals; /* exported globals (external symbols) */
514 long globals_offset; /* cumulative */
515 };
516
517
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
521 after use. */
522
523 static struct parse_stack
524 {
525 struct parse_stack *next, *prev;
526 struct symtab *cur_st; /* Current symtab. */
527 struct block *cur_block; /* Block in it. */
528
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. */
534
535 int blocktype;
536
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 */
542 }
543
544 *top_stack; /* Top stack ptr */
545
546
547 /* Enter a new lexical context */
548
549 static void
550 push_parse_stack ()
551 {
552 struct parse_stack *new;
553
554 /* Reuse frames if possible */
555 if (top_stack && top_stack->prev)
556 new = top_stack->prev;
557 else
558 new = (struct parse_stack *) xzalloc (sizeof (struct parse_stack));
559 /* Initialize new frame with previous content */
560 if (top_stack)
561 {
562 register struct parse_stack *prev = new->prev;
563
564 *new = *top_stack;
565 top_stack->prev = new;
566 new->prev = prev;
567 new->next = top_stack;
568 }
569 top_stack = new;
570 }
571
572 /* Exit a lexical context */
573
574 static void
575 pop_parse_stack ()
576 {
577 if (!top_stack)
578 return;
579 if (top_stack->next)
580 top_stack = top_stack->next;
581 }
582
583
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 */
588
589 struct mdebug_pending
590 {
591 struct mdebug_pending *next; /* link */
592 char *s; /* the unswapped symbol */
593 struct type *t; /* its partial type descriptor */
594 };
595
596
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. */
603
604 static struct mdebug_pending **pending_list;
605
606 /* Check whether we already saw symbol SH in file FH */
607
608 static struct mdebug_pending *
609 is_pending_symbol (fh, sh)
610 FDR *fh;
611 char *sh;
612 {
613 int f_idx = fh - debug_info->fdr;
614 register struct mdebug_pending *p;
615
616 /* Linear search is ok, list is typically no more than 10 deep */
617 for (p = pending_list[f_idx]; p; p = p->next)
618 if (p->s == sh)
619 break;
620 return p;
621 }
622
623 /* Add a new symbol SH of type T */
624
625 static void
626 add_pending (fh, sh, t)
627 FDR *fh;
628 char *sh;
629 struct type *t;
630 {
631 int f_idx = fh - debug_info->fdr;
632 struct mdebug_pending *p = is_pending_symbol (fh, sh);
633
634 /* Make sure we do not make duplicates */
635 if (!p)
636 {
637 p = ((struct mdebug_pending *)
638 obstack_alloc (&current_objfile->psymbol_obstack,
639 sizeof (struct mdebug_pending)));
640 p->s = sh;
641 p->t = t;
642 p->next = pending_list[f_idx];
643 pending_list[f_idx] = p;
644 }
645 }
646 \f
647
648 /* Parsing Routines proper. */
649
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). */
658
659 static int
660 parse_symbol (sh, ax, ext_sh, bigend, section_offsets)
661 SYMR *sh;
662 union aux_ext *ax;
663 char *ext_sh;
664 int bigend;
665 struct section_offsets *section_offsets;
666 {
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;
670 char *name;
671 struct symbol *s;
672 struct block *b;
673 struct mdebug_pending *pend;
674 struct type *t;
675 struct field *f;
676 int count = 1;
677 enum address_class class;
678 TIR tir;
679 long svalue = sh->value;
680 int bitsize;
681
682 if (ext_sh == (char *) NULL)
683 name = debug_info->ssext + sh->iss;
684 else
685 name = debug_info->ss + cur_fdr->issBase + sh->iss;
686
687 switch (sh->sc)
688 {
689 case scText:
690 /* The value of a stEnd symbol is the displacement from the
691 corresponding start symbol value, do not relocate it. */
692 if (sh->st != stEnd)
693 sh->value += ANOFFSET (section_offsets, SECT_OFF_TEXT);
694 break;
695 case scData:
696 case scSData:
697 case scRData:
698 case scPData:
699 case scXData:
700 sh->value += ANOFFSET (section_offsets, SECT_OFF_DATA);
701 break;
702 case scBss:
703 case scSBss:
704 sh->value += ANOFFSET (section_offsets, SECT_OFF_BSS);
705 break;
706 }
707
708 switch (sh->st)
709 {
710 case stNil:
711 break;
712
713 case stGlobal: /* external symbol, goes into global block */
714 class = LOC_STATIC;
715 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (top_stack->cur_st),
716 GLOBAL_BLOCK);
717 s = new_symbol (name);
718 SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
719 goto data;
720
721 case stStatic: /* static data, goes into current block. */
722 class = LOC_STATIC;
723 b = top_stack->cur_block;
724 s = new_symbol (name);
725 if (sh->sc == scCommon || sh->sc == scSCommon)
726 {
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;
733 }
734 else
735 SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
736 goto data;
737
738 case stLocal: /* local variable, goes into current block */
739 if (sh->sc == scRegister)
740 {
741 class = LOC_REGISTER;
742 svalue = ECOFF_REG_TO_REGNUM (svalue);
743 }
744 else
745 class = LOC_LOCAL;
746 b = top_stack->cur_block;
747 s = new_symbol (name);
748 SYMBOL_VALUE (s) = svalue;
749
750 data: /* Common code for symbols describing data */
751 SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
752 SYMBOL_CLASS (s) = class;
753 add_symbol (s, b);
754
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;
758 else
759 SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
760 /* Value of a data symbol is its memory address */
761 break;
762
763 case stParam: /* arg to procedure, goes into current block */
764 max_gdbinfo++;
765 found_ecoff_debugging_info = 1;
766 top_stack->numargs++;
767
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);
772
773 SYMBOL_NAMESPACE (s) = VAR_NAMESPACE;
774 switch (sh->sc)
775 {
776 case scRegister:
777 /* Pass by value in register. */
778 SYMBOL_CLASS(s) = LOC_REGPARM;
779 svalue = ECOFF_REG_TO_REGNUM (svalue);
780 break;
781 case scVar:
782 /* Pass by reference on stack. */
783 SYMBOL_CLASS(s) = LOC_REF_ARG;
784 break;
785 case scVarRegister:
786 /* Pass by reference in register. */
787 SYMBOL_CLASS(s) = LOC_REGPARM_ADDR;
788 svalue = ECOFF_REG_TO_REGNUM (svalue);
789 break;
790 default:
791 /* Pass by value on stack. */
792 SYMBOL_CLASS(s) = LOC_ARG;
793 break;
794 }
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);
798 break;
799
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);
807 break;
808
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;
817 else
818 t = parse_type (cur_fd, ax, sh->index + 1, 0, bigend, name);
819 b = top_stack->cur_block;
820 if (sh->st == stProc)
821 {
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
825 global). */
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);
833 }
834 add_symbol (s, b);
835
836 /* Make a type for the procedure itself */
837 SYMBOL_TYPE (s) = lookup_function_type (t);
838
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);
846
847 /* Not if we only have partial info */
848 if (sh->sc == scUndefined || sh->sc == scNil)
849 break;
850
851 push_parse_stack ();
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;
858 break;
859
860 /* Beginning of code for structure, union, and enum definitions.
861 They all share a common set of local variables, defined here. */
862 {
863 enum type_code type_code;
864 char *ext_tsym;
865 int nfields;
866 long max_value;
867 struct field *f;
868
869 case stStruct: /* Start a block defining a struct type */
870 type_code = TYPE_CODE_STRUCT;
871 goto structured_common;
872
873 case stUnion: /* Start a block defining a union type */
874 type_code = TYPE_CODE_UNION;
875 goto structured_common;
876
877 case stEnum: /* Start a block defining an enum type */
878 type_code = TYPE_CODE_ENUM;
879 goto structured_common;
880
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 */
884
885 type_code = TYPE_CODE_UNDEF; /* We have a type. */
886
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. */
890 structured_common:
891 found_ecoff_debugging_info = 1;
892 push_parse_stack ();
893 top_stack->blocktype = stBlock;
894
895 /* First count the number of fields and the highest value. */
896 nfields = 0;
897 max_value = 0;
898 for (ext_tsym = ext_sh + external_sym_size;
899 ;
900 ext_tsym += external_sym_size)
901 {
902 SYMR tsym;
903
904 (*swap_sym_in) (cur_bfd, ext_tsym, &tsym);
905
906 switch (tsym.st)
907 {
908 case stEnd:
909 goto end_of_fields;
910
911 case stMember:
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
915 enumeration. */
916 if (tsym.index == indexNil)
917 type_code = TYPE_CODE_ENUM;
918 else
919 {
920 (*debug_swap->swap_tir_in) (bigend,
921 &ax[tsym.index].a_ti,
922 &tir);
923 if ((tir.bt == btNil || tir.bt == btVoid)
924 && tir.tq0 == tqNil)
925 type_code = TYPE_CODE_ENUM;
926 }
927 nfields++;
928 if (tsym.value > max_value)
929 max_value = tsym.value;
930 break;
931
932 case stBlock:
933 case stUnion:
934 case stEnum:
935 case stStruct:
936 {
937 #if 0
938 /* This is a no-op; is it trying to tell us something
939 we should be checking? */
940 if (tsym.sc == scVariant); /*UNIMPLEMENTED*/
941 #endif
942 if (tsym.index != 0)
943 {
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));
951 }
952 }
953 break;
954
955 case stTypedef:
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; };
959 Just ignore it. */
960 break;
961
962 case stIndirect:
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; };
966 Just ignore it. */
967 break;
968
969 default:
970 complain (&block_member_complaint, tsym.st);
971 }
972 }
973 end_of_fields:;
974
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.
985
986 So until we know for sure, we will guess at this point.
987 The heuristic is:
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.
993
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
999 much.
1000
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
1006 here.) */
1007
1008 if (type_code == TYPE_CODE_UNDEF)
1009 if (nfields > 1 && max_value == 0)
1010 type_code = TYPE_CODE_UNION;
1011 else
1012 type_code = TYPE_CODE_STRUCT;
1013
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)
1017 {
1018 t = new_type (NULL);
1019 add_pending (cur_fdr, ext_sh, t);
1020 }
1021 else
1022 t = pend->t;
1023
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;
1029 else
1030 TYPE_TAG_NAME (t) = obconcat (&current_objfile->symbol_obstack,
1031 "", "", name);
1032
1033 TYPE_CODE (t) = type_code;
1034 TYPE_LENGTH (t) = sh->value;
1035 TYPE_NFIELDS (t) = nfields;
1036 TYPE_FIELDS (t) = f = ((struct field *)
1037 TYPE_ALLOC (t,
1038 nfields * sizeof (struct field)));
1039
1040 if (type_code == TYPE_CODE_ENUM)
1041 {
1042 /* This is a non-empty enum. */
1043
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;
1053 ;
1054 ext_tsym += external_sym_size)
1055 {
1056 SYMR tsym;
1057 struct symbol *enum_sym;
1058
1059 (*swap_sym_in) (cur_bfd, ext_tsym, &tsym);
1060
1061 if (tsym.st != stMember)
1062 break;
1063
1064 f->bitpos = tsym.value;
1065 f->type = t;
1066 f->name = debug_info->ss + cur_fdr->issBase + tsym.iss;
1067 f->bitsize = 0;
1068
1069 enum_sym = ((struct symbol *)
1070 obstack_alloc (&current_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);
1079
1080 /* Skip the stMembers that we've handled. */
1081 count++;
1082 f++;
1083 }
1084 }
1085 /* make this the current type */
1086 top_stack->cur_type = t;
1087 top_stack->cur_field = 0;
1088
1089 /* Do not create a symbol for alpha cc unnamed structs. */
1090 if (sh->iss == 0)
1091 break;
1092
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)
1096 {
1097 TYPE_FLAGS (t) |= TYPE_FLAG_STUB;
1098 break;
1099 }
1100
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);
1107 break;
1108
1109 /* End of local variables shared by struct, union, enum, and
1110 block (as yet unknown struct/union/enum) processing. */
1111 }
1112
1113 case_stBlock_code:
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 ();
1118
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)
1124 {
1125 top_stack->blocktype = stNil;
1126 break;
1127 }
1128
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);
1135 break;
1136
1137 case stEnd: /* end (of anything) */
1138 if (sh->sc == scInfo || sh->sc == scCommon || sh->sc == scSCommon)
1139 {
1140 /* Finished with type */
1141 top_stack->cur_type = 0;
1142 }
1143 else if (sh->sc == scText &&
1144 (top_stack->blocktype == stProc ||
1145 top_stack->blocktype == stStaticProc))
1146 {
1147 /* Finished with procedure */
1148 struct blockvector *bv = BLOCKVECTOR (top_stack->cur_st);
1149 struct mips_extra_func_info *e;
1150 struct block *b;
1151 struct type *ftype = top_stack->cur_type;
1152 int i;
1153
1154 BLOCK_END (top_stack->cur_block) += sh->value; /* size */
1155
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 (&current_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);
1169
1170 /* Reallocate symbols, saving memory */
1171 b = shrink_block (top_stack->cur_block, top_stack->cur_st);
1172
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++)
1176 {
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)
1181 {
1182 BLOCK_START (b_bad) = BLOCK_START (b);
1183 BLOCK_END (b_bad) = BLOCK_END (b);
1184 }
1185 }
1186
1187 if (TYPE_NFIELDS (ftype) <= 0)
1188 {
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;
1192 int iparams;
1193 struct symbol *sym;
1194
1195 if (nparams > 0)
1196 {
1197 TYPE_NFIELDS (ftype) = nparams;
1198 TYPE_FIELDS (ftype) = (struct field *)
1199 TYPE_ALLOC (ftype, nparams * sizeof (struct field));
1200
1201 for (i = iparams = 0; iparams < nparams; i++)
1202 {
1203 sym = BLOCK_SYM (b, i);
1204 switch (SYMBOL_CLASS (sym))
1205 {
1206 case LOC_ARG:
1207 case LOC_REF_ARG:
1208 case LOC_REGPARM:
1209 case LOC_REGPARM_ADDR:
1210 TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym);
1211 iparams++;
1212 break;
1213 default:
1214 break;
1215 }
1216 }
1217 }
1218 }
1219 }
1220 else if (sh->sc == scText && top_stack->blocktype == stBlock)
1221 {
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);
1227 }
1228 else if (sh->sc == scText && top_stack->blocktype == stNil)
1229 {
1230 /* End of outermost block. Pop parse stack and ignore. The
1231 following stEnd of stProc will take care of the block. */
1232 ;
1233 }
1234 else if (sh->sc == scText && top_stack->blocktype == stFile)
1235 {
1236 /* End of file. Pop parse stack and ignore. Higher
1237 level code deals with this. */
1238 ;
1239 }
1240 else
1241 complain (&stEnd_complaint, sh->sc);
1242
1243 pop_parse_stack (); /* restore previous lexical context */
1244 break;
1245
1246 case stMember: /* member of struct or union */
1247 f = &TYPE_FIELDS (top_stack->cur_type)[top_stack->cur_field++];
1248 f->name = name;
1249 f->bitpos = sh->value;
1250 bitsize = 0;
1251 f->type = parse_type (cur_fd, ax, sh->index, &bitsize, bigend, name);
1252 f->bitsize = bitsize;
1253 break;
1254
1255 case stIndirect: /* forward declaration on Irix5 */
1256 /* Forward declarations from Irix5 cc are handled by cross_ref,
1257 skip them. */
1258 break;
1259
1260 case stTypedef: /* type definition */
1261 found_ecoff_debugging_info = 1;
1262
1263 /* Typedefs for forward declarations and opaque structs from alpha cc
1264 are handled by cross_ref, skip them. */
1265 if (sh->iss == 0)
1266 break;
1267
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)
1271 {
1272 t = parse_type (cur_fd, ax, sh->index, (int *)NULL, bigend, name);
1273 add_pending (cur_fdr, ext_sh, t);
1274 }
1275 else
1276 t = pend->t;
1277
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:
1283 x.h:
1284 struct x { int ix; int jx; };
1285 struct xx;
1286 x.c:
1287 typedef struct x x;
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. */
1293
1294 /* However if the typedef cross references to an opaque aggregate, it
1295 is safe to omit it from the symbol table. */
1296
1297 if (has_opaque_xref (cur_fdr, sh))
1298 break;
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);
1305
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)))
1311 {
1312 if (TYPE_CODE (SYMBOL_TYPE (s)) == TYPE_CODE_PTR
1313 || TYPE_CODE (SYMBOL_TYPE (s)) == TYPE_CODE_FUNC)
1314 {
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
1327 case).
1328
1329 Sigh.
1330
1331 Fortunately, this check seems not to be necessary
1332 for anything except pointers or functions. */
1333 }
1334 else
1335 TYPE_NAME (SYMBOL_TYPE (s)) = SYMBOL_NAME (s);
1336 }
1337 break;
1338
1339 case stFile: /* file name */
1340 push_parse_stack ();
1341 top_stack->blocktype = sh->st;
1342 break;
1343
1344 /* I`ve never seen these for C */
1345 case stRegReloc:
1346 break; /* register relocation */
1347 case stForward:
1348 break; /* forwarding address */
1349 case stConstant:
1350 break; /* constant */
1351 default:
1352 complain (&unknown_mdebug_symtype_complaint, sh->st);
1353 break;
1354 }
1355
1356 return count;
1357 }
1358
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). */
1363
1364 static struct type *
1365 parse_type (fd, ax, aux_index, bs, bigend, sym_name)
1366 int fd;
1367 union aux_ext *ax;
1368 unsigned int aux_index;
1369 int *bs;
1370 int bigend;
1371 char *sym_name;
1372 {
1373 /* Null entries in this map are treated specially */
1374 static struct type **map_bt[] =
1375 {
1376 &builtin_type_void, /* btNil */
1377 0, /* btAdr */
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 */
1388 0, /* btStruct */
1389 0, /* btUnion */
1390 0, /* btEnum */
1391 0, /* btTypedef */
1392 0, /* btRange */
1393 0, /* btSet */
1394 &builtin_type_complex, /* btComplex */
1395 &builtin_type_double_complex,/* btDComplex */
1396 0, /* btIndirect */
1397 &mdebug_type_fixed_dec, /* btFixedDec */
1398 &mdebug_type_float_dec, /* btFloatDec */
1399 &mdebug_type_string, /* btString */
1400 0, /* btBit */
1401 0, /* btPicture */
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 */
1413 };
1414
1415 TIR t[1];
1416 struct type *tp = 0;
1417 enum type_code type_code = TYPE_CODE_UNDEF;
1418
1419 /* Handle undefined types, they have indexNil. */
1420 if (aux_index == indexNil)
1421 return builtin_type_int;
1422
1423 /* Handle corrupt aux indices. */
1424 if (aux_index >= (debug_info->fdr + fd)->caux)
1425 {
1426 complain (&index_complaint, sym_name);
1427 return builtin_type_int;
1428 }
1429 ax += aux_index;
1430
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)))
1434 {
1435 complain (&basic_type_complaint, t->bt, sym_name);
1436 return builtin_type_int;
1437 }
1438 if (map_bt[t->bt])
1439 {
1440 tp = *map_bt[t->bt];
1441 }
1442 else
1443 {
1444 tp = NULL;
1445 /* Cannot use builtin types -- build our own */
1446 switch (t->bt)
1447 {
1448 case btAdr:
1449 tp = lookup_pointer_type (builtin_type_void);
1450 break;
1451 case btStruct:
1452 type_code = TYPE_CODE_STRUCT;
1453 break;
1454 case btUnion:
1455 type_code = TYPE_CODE_UNION;
1456 break;
1457 case btEnum:
1458 type_code = TYPE_CODE_ENUM;
1459 break;
1460 case btRange:
1461 type_code = TYPE_CODE_RANGE;
1462 break;
1463 case btSet:
1464 type_code = TYPE_CODE_SET;
1465 break;
1466 case btTypedef:
1467 /* alpha cc uses this for typedefs. The true type will be
1468 obtained by crossreferencing below. */
1469 type_code = TYPE_CODE_ERROR;
1470 break;
1471 default:
1472 complain (&basic_type_complaint, t->bt, sym_name);
1473 return builtin_type_int;
1474 }
1475 }
1476
1477 /* Move on to next aux */
1478 ax++;
1479
1480 if (t->fBitfield)
1481 {
1482 /* Inhibit core dumps with some cfront generated objects that
1483 corrupt the TIR. */
1484 if (bs == (int *)NULL)
1485 {
1486 complain (&bad_fbitfield_complaint, sym_name);
1487 return builtin_type_int;
1488 }
1489 *bs = AUX_GET_WIDTH (bigend, ax);
1490 ax++;
1491 }
1492
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 ||
1497 t->bt == btUnion ||
1498 t->bt == btEnum ||
1499
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. */
1502 t->bt == btSet)
1503 {
1504 char *name;
1505
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);
1510
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;
1516
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
1519 are corrupted. */
1520 if (TYPE_CODE (tp) != TYPE_CODE_STRUCT
1521 && TYPE_CODE (tp) != TYPE_CODE_UNION
1522 && TYPE_CODE (tp) != TYPE_CODE_ENUM)
1523 {
1524 complain (&unexpected_type_code_complaint, sym_name);
1525 }
1526 else
1527 {
1528
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))
1537 {
1538 complain (&bad_tag_guess_complaint, sym_name);
1539 }
1540
1541 if (TYPE_CODE (tp) != type_code)
1542 {
1543 TYPE_CODE (tp) = type_code;
1544 }
1545
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 &current_objfile->type_obstack);
1554 }
1555 }
1556
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 ||
1563 t->bt == btRange)
1564 {
1565 char *name;
1566
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);
1571
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
1574 are corrupted. */
1575 if (TYPE_CODE (tp) != TYPE_CODE_RANGE)
1576 {
1577 complain (&unexpected_type_code_complaint, sym_name);
1578 }
1579 else
1580 {
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)
1584 {
1585 complain (&bad_tag_guess_complaint, sym_name);
1586 TYPE_CODE (tp) = type_code;
1587 }
1588 if (TYPE_NAME (tp) == NULL || !STREQ (TYPE_NAME (tp), name))
1589 TYPE_NAME (tp) = obsavestring (name, strlen (name),
1590 &current_objfile->type_obstack);
1591 }
1592 }
1593 if (t->bt == btTypedef)
1594 {
1595 char *name;
1596
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)
1600 {
1601 complain (&unable_to_cross_ref_complaint, sym_name);
1602 tp = builtin_type_int;
1603 }
1604 }
1605
1606 /* Deal with range types */
1607 if (t->bt == btRange)
1608 {
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 &current_objfile->type_obstack);
1614 TYPE_FIELD_BITPOS (tp, 0) = AUX_GET_DNLOW (bigend, ax);
1615 ax++;
1616 TYPE_FIELD_NAME (tp, 1) = obsavestring ("High", strlen ("High"),
1617 &current_objfile->type_obstack);
1618 TYPE_FIELD_BITPOS (tp, 1) = AUX_GET_DNHIGH (bigend, ax);
1619 ax++;
1620 }
1621
1622 /* Parse all the type qualifiers now. If there are more
1623 than 6 the game will continue in the next aux */
1624
1625 while (1)
1626 {
1627 #define PARSE_TQ(tq) \
1628 if (t->tq != tqNil) \
1629 ax += upgrade_type(fd, &tp, t->tq, ax, bigend, sym_name); \
1630 else \
1631 break;
1632
1633 PARSE_TQ (tq0);
1634 PARSE_TQ (tq1);
1635 PARSE_TQ (tq2);
1636 PARSE_TQ (tq3);
1637 PARSE_TQ (tq4);
1638 PARSE_TQ (tq5);
1639 #undef PARSE_TQ
1640
1641 /* mips cc 2.x and gcc never put out continued aux entries. */
1642 if (!t->continued)
1643 break;
1644
1645 (*debug_swap->swap_tir_in) (bigend, &ax->a_ti, t);
1646 ax++;
1647 }
1648
1649 /* Complain for illegal continuations due to corrupt aux entries. */
1650 if (t->continued)
1651 complain (&bad_continued_complaint, sym_name);
1652
1653 return tp;
1654 }
1655
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. */
1662
1663 static int
1664 upgrade_type (fd, tpp, tq, ax, bigend, sym_name)
1665 int fd;
1666 struct type **tpp;
1667 int tq;
1668 union aux_ext *ax;
1669 int bigend;
1670 char *sym_name;
1671 {
1672 int off;
1673 struct type *t;
1674
1675 /* Used in array processing */
1676 int rf, id;
1677 FDR *fh;
1678 struct type *range;
1679 struct type *indx;
1680 int lower, upper;
1681 RNDXR rndx;
1682
1683 switch (tq)
1684 {
1685 case tqPtr:
1686 t = lookup_pointer_type (*tpp);
1687 *tpp = t;
1688 return 0;
1689
1690 case tqProc:
1691 t = lookup_function_type (*tpp);
1692 *tpp = t;
1693 return 0;
1694
1695 case tqArray:
1696 off = 0;
1697
1698 /* Determine and record the domain type (type of index) */
1699 (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, &rndx);
1700 id = rndx.index;
1701 rf = rndx.rfd;
1702 if (rf == 0xfff)
1703 {
1704 ax++;
1705 rf = AUX_GET_ISYM (bigend, ax);
1706 off++;
1707 }
1708 fh = get_rfd (fd, rf);
1709
1710 indx = parse_type (fd, debug_info->external_aux + fh->iauxBase,
1711 id, (int *) NULL, bigend, sym_name);
1712
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)
1716 {
1717 complain (&array_index_type_complaint, sym_name);
1718 indx = builtin_type_int;
1719 }
1720
1721 /* Get the bounds, and create the array type. */
1722 ax++;
1723 lower = AUX_GET_DNLOW (bigend, ax);
1724 ax++;
1725 upper = AUX_GET_DNHIGH (bigend, ax);
1726 ax++;
1727 rf = AUX_GET_WIDTH (bigend, ax); /* bit size of array element */
1728
1729 range = create_range_type ((struct type *) NULL, indx,
1730 lower, upper);
1731
1732 t = create_array_type ((struct type *) NULL, *tpp, range);
1733
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. */
1747
1748 *tpp = t;
1749 return 4 + off;
1750
1751 case tqVol:
1752 /* Volatile -- currently ignored */
1753 return 0;
1754
1755 case tqConst:
1756 /* Const -- currently ignored */
1757 return 0;
1758
1759 default:
1760 complain (&unknown_type_qual_complaint, tq);
1761 return 0;
1762 }
1763 }
1764
1765
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. */
1776
1777 static void parse_procedure PARAMS ((PDR *, struct symtab *, unsigned long,
1778 struct partial_symtab *));
1779
1780 static void
1781 parse_procedure (pr, search_symtab, first_off, pst)
1782 PDR *pr;
1783 struct symtab *search_symtab;
1784 unsigned long first_off;
1785 struct partial_symtab *pst;
1786 {
1787 struct symbol *s, *i;
1788 struct block *b;
1789 struct mips_extra_func_info *e;
1790 char *sh_name;
1791
1792 /* Simple rule to find files linked "-x" */
1793 if (cur_fdr->rss == -1)
1794 {
1795 if (pr->isym == -1)
1796 {
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);
1800 return;
1801 }
1802 else
1803 {
1804 /* external */
1805 EXTR she;
1806
1807 (*debug_swap->swap_ext_in) (cur_bfd,
1808 ((char *) debug_info->external_ext
1809 + (pr->isym
1810 * debug_swap->external_ext_size)),
1811 &she);
1812 sh_name = debug_info->ssext + she.asym.iss;
1813 }
1814 }
1815 else
1816 {
1817 /* Full symbols */
1818 SYMR sh;
1819
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)),
1824 &sh);
1825 sh_name = debug_info->ss + cur_fdr->issBase + sh.iss;
1826 }
1827
1828 if (search_symtab != NULL)
1829 {
1830 #if 0
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;
1841 #else
1842 s = mylookup_symbol
1843 (sh_name,
1844 BLOCKVECTOR_BLOCK (BLOCKVECTOR (search_symtab), STATIC_BLOCK),
1845 VAR_NAMESPACE,
1846 LOC_BLOCK);
1847 #endif
1848 }
1849 else
1850 s = mylookup_symbol (sh_name, top_stack->cur_block,
1851 VAR_NAMESPACE, LOC_BLOCK);
1852
1853 if (s != 0)
1854 {
1855 b = SYMBOL_BLOCK_VALUE (s);
1856 }
1857 else
1858 {
1859 complain (&pdr_for_nonsymbol_complaint, sh_name);
1860 #if 1
1861 return;
1862 #else
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 */
1871 b = new_block (2);
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);
1880 #endif
1881 }
1882
1883 i = mylookup_symbol (MIPS_EFI_SYMBOL_NAME, b, LABEL_NAMESPACE, LOC_CONST);
1884
1885 if (i)
1886 {
1887 e = (struct mips_extra_func_info *) SYMBOL_VALUE (i);
1888 e->pdr = *pr;
1889 e->pdr.isym = (long) s;
1890 e->pdr.adr += pst->textlow - first_off;
1891
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"))
1895 {
1896 complain (&bad_setjmp_pdr_complaint, 0);
1897 e->pdr.pcreg = RA_REGNUM;
1898 e->pdr.regmask = 0x80000000;
1899 e->pdr.regoffset = -4;
1900 }
1901 }
1902
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
1906 have btVoid.
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'
1909 case right.
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
1913 settings.
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. */
1917
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;
1922 }
1923
1924 /* Relocate the extra function info pointed to by the symbol table. */
1925
1926 void
1927 ecoff_relocate_efi (sym, delta)
1928 struct symbol *sym;
1929 CORE_ADDR delta;
1930 {
1931 struct mips_extra_func_info *e;
1932
1933 e = (struct mips_extra_func_info *) SYMBOL_VALUE (sym);
1934
1935 e->pdr.adr += delta;
1936 }
1937
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.
1941
1942 This routine clobbers top_stack->cur_block and ->cur_st. */
1943
1944 static void parse_external PARAMS ((EXTR *, int, struct section_offsets *));
1945
1946 static void
1947 parse_external (es, bigend, section_offsets)
1948 EXTR *es;
1949 int bigend;
1950 struct section_offsets *section_offsets;
1951 {
1952 union aux_ext *ax;
1953
1954 if (es->ifd != ifdNil)
1955 {
1956 cur_fd = es->ifd;
1957 cur_fdr = debug_info->fdr + cur_fd;
1958 ax = debug_info->external_aux + cur_fdr->iauxBase;
1959 }
1960 else
1961 {
1962 cur_fdr = debug_info->fdr;
1963 ax = 0;
1964 }
1965
1966 /* Reading .o files */
1967 if (es->asym.sc == scUndefined || es->asym.sc == scNil)
1968 {
1969 char *what;
1970 switch (es->asym.st)
1971 {
1972 case stNil:
1973 /* These are generated for static symbols in .o files,
1974 ignore them. */
1975 return;
1976 case stStaticProc:
1977 case stProc:
1978 what = "procedure";
1979 n_undef_procs++;
1980 break;
1981 case stGlobal:
1982 what = "variable";
1983 n_undef_vars++;
1984 break;
1985 case stLabel:
1986 what = "label";
1987 n_undef_labels++;
1988 break;
1989 default:
1990 what = "symbol";
1991 break;
1992 }
1993 n_undef_symbols++;
1994 /* FIXME: Turn this into a complaint? */
1995 if (info_verbose)
1996 printf_filtered ("Warning: %s `%s' is undefined (in %s)\n",
1997 what, debug_info->ssext + es->asym.iss,
1998 fdr_name (cur_fdr));
1999 return;
2000 }
2001
2002 switch (es->asym.st)
2003 {
2004 case stProc:
2005 case stStaticProc:
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. */
2015 break;
2016 case stGlobal:
2017 case stLabel:
2018 /* Global common symbols are resolved by the runtime loader,
2019 ignore them. */
2020 if (es->asym.sc == scCommon || es->asym.sc == scSCommon)
2021 break;
2022
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);
2026 break;
2027 default:
2028 break;
2029 }
2030 }
2031
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 */
2037
2038 static void parse_lines PARAMS ((FDR *, PDR *, struct linetable *, int,
2039 struct partial_symtab *));
2040
2041 static void
2042 parse_lines (fh, pr, lt, maxlines, pst)
2043 FDR *fh;
2044 PDR *pr;
2045 struct linetable *lt;
2046 int maxlines;
2047 struct partial_symtab *pst;
2048 {
2049 unsigned char *base;
2050 int j, k;
2051 int delta, count, lineno = 0;
2052 unsigned long first_off = pr->adr;
2053
2054 if (fh->cbLine == 0)
2055 return;
2056
2057 /* Scan by procedure descriptors */
2058 k = 0;
2059 for (j = 0; j < fh->cpd; j++, pr++)
2060 {
2061 long l;
2062 unsigned long adr;
2063 unsigned char *halt;
2064
2065 /* No code for this one */
2066 if (pr->iline == ilineNil ||
2067 pr->lnLow == -1 || pr->lnHigh == -1)
2068 continue;
2069
2070 /* Determine start and end address of compressed line bytes for
2071 this procedure. */
2072 base = debug_info->line + fh->cbLineOffset;
2073 if (j != (fh->cpd - 1))
2074 halt = base + pr[1].cbLineOffset;
2075 else
2076 halt = base + fh->cbLine;
2077 base += pr->cbLineOffset;
2078
2079 adr = pst->textlow + pr->adr - first_off;
2080
2081 l = adr >> 2; /* in words */
2082 for (lineno = pr->lnLow; base < halt; )
2083 {
2084 count = *base & 0x0f;
2085 delta = *base++ >> 4;
2086 if (delta >= 8)
2087 delta -= 16;
2088 if (delta == -8)
2089 {
2090 delta = (base[0] << 8) | base[1];
2091 if (delta >= 0x8000)
2092 delta -= 0x10000;
2093 base += 2;
2094 }
2095 lineno += delta; /* first delta is 0 */
2096
2097 /* Complain if the line table overflows. Could happen
2098 with corrupt binaries. */
2099 if (lt->nitems >= maxlines)
2100 {
2101 complain (&bad_linetable_guess_complaint, fdr_name (fh));
2102 break;
2103 }
2104 k = add_line (lt, lineno, l, k);
2105 l += count + 1;
2106 }
2107 }
2108 }
2109 \f
2110 /* Master parsing procedure for first-pass reading of file symbols
2111 into a partial_symtab. */
2112
2113 static void
2114 parse_partial_symbols (objfile, section_offsets)
2115 struct objfile *objfile;
2116 struct section_offsets *section_offsets;
2117 {
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;
2127 int f_idx, s_idx;
2128 HDRR *hdr = &debug_info->symbolic_header;
2129 /* Running pointers */
2130 FDR *fh;
2131 char *ext_out;
2132 char *ext_out_end;
2133 EXTR *ext_block;
2134 register EXTR *ext_in;
2135 EXTR *ext_in_end;
2136 SYMR sh;
2137 struct partial_symtab *pst;
2138
2139 int past_first_source_file = 0;
2140
2141 /* List of current psymtab's include files */
2142 char **psymtab_include_list;
2143 int includes_allocated;
2144 int includes_used;
2145 EXTR *extern_tab;
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;
2151 char *name;
2152 enum language prev_language;
2153 asection *text_sect;
2154 int relocatable = 0;
2155
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))
2165 relocatable = 1;
2166
2167 extern_tab = (EXTR *) obstack_alloc (&objfile->psymbol_obstack,
2168 sizeof (EXTR) * hdr->iextMax);
2169
2170 includes_allocated = 30;
2171 includes_used = 0;
2172 psymtab_include_list = (char **) alloca (includes_allocated *
2173 sizeof (char *));
2174 next_symbol_text_func = mdebug_next_symbol_text;
2175
2176 dependencies_allocated = 30;
2177 dependencies_used = 0;
2178 dependency_list =
2179 (struct partial_symtab **) alloca (dependencies_allocated *
2180 sizeof (struct partial_symtab *));
2181
2182 last_source_file = NULL;
2183
2184 /*
2185 * Big plan:
2186 *
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
2190 * look at. (XXX)
2191 */
2192
2193 max_gdbinfo = 0;
2194 max_glevel = MIN_GLEVEL;
2195
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);
2201 fdr_to_pst++;
2202 {
2203 struct partial_symtab *pst = new_psymtab ("", objfile, section_offsets);
2204 fdr_to_pst[-1].pst = pst;
2205 FDR_IDX (pst) = -1;
2206 }
2207
2208 /* Allocate the global pending list. */
2209 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 *));
2215
2216 /* Pass 0 over external syms: swap them in. */
2217 ext_block = (EXTR *) xmalloc (hdr->iextMax * sizeof (EXTR));
2218 make_cleanup (free, ext_block);
2219
2220 ext_out = (char *) debug_info->external_ext;
2221 ext_out_end = ext_out + hdr->iextMax * external_ext_size;
2222 ext_in = ext_block;
2223 for (; ext_out < ext_out_end; ext_out += external_ext_size, ext_in++)
2224 (*swap_ext_in) (cur_bfd, ext_out, ext_in);
2225
2226 /* Pass 1 over external syms: Presize and partition the list */
2227 ext_in = ext_block;
2228 ext_in_end = ext_in + hdr->iextMax;
2229 for (; ext_in < ext_in_end; ext_in++)
2230 {
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++;
2237 }
2238
2239 /* Pass 1.5 over files: partition out global symbol space */
2240 s_idx = 0;
2241 for (f_idx = -1; f_idx < hdr->ifdMax; f_idx++)
2242 {
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;
2246 }
2247
2248 /* Pass 2 over external syms: fill in external symbols */
2249 ext_in = ext_block;
2250 ext_in_end = ext_in + hdr->iextMax;
2251 for (; ext_in < ext_in_end; ext_in++)
2252 {
2253 enum minimal_symbol_type ms_type = mst_text;
2254 CORE_ADDR svalue = ext_in->asym.value;
2255
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)
2259 {
2260 complain (&bad_ext_ifd_complaint, ext_in->ifd, hdr->ifdMax);
2261 continue;
2262 }
2263 if (ext_in->asym.iss < 0 || ext_in->asym.iss >= hdr->issExtMax)
2264 {
2265 complain (&bad_ext_iss_complaint, ext_in->asym.iss,
2266 hdr->issExtMax);
2267 continue;
2268 }
2269
2270 extern_tab[fdr_to_pst[ext_in->ifd].globals_offset
2271 + fdr_to_pst[ext_in->ifd].n_globals++] = *ext_in;
2272
2273 if (ext_in->asym.sc == scUndefined || ext_in->asym.sc == scNil)
2274 continue;
2275
2276 name = debug_info->ssext + ext_in->asym.iss;
2277 switch (ext_in->asym.st)
2278 {
2279 case stProc:
2280 svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2281 break;
2282 case stStaticProc:
2283 ms_type = mst_file_text;
2284 svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2285 break;
2286 case stGlobal:
2287 if (ext_in->asym.sc == scCommon || ext_in->asym.sc == scSCommon)
2288 {
2289 /* The value of a common symbol is its size, not its address.
2290 Ignore it. */
2291 continue;
2292 }
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)
2298 {
2299 ms_type = mst_data;
2300 svalue += ANOFFSET (section_offsets, SECT_OFF_DATA);
2301 }
2302 else
2303 {
2304 ms_type = mst_bss;
2305 svalue += ANOFFSET (section_offsets, SECT_OFF_BSS);
2306 }
2307 break;
2308 case stLabel:
2309 if (ext_in->asym.sc == scAbs)
2310 ms_type = mst_abs;
2311 else if (ext_in->asym.sc == scText
2312 || ext_in->asym.sc == scInit
2313 || ext_in->asym.sc == scFini)
2314 {
2315 ms_type = mst_file_text;
2316 svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2317 }
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)
2323 {
2324 ms_type = mst_file_data;
2325 svalue += ANOFFSET (section_offsets, SECT_OFF_DATA);
2326 }
2327 else
2328 {
2329 ms_type = mst_file_bss;
2330 svalue += ANOFFSET (section_offsets, SECT_OFF_BSS);
2331 }
2332 break;
2333 case stLocal:
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. */
2337 if (name[0] == '.')
2338 continue;
2339 /* Fall through. */
2340 default:
2341 ms_type = mst_unknown;
2342 complain (&unknown_ext_complaint, name);
2343 }
2344 prim_record_minimal_symbol (name, svalue, ms_type, objfile);
2345 }
2346
2347 /* Pass 3 over files, over local syms: fill in static symbols */
2348 for (f_idx = 0; f_idx < hdr->ifdMax; f_idx++)
2349 {
2350 struct partial_symtab *save_pst;
2351 EXTR *ext_ptr;
2352 CORE_ADDR textlow;
2353
2354 cur_fdr = fh = debug_info->fdr + f_idx;
2355
2356 if (fh->csym == 0)
2357 {
2358 fdr_to_pst[f_idx].pst = NULL;
2359 continue;
2360 }
2361
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. */
2364 if (fh->cpd)
2365 {
2366 textlow = fh->adr;
2367 if (relocatable || textlow != 0)
2368 textlow += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2369 }
2370 else
2371 textlow = 0;
2372 pst = start_psymtab_common (objfile, section_offsets,
2373 fdr_name (fh),
2374 textlow,
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));
2381
2382 save_pst = pst;
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;
2388
2389 /* The way to turn this into a symtab is to call... */
2390 pst->read_symtab = mdebug_psymtab_to_symtab;
2391
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;
2404
2405 switch (fh->lang)
2406 {
2407 case langCplusplusV2:
2408 psymtab_language = language_cplus;
2409 break;
2410 default:
2411 psymtab_language = deduce_language_from_filename (fdr_name (fh));
2412 break;
2413 }
2414 if (psymtab_language == language_unknown)
2415 psymtab_language = prev_language;
2416 PST_PRIVATE (pst)->pst_language = psymtab_language;
2417
2418 pst->texthigh = pst->textlow;
2419
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
2425 file). */
2426 processing_gcc_compilation = 0;
2427 if (fh->csym >= 2)
2428 {
2429 (*swap_sym_in) (cur_bfd,
2430 ((char *) debug_info->external_sym
2431 + (fh->isymBase + 1) * external_sym_size),
2432 &sh);
2433 if (STREQ (debug_info->ss + fh->issBase + sh.iss, stabs_symbol))
2434 processing_gcc_compilation = 2;
2435 }
2436
2437 if (processing_gcc_compilation != 0)
2438 {
2439 for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
2440 {
2441 int type_code;
2442 char *namestring;
2443
2444 (*swap_sym_in) (cur_bfd,
2445 (((char *) debug_info->external_sym)
2446 + (fh->isymBase + cur_sdx) * external_sym_size),
2447 &sh);
2448 type_code = ECOFF_UNMARK_STAB (sh.index);
2449 if (!ECOFF_IS_STAB (&sh))
2450 {
2451 if (sh.st == stProc || sh.st == stStaticProc)
2452 {
2453 long procaddr;
2454 long isym;
2455
2456 sh.value += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2457 if (sh.st == stStaticProc)
2458 {
2459 namestring = debug_info->ss + fh->issBase + sh.iss;
2460 prim_record_minimal_symbol_and_info (namestring,
2461 sh.value,
2462 mst_file_text,
2463 NULL,
2464 SECT_OFF_TEXT,
2465 objfile);
2466 }
2467 procaddr = sh.value;
2468
2469 isym = AUX_GET_ISYM (fh->fBigendian,
2470 (debug_info->external_aux
2471 + fh->iauxBase
2472 + sh.index));
2473 (*swap_sym_in) (cur_bfd,
2474 ((char *) debug_info->external_sym
2475 + ((fh->isymBase + isym - 1)
2476 * external_sym_size)),
2477 &sh);
2478 if (sh.st == stEnd)
2479 {
2480 long high = procaddr + sh.value;
2481
2482 /* Kludge for Irix 5.2 zero fh->adr. */
2483 if (!relocatable
2484 && (pst->textlow == 0 || procaddr < pst->textlow))
2485 pst->textlow = procaddr;
2486 if (high > pst->texthigh)
2487 pst->texthigh = high;
2488 }
2489 }
2490 else if (sh.st == stStatic)
2491 {
2492 switch (sh.sc)
2493 {
2494 case scUndefined:
2495 case scNil:
2496 case scAbs:
2497 break;
2498
2499 case scData:
2500 case scSData:
2501 case scRData:
2502 case scPData:
2503 case scXData:
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,
2507 sh.value,
2508 mst_file_data,
2509 NULL,
2510 SECT_OFF_DATA,
2511 objfile);
2512 break;
2513
2514 default:
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,
2518 sh.value,
2519 mst_file_bss,
2520 NULL,
2521 SECT_OFF_BSS,
2522 objfile);
2523 break;
2524 }
2525 }
2526 continue;
2527 }
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)\
2533 pst = save_pst
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"
2538 }
2539 }
2540 else
2541 {
2542 for (cur_sdx = 0; cur_sdx < fh->csym;)
2543 {
2544 char *name;
2545 enum address_class class;
2546
2547 (*swap_sym_in) (cur_bfd,
2548 ((char *) debug_info->external_sym
2549 + ((fh->isymBase + cur_sdx)
2550 * external_sym_size)),
2551 &sh);
2552
2553 if (ECOFF_IS_STAB (&sh))
2554 {
2555 cur_sdx++;
2556 continue;
2557 }
2558
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)))
2563 {
2564 /* FIXME, premature? */
2565 cur_sdx++;
2566 continue;
2567 }
2568
2569 name = debug_info->ss + fh->issBase + sh.iss;
2570
2571 switch (sh.sc)
2572 {
2573 case scText:
2574 /* The value of a stEnd symbol is the displacement from the
2575 corresponding start symbol value, do not relocate it. */
2576 if (sh.st != stEnd)
2577 sh.value += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2578 break;
2579 case scData:
2580 case scSData:
2581 case scRData:
2582 case scPData:
2583 case scXData:
2584 sh.value += ANOFFSET (section_offsets, SECT_OFF_DATA);
2585 break;
2586 case scBss:
2587 case scSBss:
2588 sh.value += ANOFFSET (section_offsets, SECT_OFF_BSS);
2589 break;
2590 }
2591
2592 switch (sh.st)
2593 {
2594 long high;
2595 long procaddr;
2596 int new_sdx;
2597
2598 case stStaticProc:
2599 prim_record_minimal_symbol_and_info (name, sh.value,
2600 mst_file_text, NULL,
2601 SECT_OFF_TEXT, objfile);
2602
2603 /* FALLTHROUGH */
2604
2605 case stProc:
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
2616 symbol table. */
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);
2622 else
2623 ADD_PSYMBOL_TO_LIST (name, strlen (name),
2624 VAR_NAMESPACE, LOC_BLOCK,
2625 objfile->static_psymbols,
2626 sh.value, psymtab_language, objfile);
2627
2628 /* Skip over procedure to next one. */
2629 if (sh.index >= hdr->iauxMax)
2630 {
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 */
2635 }
2636 else
2637 new_sdx = AUX_GET_ISYM (fh->fBigendian,
2638 (debug_info->external_aux
2639 + fh->iauxBase
2640 + sh.index));
2641 procaddr = sh.value;
2642
2643 if (new_sdx <= cur_sdx)
2644 {
2645 /* This should not happen either... FIXME. */
2646 complain (&aux_index_complaint, name);
2647 new_sdx = cur_sdx + 1; /* Don't skip backward */
2648 }
2649
2650 cur_sdx = new_sdx;
2651 (*swap_sym_in) (cur_bfd,
2652 ((char *) debug_info->external_sym
2653 + ((fh->isymBase + cur_sdx - 1)
2654 * external_sym_size)),
2655 &sh);
2656 if (sh.st != stEnd)
2657 continue;
2658
2659 /* Kludge for Irix 5.2 zero fh->adr. */
2660 if (!relocatable
2661 && (pst->textlow == 0 || procaddr < pst->textlow))
2662 pst->textlow = procaddr;
2663
2664 high = procaddr + sh.value;
2665 if (high > pst->texthigh)
2666 pst->texthigh = high;
2667 continue;
2668
2669 case stStatic: /* Variable */
2670 if (sh.sc == scData
2671 || sh.sc == scSData
2672 || sh.sc == scRData
2673 || sh.sc == scPData
2674 || sh.sc == scXData)
2675 prim_record_minimal_symbol_and_info (name, sh.value,
2676 mst_file_data, NULL,
2677 SECT_OFF_DATA,
2678 objfile);
2679 else
2680 prim_record_minimal_symbol_and_info (name, sh.value,
2681 mst_file_bss, NULL,
2682 SECT_OFF_BSS,
2683 objfile);
2684 class = LOC_STATIC;
2685 break;
2686
2687 case stIndirect:/* Irix5 forward declaration */
2688 /* Skip forward declarations from Irix5 cc */
2689 goto skip;
2690
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))
2695 goto skip;
2696 class = LOC_TYPEDEF;
2697 break;
2698
2699 case stConstant: /* Constant decl */
2700 class = LOC_CONST;
2701 break;
2702
2703 case stUnion:
2704 case stStruct:
2705 case stEnum:
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)
2711 && sh.iss != 0
2712 && sh.index != cur_sdx + 2)
2713 {
2714 ADD_PSYMBOL_TO_LIST (name, strlen (name),
2715 STRUCT_NAMESPACE, LOC_TYPEDEF,
2716 objfile->static_psymbols,
2717 sh.value,
2718 psymtab_language, objfile);
2719 }
2720 handle_psymbol_enumerators (objfile, fh, sh.st);
2721
2722 /* Skip over the block */
2723 new_sdx = sh.index;
2724 if (new_sdx <= cur_sdx)
2725 {
2726 /* This happens with the Ultrix kernel. */
2727 complain (&block_index_complaint, name);
2728 new_sdx = cur_sdx + 1; /* Don't skip backward */
2729 }
2730 cur_sdx = new_sdx;
2731 continue;
2732
2733 case stFile: /* File headers */
2734 case stLabel: /* Labels */
2735 case stEnd: /* Ends of files */
2736 goto skip;
2737
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. */
2742 goto skip;
2743
2744 default:
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);
2749 cur_sdx++;
2750 continue;
2751 }
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);
2757 skip:
2758 cur_sdx++; /* Go to next file symbol */
2759 }
2760
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++)
2767 {
2768 enum address_class class;
2769 SYMR *psh;
2770 char *name;
2771 CORE_ADDR svalue;
2772
2773 if (ext_ptr->ifd != f_idx)
2774 abort ();
2775 psh = &ext_ptr->asym;
2776
2777 /* Do not add undefined symbols to the partial symbol table. */
2778 if (psh->sc == scUndefined || psh->sc == scNil)
2779 continue;
2780
2781 svalue = psh->value;
2782 switch (psh->sc)
2783 {
2784 case scText:
2785 svalue += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2786 break;
2787 case scData:
2788 case scSData:
2789 case scRData:
2790 case scPData:
2791 case scXData:
2792 svalue += ANOFFSET (section_offsets, SECT_OFF_DATA);
2793 break;
2794 case scBss:
2795 case scSBss:
2796 svalue += ANOFFSET (section_offsets, SECT_OFF_BSS);
2797 break;
2798 }
2799
2800 switch (psh->st)
2801 {
2802 case stNil:
2803 /* These are generated for static symbols in .o files,
2804 ignore them. */
2805 continue;
2806 case stProc:
2807 case stStaticProc:
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. */
2811 continue;
2812 case stLabel:
2813 class = LOC_LABEL;
2814 break;
2815 default:
2816 complain (&unknown_ext_complaint,
2817 debug_info->ssext + psh->iss);
2818 /* Fall through, pretend it's global. */
2819 case stGlobal:
2820 /* Global common symbols are resolved by the runtime loader,
2821 ignore them. */
2822 if (psh->sc == scCommon || psh->sc == scSCommon)
2823 continue;
2824
2825 class = LOC_STATIC;
2826 break;
2827 }
2828 name = debug_info->ssext + psh->iss;
2829 ADD_PSYMBOL_ADDR_TO_LIST (name, strlen (name),
2830 VAR_NAMESPACE, class,
2831 objfile->global_psymbols,
2832 svalue,
2833 psymtab_language, objfile);
2834 }
2835 }
2836
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)
2845 {
2846 objfile->ei.entry_file_lowpc = save_pst->textlow;
2847 objfile->ei.entry_file_highpc = save_pst->texthigh;
2848 }
2849
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.
2857
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
2860 other cases. */
2861 save_pst = fdr_to_pst[f_idx].pst;
2862 if (save_pst != NULL
2863 && save_pst->textlow != 0
2864 && !(objfile->flags & OBJF_REORDERED))
2865 {
2866 ALL_OBJFILE_PSYMTABS (objfile, pst)
2867 {
2868 if (save_pst != pst
2869 && save_pst->textlow >= pst->textlow
2870 && save_pst->textlow < pst->texthigh
2871 && save_pst->texthigh > pst->texthigh)
2872 {
2873 objfile->flags |= OBJF_REORDERED;
2874 break;
2875 }
2876 }
2877 }
2878 }
2879
2880 /* Now scan the FDRs for dependencies */
2881 for (f_idx = 0; f_idx < hdr->ifdMax; f_idx++)
2882 {
2883 fh = f_idx + debug_info->fdr;
2884 pst = fdr_to_pst[f_idx].pst;
2885
2886 if (pst == (struct partial_symtab *)NULL)
2887 continue;
2888
2889 /* This should catch stabs-in-ecoff. */
2890 if (fh->crfd <= 1)
2891 continue;
2892
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;
2896 pst->dependencies =
2897 ((struct partial_symtab **)
2898 obstack_alloc (&objfile->psymbol_obstack,
2899 ((fh->crfd - 1)
2900 * sizeof (struct partial_symtab *))));
2901 for (s_idx = 1; s_idx < fh->crfd; s_idx++)
2902 {
2903 RFDT rh;
2904
2905 (*swap_rfd_in) (cur_bfd,
2906 ((char *) debug_info->external_rfd
2907 + (fh->rfdBase + s_idx) * external_rfd_size),
2908 &rh);
2909 if (rh < 0 || rh >= hdr->ifdMax)
2910 {
2911 complain (&bad_file_number_complaint, rh);
2912 continue;
2913 }
2914
2915 /* Skip self dependencies of header files. */
2916 if (rh == f_idx)
2917 continue;
2918
2919 /* Do not add to dependeny list if psymtab was empty. */
2920 if (fdr_to_pst[rh].pst == (struct partial_symtab *)NULL)
2921 continue;
2922 pst->dependencies[pst->number_of_dependencies++] = fdr_to_pst[rh].pst;
2923 }
2924 }
2925
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);
2934 }
2935
2936 /* If the current psymbol has an enumerated type, we need to add
2937 all the the enum constants to the partial symbol table. */
2938
2939 static void
2940 handle_psymbol_enumerators (objfile, fh, stype)
2941 struct objfile *objfile;
2942 FDR *fh;
2943 int stype;
2944 {
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));
2950 SYMR sh;
2951 TIR tir;
2952
2953 switch (stype)
2954 {
2955 case stEnum:
2956 break;
2957
2958 case stBlock:
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)
2964 return;
2965
2966 if (sh.index == indexNil)
2967 break;
2968 (*debug_swap->swap_tir_in) (fh->fBigendian,
2969 &(debug_info->external_aux
2970 + fh->iauxBase + sh.index)->a_ti,
2971 &tir);
2972 if ((tir.bt != btNil && tir.bt != btVoid) || tir.tq0 != tqNil)
2973 return;
2974 break;
2975
2976 default:
2977 return;
2978 }
2979
2980 for (;;)
2981 {
2982 char *name;
2983
2984 (*swap_sym_in) (cur_bfd, ext_sym, &sh);
2985 if (sh.st != stMember)
2986 break;
2987 name = debug_info->ss + cur_fdr->issBase + sh.iss;
2988
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;
2996 }
2997 }
2998
2999 static char *
3000 mdebug_next_symbol_text ()
3001 {
3002 SYMR sh;
3003
3004 cur_sdx++;
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)),
3009 &sh);
3010 return debug_info->ss + cur_fdr->issBase + sh.iss;
3011 }
3012
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
3017 is being read.
3018
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. */
3022
3023 static void
3024 psymtab_to_symtab_1 (pst, filename)
3025 struct partial_symtab *pst;
3026 char *filename;
3027 {
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 *));
3032 int i;
3033 struct symtab *st;
3034 FDR *fh;
3035 struct linetable *lines;
3036
3037 if (pst->readin)
3038 return;
3039 pst->readin = 1;
3040
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. */
3044
3045 for (i = 0; i < pst->number_of_dependencies; i++)
3046 if (!pst->dependencies[i]->readin)
3047 {
3048 /* Inform about additional files to be read in. */
3049 if (info_verbose)
3050 {
3051 fputs_filtered (" ", gdb_stdout);
3052 wrap_here ("");
3053 fputs_filtered ("and ", gdb_stdout);
3054 wrap_here ("");
3055 printf_filtered ("%s...",
3056 pst->dependencies[i]->filename);
3057 wrap_here (""); /* Flush output */
3058 gdb_flush (gdb_stdout);
3059 }
3060 /* We only pass the filename for debug purposes */
3061 psymtab_to_symtab_1 (pst->dependencies[i],
3062 pst->dependencies[i]->filename);
3063 }
3064
3065 /* Do nothing if this is a dummy psymtab. */
3066
3067 if (pst->n_global_syms == 0 && pst->n_static_syms == 0
3068 && pst->textlow == 0 && pst->texthigh == 0)
3069 return;
3070
3071 /* Now read the symbols for this symtab */
3072
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)
3084 ? (FDR *) NULL
3085 : debug_info->fdr + cur_fd);
3086 cur_fdr = fh;
3087
3088 /* See comment in parse_partial_symbols about the @stabs sentinel. */
3089 processing_gcc_compilation = 0;
3090 if (fh != (FDR *) NULL && fh->csym >= 2)
3091 {
3092 SYMR sh;
3093
3094 (*swap_sym_in) (cur_bfd,
3095 ((char *) debug_info->external_sym
3096 + (fh->isymBase + 1) * external_sym_size),
3097 &sh);
3098 if (STREQ (debug_info->ss + fh->issBase + sh.iss,
3099 stabs_symbol))
3100 {
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;
3104 }
3105 }
3106
3107 if (processing_gcc_compilation != 0)
3108 {
3109 char *pdr_ptr;
3110 char *pdr_end;
3111 int first_pdr;
3112 unsigned long first_off = 0;
3113
3114 /* This symbol table contains stabs-in-ecoff entries. */
3115
3116 /* Parse local symbols first */
3117
3118 if (fh->csym <= 2) /* FIXME, this blows psymtab->symtab ptr */
3119 {
3120 current_objfile = NULL;
3121 return;
3122 }
3123 for (cur_sdx = 2; cur_sdx < fh->csym; cur_sdx++)
3124 {
3125 SYMR sh;
3126 char *name;
3127 CORE_ADDR valu;
3128
3129 (*swap_sym_in) (cur_bfd,
3130 (((char *) debug_info->external_sym)
3131 + (fh->isymBase + cur_sdx) * external_sym_size),
3132 &sh);
3133 name = debug_info->ss + fh->issBase + sh.iss;
3134 valu = sh.value;
3135 if (ECOFF_IS_STAB (&sh))
3136 {
3137 int type_code = ECOFF_UNMARK_STAB (sh.index);
3138
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)
3143 {
3144 process_one_symbol (type_code, 0, valu, name,
3145 pst->section_offsets, pst->objfile);
3146 }
3147 if (type_code == N_FUN)
3148 {
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 (&current_objfile->symbol_obstack,
3154 sizeof (struct mips_extra_func_info)));
3155 struct symbol *s = new_symbol (MIPS_EFI_SYMBOL_NAME);
3156
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);
3164 }
3165 }
3166 else if (sh.st == stLabel)
3167 {
3168 if (sh.index == indexNil)
3169 {
3170 /* This is what the gcc2_compiled and __gnu_compiled_*
3171 show up as. So don't complain. */
3172 ;
3173 }
3174 else
3175 /* Handle encoded stab line number. */
3176 record_line (current_subfile, sh.index, valu);
3177 }
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 */
3181 ;
3182 else
3183 complain (&stab_unknown_complaint, name);
3184 }
3185 st = end_symtab (pst->texthigh, 0, 0, pst->objfile, SECT_OFF_TEXT);
3186 end_stabs ();
3187
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);
3191
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. */
3197
3198 /* Fill in procedure info next. */
3199 first_pdr = 1;
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)
3204 {
3205 PDR pr;
3206
3207 (*swap_pdr_in) (cur_bfd, pdr_ptr, &pr);
3208 if (first_pdr)
3209 {
3210 first_off = pr.adr;
3211 first_pdr = 0;
3212 }
3213 parse_procedure (&pr, st, first_off, pst);
3214 }
3215 }
3216 else
3217 {
3218 /* This symbol table contains ordinary ecoff entries. */
3219
3220 /* FIXME: doesn't use pst->section_offsets. */
3221
3222 int f_max;
3223 int maxlines;
3224 EXTR *ext_ptr;
3225
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;
3229 if (fh == 0)
3230 {
3231 maxlines = 0;
3232 st = new_symtab ("unknown", f_max, 0, pst->objfile);
3233 }
3234 else
3235 {
3236 f_max += fh->csym + fh->cpd;
3237 maxlines = 2 * fh->cline;
3238 st = new_symtab (pst->filename, 2 * f_max, maxlines, pst->objfile);
3239
3240 /* The proper language was already determined when building
3241 the psymtab, use it. */
3242 st->language = PST_PRIVATE (pst)->pst_language;
3243 }
3244
3245 psymtab_language = st->language;
3246
3247 lines = LINETABLE (st);
3248
3249 /* Get a new lexical context */
3250
3251 push_parse_stack ();
3252 top_stack->cur_st = st;
3253 top_stack->cur_block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (st),
3254 STATIC_BLOCK);
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;
3263
3264 if (fh)
3265 {
3266 char *sym_ptr;
3267 char *sym_end;
3268
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)
3274 {
3275 SYMR sh;
3276 int c;
3277
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;
3283 }
3284
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. */
3288 if (fh->cpd > 0)
3289 {
3290 PDR *pr_block;
3291 struct cleanup *old_chain;
3292 char *pdr_ptr;
3293 char *pdr_end;
3294 PDR *pdr_in;
3295 PDR *pdr_in_end;
3296
3297 pr_block = (PDR *) xmalloc (fh->cpd * sizeof (PDR));
3298
3299 old_chain = make_cleanup (free, pr_block);
3300
3301 pdr_ptr = ((char *) debug_info->external_pdr
3302 + fh->ipdFirst * external_pdr_size);
3303 pdr_end = pdr_ptr + fh->cpd * external_pdr_size;
3304 pdr_in = pr_block;
3305 for (;
3306 pdr_ptr < pdr_end;
3307 pdr_ptr += external_pdr_size, pdr_in++)
3308 (*swap_pdr_in) (cur_bfd, pdr_ptr, pdr_in);
3309
3310 parse_lines (fh, pr_block, lines, maxlines, pst);
3311 if (lines->nitems < fh->cline)
3312 lines = shrink_linetable (lines);
3313
3314 /* Fill in procedure info next. */
3315 pdr_in = pr_block;
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);
3319
3320 do_cleanups (old_chain);
3321 }
3322 }
3323
3324 LINETABLE (st) = lines;
3325
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),
3331 GLOBAL_BLOCK);
3332 top_stack->blocktype = stFile;
3333 top_stack->maxsyms
3334 = (debug_info->symbolic_header.isymMax
3335 + debug_info->symbolic_header.ipdMax
3336 + debug_info->symbolic_header.iextMax);
3337
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);
3341
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)
3346 {
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;
3352
3353 }
3354 pop_parse_stack ();
3355
3356 st->primary = 1;
3357
3358 /* Sort the symbol table now, we are done adding symbols to it.*/
3359 sort_symtab_syms (st);
3360
3361 sort_blocks (st);
3362 }
3363
3364 /* Now link the psymtab and the symtab. */
3365 pst->symtab = st;
3366
3367 current_objfile = NULL;
3368 }
3369 \f
3370 /* Ancillary parsing procedures. */
3371
3372 /* Return 1 if the symbol pointed to by SH has a cross reference
3373 to an opaque aggregate type, else 0. */
3374
3375 static int
3376 has_opaque_xref (fh, sh)
3377 FDR *fh;
3378 SYMR *sh;
3379 {
3380 TIR tir;
3381 union aux_ext *ax;
3382 RNDXR rn[1];
3383 unsigned int rf;
3384
3385 if (sh->index == indexNil)
3386 return 0;
3387
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)
3391 return 0;
3392
3393 ax++;
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);
3397 else
3398 rf = rn->rfd;
3399 if (rf != -1)
3400 return 0;
3401 return 1;
3402 }
3403
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. */
3408
3409 static int
3410 cross_ref (fd, ax, tpp, type_code, pname, bigend, sym_name)
3411 int fd;
3412 union aux_ext *ax;
3413 struct type **tpp;
3414 enum type_code type_code; /* Use to alloc new type if none is found. */
3415 char **pname;
3416 int bigend;
3417 char *sym_name;
3418 {
3419 RNDXR rn[1];
3420 unsigned int rf;
3421 int result = 1;
3422 FDR *fh;
3423 char *esh;
3424 SYMR sh;
3425 int xref_fd;
3426 struct mdebug_pending *pend;
3427
3428 *tpp = (struct type *)NULL;
3429
3430 (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, rn);
3431
3432 /* Escape index means 'the next one' */
3433 if (rn->rfd == 0xfff)
3434 {
3435 result++;
3436 rf = AUX_GET_ISYM (bigend, ax + 1);
3437 }
3438 else
3439 {
3440 rf = rn->rfd;
3441 }
3442
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. */
3446 if (rf == -1)
3447 {
3448 *pname = "<undefined>";
3449 *tpp = init_type (type_code, 0, 0, (char *) NULL, current_objfile);
3450 TYPE_FLAGS (*tpp) |= TYPE_FLAG_STUB;
3451 return result;
3452 }
3453
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
3456 undefined. */
3457 if (rn->rfd == 0xfff && rn->index == 0)
3458 {
3459 *pname = "<undefined>";
3460 return result;
3461 }
3462
3463 /* Find the relative file descriptor and the symbol in it. */
3464 fh = get_rfd (fd, rf);
3465 xref_fd = fh - debug_info->fdr;
3466
3467 if (rn->index >= fh->csym)
3468 {
3469 /* File indirect entry is corrupt. */
3470 *pname = "<illegal>";
3471 complain (&bad_rfd_entry_complaint,
3472 sym_name, xref_fd, rn->index);
3473 return result;
3474 }
3475
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
3480 type here. */
3481
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);
3486
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)))
3493 {
3494 /* File indirect entry is corrupt. */
3495 *pname = "<illegal>";
3496 complain (&bad_rfd_entry_complaint,
3497 sym_name, xref_fd, rn->index);
3498 return result;
3499 }
3500
3501 *pname = debug_info->ss + fh->issBase + sh.iss;
3502
3503 pend = is_pending_symbol (fh, esh);
3504 if (pend)
3505 *tpp = pend->t;
3506 else
3507 {
3508 /* We have not yet seen this type. */
3509
3510 if ((sh.iss == 0 && sh.st == stTypedef) || sh.st == stIndirect)
3511 {
3512 TIR tir;
3513
3514 /* alpha cc puts out a stTypedef with a sh.iss of zero for
3515 two cases:
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. */
3527
3528 (*debug_swap->swap_tir_in) (bigend,
3529 &(debug_info->external_aux
3530 + fh->iauxBase + sh.index)->a_ti,
3531 &tir);
3532 if (tir.tq0 != tqNil)
3533 complain (&illegal_forward_tq0_complaint, sym_name);
3534 switch (tir.bt)
3535 {
3536 case btVoid:
3537 *tpp = init_type (type_code, 0, 0, (char *) NULL,
3538 current_objfile);
3539 *pname = "<undefined>";
3540 break;
3541
3542 case btStruct:
3543 case btUnion:
3544 case btEnum:
3545 cross_ref (xref_fd,
3546 (debug_info->external_aux
3547 + fh->iauxBase + sh.index + 1),
3548 tpp, type_code, pname,
3549 fh->fBigendian, sym_name);
3550 break;
3551
3552 default:
3553 complain (&illegal_forward_bt_complaint, tir.bt, sym_name);
3554 *tpp = init_type (type_code, 0, 0, (char *) NULL,
3555 current_objfile);
3556 break;
3557 }
3558 return result;
3559 }
3560 else if (sh.st == stTypedef)
3561 {
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,
3571 sh.index,
3572 (int *)NULL,
3573 fh->fBigendian,
3574 debug_info->ss + fh->issBase + sh.iss);
3575 }
3576 else
3577 {
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);
3584 }
3585 add_pending (fh, esh, *tpp);
3586 }
3587
3588 /* We used one auxent normally, two if we got a "next one" rf. */
3589 return result;
3590 }
3591
3592
3593 /* Quick&dirty lookup procedure, to avoid the MI ones that require
3594 keeping the symtab sorted */
3595
3596 static struct symbol *
3597 mylookup_symbol (name, block, namespace, class)
3598 char *name;
3599 register struct block *block;
3600 enum namespace namespace;
3601 enum address_class class;
3602 {
3603 register int bot, top, inc;
3604 register struct symbol *sym;
3605
3606 bot = 0;
3607 top = BLOCK_NSYMS (block);
3608 inc = name[0];
3609 while (bot < top)
3610 {
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)
3616 return sym;
3617 bot++;
3618 }
3619 block = BLOCK_SUPERBLOCK (block);
3620 if (block)
3621 return mylookup_symbol (name, block, namespace, class);
3622 return 0;
3623 }
3624
3625
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. */
3630
3631 static void
3632 add_symbol (s, b)
3633 struct symbol *s;
3634 struct block *b;
3635 {
3636 int nsyms = BLOCK_NSYMS (b)++;
3637 struct block *origb;
3638 struct parse_stack *stackp;
3639
3640 if (b == top_stack->cur_block &&
3641 nsyms >= top_stack->maxsyms)
3642 {
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. */
3646 origb = b;
3647 b = shrink_block (top_stack->cur_block, top_stack->cur_st);
3648
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)
3653 {
3654 if (stackp->cur_block == origb)
3655 {
3656 stackp->cur_block = b;
3657 stackp->maxsyms = BLOCK_NSYMS (b);
3658 }
3659 }
3660 }
3661 BLOCK_SYM (b, nsyms) = s;
3662 }
3663
3664 /* Add a new block B to a symtab S */
3665
3666 static void
3667 add_block (b, s)
3668 struct block *b;
3669 struct symtab *s;
3670 {
3671 struct blockvector *bv = BLOCKVECTOR (s);
3672
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;
3679
3680 BLOCKVECTOR_BLOCK (bv, BLOCKVECTOR_NBLOCKS (bv)++) = b;
3681 }
3682
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.
3686
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
3695 entries.
3696 This is another reason why -ggdb debugging format is preferable. */
3697
3698 static int
3699 add_line (lt, lineno, adr, last)
3700 struct linetable *lt;
3701 int lineno;
3702 CORE_ADDR adr;
3703 int last;
3704 {
3705 /* DEC c89 sometimes produces zero linenos which confuse gdb.
3706 Change them to something sensible. */
3707 if (lineno == 0)
3708 lineno = 1;
3709 if (last == 0)
3710 last = -2; /* make sure we record first line */
3711
3712 if (last == lineno) /* skip continuation lines */
3713 return lineno;
3714
3715 lt->item[lt->nitems].line = lineno;
3716 lt->item[lt->nitems++].pc = adr << 2;
3717 return lineno;
3718 }
3719 \f
3720 /* Sorting and reordering procedures */
3721
3722 /* Blocks with a smaller low bound should come first */
3723
3724 static int
3725 compare_blocks (arg1, arg2)
3726 const PTR arg1;
3727 const PTR arg2;
3728 {
3729 register int addr_diff;
3730 struct block **b1 = (struct block **) arg1;
3731 struct block **b2 = (struct block **) arg2;
3732
3733 addr_diff = (BLOCK_START ((*b1))) - (BLOCK_START ((*b2)));
3734 if (addr_diff == 0)
3735 return (BLOCK_END ((*b2))) - (BLOCK_END ((*b1)));
3736 return addr_diff;
3737 }
3738
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 */
3742
3743 static void
3744 sort_blocks (s)
3745 struct symtab *s;
3746 {
3747 struct blockvector *bv = BLOCKVECTOR (s);
3748
3749 if (BLOCKVECTOR_NBLOCKS (bv) <= 2)
3750 {
3751 /* Cosmetic */
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;
3756 return;
3757 }
3758 /*
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.
3763 */
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 *),
3768 compare_blocks);
3769
3770 {
3771 register CORE_ADDR high = 0;
3772 register int i, j = BLOCKVECTOR_NBLOCKS (bv);
3773
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;
3778 }
3779
3780 BLOCK_START (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)) =
3781 BLOCK_START (BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK));
3782
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));
3787 }
3788 \f
3789
3790 /* Constructor/restructor/destructor procedures */
3791
3792 /* Allocate a new symtab for NAME. Needs an estimate of how many symbols
3793 MAXSYMS and linenumbers MAXLINES we'll put in it */
3794
3795 static struct symtab *
3796 new_symtab (name, maxsyms, maxlines, objfile)
3797 char *name;
3798 int maxsyms;
3799 int maxlines;
3800 struct objfile *objfile;
3801 {
3802 struct symtab *s = allocate_symtab (name, objfile);
3803
3804 LINETABLE (s) = new_linetable (maxlines);
3805
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);
3812
3813 s->free_code = free_linetable;
3814
3815 return (s);
3816 }
3817
3818 /* Allocate a new partial_symtab NAME */
3819
3820 static struct partial_symtab *
3821 new_psymtab (name, objfile, section_offsets)
3822 char *name;
3823 struct objfile *objfile;
3824 struct section_offsets *section_offsets;
3825 {
3826 struct partial_symtab *psymtab;
3827
3828 psymtab = allocate_psymtab (name, objfile);
3829 psymtab->section_offsets = section_offsets;
3830
3831 /* Keep a backpointer to the file's symbols */
3832
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;
3841
3842 /* The way to turn this into a symtab is to call... */
3843 psymtab->read_symtab = mdebug_psymtab_to_symtab;
3844 return (psymtab);
3845 }
3846
3847
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. */
3851
3852 static struct linetable *
3853 new_linetable (size)
3854 int size;
3855 {
3856 struct linetable *l;
3857
3858 size = (size - 1) * sizeof (l->item) + sizeof (struct linetable);
3859 l = (struct linetable *) xmalloc (size);
3860 l->nitems = 0;
3861 return l;
3862 }
3863
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.
3866
3867 Since the struct linetable already includes one item, we subtract one when
3868 calculating the proper size to allocate. */
3869
3870 static struct linetable *
3871 shrink_linetable (lt)
3872 struct linetable *lt;
3873 {
3874
3875 return (struct linetable *) xrealloc ((PTR) lt,
3876 (sizeof (struct linetable)
3877 + ((lt->nitems - 1)
3878 * sizeof (lt->item))));
3879 }
3880
3881 /* Allocate and zero a new blockvector of NBLOCKS blocks. */
3882
3883 static struct blockvector *
3884 new_bvect (nblocks)
3885 int nblocks;
3886 {
3887 struct blockvector *bv;
3888 int size;
3889
3890 size = sizeof (struct blockvector) + nblocks * sizeof (struct block *);
3891 bv = (struct blockvector *) xzalloc (size);
3892
3893 BLOCKVECTOR_NBLOCKS (bv) = nblocks;
3894
3895 return bv;
3896 }
3897
3898 /* Allocate and zero a new block of MAXSYMS symbols */
3899
3900 static struct block *
3901 new_block (maxsyms)
3902 int maxsyms;
3903 {
3904 int size = sizeof (struct block) + (maxsyms - 1) * sizeof (struct symbol *);
3905
3906 return (struct block *) xzalloc (size);
3907 }
3908
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. */
3911
3912 static struct block *
3913 shrink_block (b, s)
3914 struct block *b;
3915 struct symtab *s;
3916 {
3917 struct block *new;
3918 struct blockvector *bv = BLOCKVECTOR (s);
3919 int i;
3920
3921 /* Just reallocate it and fix references to the old one */
3922
3923 new = (struct block *) xrealloc ((PTR) b,
3924 (sizeof (struct block)
3925 + ((BLOCK_NSYMS (b) - 1)
3926 * sizeof (struct symbol *))));
3927
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;
3937 return new;
3938 }
3939
3940 /* Create a new symbol with printname NAME */
3941
3942 static struct symbol *
3943 new_symbol (name)
3944 char *name;
3945 {
3946 struct symbol *s = ((struct symbol *)
3947 obstack_alloc (&current_objfile->symbol_obstack,
3948 sizeof (struct symbol)));
3949
3950 memset ((PTR) s, 0, sizeof (*s));
3951 SYMBOL_NAME (s) = name;
3952 SYMBOL_LANGUAGE (s) = psymtab_language;
3953 SYMBOL_INIT_DEMANGLED_NAME (s, &current_objfile->symbol_obstack);
3954 return s;
3955 }
3956
3957 /* Create a new type with printname NAME */
3958
3959 static struct type *
3960 new_type (name)
3961 char *name;
3962 {
3963 struct type *t;
3964
3965 t = alloc_type (current_objfile);
3966 TYPE_NAME (t) = name;
3967 TYPE_CPLUS_SPECIFIC (t) = (struct cplus_struct_type *) &cplus_struct_default;
3968 return t;
3969 }
3970 \f
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
3974 it as normal. */
3975
3976 void
3977 elfmdebug_build_psymtabs (objfile, swap, sec, section_offsets)
3978 struct objfile *objfile;
3979 const struct ecoff_debug_swap *swap;
3980 asection *sec;
3981 struct section_offsets *section_offsets;
3982 {
3983 bfd *abfd = objfile->obfd;
3984 struct ecoff_debug_info *info;
3985
3986 info = ((struct ecoff_debug_info *)
3987 obstack_alloc (&objfile->psymbol_obstack,
3988 sizeof (struct ecoff_debug_info)));
3989
3990 if (!(*swap->read_debug_info) (abfd, sec, info))
3991 error ("Error reading ECOFF debugging information: %s",
3992 bfd_errmsg (bfd_get_error ()));
3993
3994 mdebug_build_psymtabs (objfile, swap, info, section_offsets);
3995 }
3996 \f
3997
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. */
4002
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. */
4007
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. */
4011
4012 void
4013 fixup_sigtramp ()
4014 {
4015 struct symbol *s;
4016 struct symtab *st;
4017 struct block *b, *b0 = NULL;
4018
4019 sigtramp_address = -1;
4020
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);
4025 if (s != 0)
4026 {
4027 b0 = SYMBOL_BLOCK_VALUE (s);
4028 s = lookup_symbol ("sigtramp", b0, VAR_NAMESPACE, 0, NULL);
4029 }
4030 if (s == 0)
4031 {
4032 /* No sigvec or no sigtramp inside sigvec, try _sigtramp. */
4033 s = lookup_symbol ("_sigtramp", 0, VAR_NAMESPACE, 0, NULL);
4034 }
4035
4036 /* But maybe this program uses its own version of sigvec */
4037 if (s == 0)
4038 return;
4039
4040 /* Did we or MIPSco fix the library ? */
4041 if (SYMBOL_CLASS (s) == LOC_BLOCK)
4042 {
4043 sigtramp_address = BLOCK_START (SYMBOL_BLOCK_VALUE (s));
4044 sigtramp_end = BLOCK_END (SYMBOL_BLOCK_VALUE (s));
4045 return;
4046 }
4047
4048 sigtramp_address = SYMBOL_VALUE (s);
4049 sigtramp_end = sigtramp_address + 0x88; /* black magic */
4050
4051 /* But what symtab does it live in ? */
4052 st = find_pc_symtab (SYMBOL_VALUE (s));
4053
4054 /*
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.
4058 */
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,
4062 st->objfile);
4063 TYPE_TARGET_TYPE (SYMBOL_TYPE (s)) = builtin_type_void;
4064
4065 /* Need a block to allocate MIPS_EFI_SYMBOL_NAME in */
4066 b = new_block (1);
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);
4072 add_block (b, st);
4073 sort_blocks (st);
4074
4075 /* Make a MIPS_EFI_SYMBOL_NAME entry for it */
4076 {
4077 struct mips_extra_func_info *e =
4078 ((struct mips_extra_func_info *)
4079 xzalloc (sizeof (struct mips_extra_func_info)));
4080
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;
4099
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;
4107 }
4108
4109 BLOCK_SYM (b, BLOCK_NSYMS (b)++) = s;
4110 }
4111
4112 void
4113 _initialize_mdebugread ()
4114 {
4115 /* Missing basic types */
4116
4117 /* Is a "string" the way btString means it the same as TYPE_CODE_STRING?
4118 FIXME. */
4119 mdebug_type_string =
4120 init_type (TYPE_CODE_STRING,
4121 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
4122 0, "string",
4123 (struct objfile *) NULL);
4124
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,
4131 0, "fixed decimal",
4132 (struct objfile *) NULL);
4133
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);
4139
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);
4146 }
This page took 0.112655 seconds and 5 git commands to generate.