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