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