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