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