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