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