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