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