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