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