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