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