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