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