Fix things pointed up by Fred Fish's test suite; see ChangeLog.
[deliverable/binutils-gdb.git] / gdb / buildsym.c
1 /* Build symbol tables in GDB's internal format.
2 Copyright 1986, 1987, 1988, 1989, 1990, 1991 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20 /* This module provides subroutines used for creating and adding to
21 the symbol table. These routines are called from various symbol-
22 file-reading routines.
23
24 They originated in dbxread.c of gdb-4.2, and were split out to
25 make xcoffread.c more maintainable by sharing code. */
26
27 #include <stdio.h>
28 #include "defs.h"
29 #include "obstack.h"
30 #include "symtab.h"
31 #include "breakpoint.h"
32 #include "gdbcore.h" /* for bfd stuff for symfile.h */
33 #include "symfile.h" /* Needed for "struct complaint" */
34 #include "aout/stab_gnu.h" /* We always use GNU stabs, not native */
35 #include <string.h>
36 #include <ctype.h>
37
38 /* Ask buildsym.h to define the vars it normally declares `extern'. */
39 #define EXTERN /**/
40 #include "buildsym.h" /* Our own declarations */
41 #undef EXTERN
42
43 extern void qsort ();
44 extern double atof ();
45
46 /* Things we export from outside, and probably shouldn't. FIXME. */
47 extern void new_object_header_files ();
48 extern char *next_symbol_text ();
49 extern int hashname ();
50 extern void patch_block_stabs (); /* AIX xcoffread.c */
51 extern struct type *builtin_type (); /* AIX xcoffread.c */
52 \f
53
54 static void cleanup_undefined_types ();
55 static void fix_common_block ();
56
57 static const char vptr_name[] = { '_','v','p','t','r',CPLUS_MARKER,'\0' };
58 static const char vb_name[] = { '_','v','b',CPLUS_MARKER,'\0' };
59
60 /* Define this as 1 if a pcc declaration of a char or short argument
61 gives the correct address. Otherwise assume pcc gives the
62 address of the corresponding int, which is not the same on a
63 big-endian machine. */
64
65 #ifndef BELIEVE_PCC_PROMOTION
66 #define BELIEVE_PCC_PROMOTION 0
67 #endif
68
69 /* During some calls to read_type (and thus to read_range_type), this
70 contains the name of the type being defined. Range types are only
71 used in C as basic types. We use the name to distinguish the otherwise
72 identical basic types "int" and "long" and their unsigned versions.
73 FIXME, this should disappear with better type management. */
74
75 static char *long_kludge_name;
76
77 /* Make a list of forward references which haven't been defined. */
78 static struct type **undef_types;
79 static int undef_types_allocated, undef_types_length;
80
81 /* Initial sizes of data structures. These are realloc'd larger if needed,
82 and realloc'd down to the size actually used, when completed. */
83
84 #define INITIAL_CONTEXT_STACK_SIZE 10
85 #define INITIAL_TYPE_VECTOR_LENGTH 160
86 #define INITIAL_LINE_VECTOR_LENGTH 1000
87 \f
88 /* Complaints about the symbols we have encountered. */
89
90 struct complaint innerblock_complaint =
91 {"inner block not inside outer block in %s", 0, 0};
92
93 struct complaint blockvector_complaint =
94 {"block at %x out of order", 0, 0};
95
96 #if 0
97 struct complaint dbx_class_complaint =
98 {"encountered DBX-style class variable debugging information.\n\
99 You seem to have compiled your program with \
100 \"g++ -g0\" instead of \"g++ -g\".\n\
101 Therefore GDB will not know about your class variables", 0, 0};
102 #endif
103
104 struct complaint invalid_cpp_abbrev_complaint =
105 {"invalid C++ abbreviation `%s'", 0, 0};
106
107 struct complaint invalid_cpp_type_complaint =
108 {"C++ abbreviated type name unknown at symtab pos %d", 0, 0};
109
110 struct complaint member_fn_complaint =
111 {"member function type missing, got '%c'", 0, 0};
112
113 struct complaint const_vol_complaint =
114 {"const/volatile indicator missing, got '%c'", 0, 0};
115
116 struct complaint error_type_complaint =
117 {"debug info mismatch between compiler and debugger", 0, 0};
118
119 struct complaint invalid_member_complaint =
120 {"invalid (minimal) member type data format at symtab pos %d.", 0, 0};
121
122 struct complaint range_type_base_complaint =
123 {"base type %d of range type is not defined", 0, 0};
124 \f
125 /* Look up a dbx type-number pair. Return the address of the slot
126 where the type for that number-pair is stored.
127 The number-pair is in TYPENUMS.
128
129 This can be used for finding the type associated with that pair
130 or for associating a new type with the pair. */
131
132 struct type **
133 dbx_lookup_type (typenums)
134 int typenums[2];
135 {
136 register int filenum = typenums[0], index = typenums[1];
137 unsigned old_len;
138
139 if (filenum < 0 || filenum >= n_this_object_header_files)
140 error ("Invalid symbol data: type number (%d,%d) out of range at symtab pos %d.",
141 filenum, index, symnum);
142
143 if (filenum == 0)
144 {
145 /* Type is defined outside of header files.
146 Find it in this object file's type vector. */
147 if (index >= type_vector_length)
148 {
149 old_len = type_vector_length;
150 if (old_len == 0) {
151 type_vector_length = INITIAL_TYPE_VECTOR_LENGTH;
152 type_vector = (struct type **)
153 malloc (type_vector_length * sizeof (struct type *));
154 }
155 while (index >= type_vector_length)
156 type_vector_length *= 2;
157 type_vector = (struct type **)
158 xrealloc (type_vector,
159 (type_vector_length * sizeof (struct type *)));
160 bzero (&type_vector[old_len],
161 (type_vector_length - old_len) * sizeof (struct type *));
162 }
163 return &type_vector[index];
164 }
165 else
166 {
167 register int real_filenum = this_object_header_files[filenum];
168 register struct header_file *f;
169 int f_orig_length;
170
171 if (real_filenum >= n_header_files)
172 abort ();
173
174 f = &header_files[real_filenum];
175
176 f_orig_length = f->length;
177 if (index >= f_orig_length)
178 {
179 while (index >= f->length)
180 f->length *= 2;
181 f->vector = (struct type **)
182 xrealloc (f->vector, f->length * sizeof (struct type *));
183 bzero (&f->vector[f_orig_length],
184 (f->length - f_orig_length) * sizeof (struct type *));
185 }
186 return &f->vector[index];
187 }
188 }
189
190 /* Create a type object. Occaisionally used when you need a type
191 which isn't going to be given a type number. */
192
193 struct type *
194 dbx_create_type ()
195 {
196 register struct type *type =
197 (struct type *) obstack_alloc (symbol_obstack, sizeof (struct type));
198
199 bzero (type, sizeof (struct type));
200 TYPE_VPTR_FIELDNO (type) = -1;
201 TYPE_VPTR_BASETYPE (type) = 0;
202 return type;
203 }
204
205 /* Make sure there is a type allocated for type numbers TYPENUMS
206 and return the type object.
207 This can create an empty (zeroed) type object.
208 TYPENUMS may be (-1, -1) to return a new type object that is not
209 put into the type vector, and so may not be referred to by number. */
210
211 struct type *
212 dbx_alloc_type (typenums)
213 int typenums[2];
214 {
215 register struct type **type_addr;
216 register struct type *type;
217
218 if (typenums[0] != -1)
219 {
220 type_addr = dbx_lookup_type (typenums);
221 type = *type_addr;
222 }
223 else
224 {
225 type_addr = 0;
226 type = 0;
227 }
228
229 /* If we are referring to a type not known at all yet,
230 allocate an empty type for it.
231 We will fill it in later if we find out how. */
232 if (type == 0)
233 {
234 type = dbx_create_type ();
235 if (type_addr)
236 *type_addr = type;
237 }
238
239 return type;
240 }
241 \f
242 /* maintain the lists of symbols and blocks */
243
244 /* Add a symbol to one of the lists of symbols. */
245 void
246 add_symbol_to_list (symbol, listhead)
247 struct symbol *symbol;
248 struct pending **listhead;
249 {
250 /* We keep PENDINGSIZE symbols in each link of the list.
251 If we don't have a link with room in it, add a new link. */
252 if (*listhead == 0 || (*listhead)->nsyms == PENDINGSIZE)
253 {
254 register struct pending *link;
255 if (free_pendings)
256 {
257 link = free_pendings;
258 free_pendings = link->next;
259 }
260 else
261 link = (struct pending *) xmalloc (sizeof (struct pending));
262
263 link->next = *listhead;
264 *listhead = link;
265 link->nsyms = 0;
266 }
267
268 (*listhead)->symbol[(*listhead)->nsyms++] = symbol;
269 }
270
271 /* Find a symbol on a pending list. */
272 struct symbol *
273 find_symbol_in_list (list, name, length)
274 struct pending *list;
275 char *name;
276 int length;
277 {
278 int j;
279
280 while (list) {
281 for (j = list->nsyms; --j >= 0; ) {
282 char *pp = SYMBOL_NAME (list->symbol[j]);
283 if (*pp == *name && strncmp (pp, name, length) == 0 && pp[length] == '\0')
284 return list->symbol[j];
285 }
286 list = list->next;
287 }
288 return NULL;
289 }
290
291 /* At end of reading syms, or in case of quit,
292 really free as many `struct pending's as we can easily find. */
293
294 /* ARGSUSED */
295 void
296 really_free_pendings (foo)
297 int foo;
298 {
299 struct pending *next, *next1;
300 #if 0
301 struct pending_block *bnext, *bnext1;
302 #endif
303
304 for (next = free_pendings; next; next = next1)
305 {
306 next1 = next->next;
307 free (next);
308 }
309 free_pendings = 0;
310
311 #if 0 /* Now we make the links in the symbol_obstack, so don't free them. */
312 for (bnext = pending_blocks; bnext; bnext = bnext1)
313 {
314 bnext1 = bnext->next;
315 free (bnext);
316 }
317 #endif
318 pending_blocks = 0;
319
320 for (next = file_symbols; next; next = next1)
321 {
322 next1 = next->next;
323 free (next);
324 }
325 file_symbols = 0;
326
327 for (next = global_symbols; next; next = next1)
328 {
329 next1 = next->next;
330 free (next);
331 }
332 global_symbols = 0;
333 }
334
335 /* Take one of the lists of symbols and make a block from it.
336 Keep the order the symbols have in the list (reversed from the input file).
337 Put the block on the list of pending blocks. */
338
339 void
340 finish_block (symbol, listhead, old_blocks, start, end)
341 struct symbol *symbol;
342 struct pending **listhead;
343 struct pending_block *old_blocks;
344 CORE_ADDR start, end;
345 {
346 register struct pending *next, *next1;
347 register struct block *block;
348 register struct pending_block *pblock;
349 struct pending_block *opblock;
350 register int i;
351
352 /* Count the length of the list of symbols. */
353
354 for (next = *listhead, i = 0;
355 next;
356 i += next->nsyms, next = next->next)
357 /*EMPTY*/;
358
359 block = (struct block *) obstack_alloc (symbol_obstack,
360 (sizeof (struct block) + ((i - 1) * sizeof (struct symbol *))));
361
362 /* Copy the symbols into the block. */
363
364 BLOCK_NSYMS (block) = i;
365 for (next = *listhead; next; next = next->next)
366 {
367 register int j;
368 for (j = next->nsyms - 1; j >= 0; j--)
369 BLOCK_SYM (block, --i) = next->symbol[j];
370 }
371
372 BLOCK_START (block) = start;
373 BLOCK_END (block) = end;
374 BLOCK_SUPERBLOCK (block) = 0; /* Filled in when containing block is made */
375 BLOCK_GCC_COMPILED (block) = processing_gcc_compilation;
376
377 /* Put the block in as the value of the symbol that names it. */
378
379 if (symbol)
380 {
381 SYMBOL_BLOCK_VALUE (symbol) = block;
382 BLOCK_FUNCTION (block) = symbol;
383 }
384 else
385 BLOCK_FUNCTION (block) = 0;
386
387 /* Now "free" the links of the list, and empty the list. */
388
389 for (next = *listhead; next; next = next1)
390 {
391 next1 = next->next;
392 next->next = free_pendings;
393 free_pendings = next;
394 }
395 *listhead = 0;
396
397 /* Install this block as the superblock
398 of all blocks made since the start of this scope
399 that don't have superblocks yet. */
400
401 opblock = 0;
402 for (pblock = pending_blocks; pblock != old_blocks; pblock = pblock->next)
403 {
404 if (BLOCK_SUPERBLOCK (pblock->block) == 0) {
405 #if 1
406 /* Check to be sure the blocks are nested as we receive them.
407 If the compiler/assembler/linker work, this just burns a small
408 amount of time. */
409 if (BLOCK_START (pblock->block) < BLOCK_START (block)
410 || BLOCK_END (pblock->block) > BLOCK_END (block)) {
411 complain(&innerblock_complaint, symbol? SYMBOL_NAME (symbol):
412 "(don't know)");
413 BLOCK_START (pblock->block) = BLOCK_START (block);
414 BLOCK_END (pblock->block) = BLOCK_END (block);
415 }
416 #endif
417 BLOCK_SUPERBLOCK (pblock->block) = block;
418 }
419 opblock = pblock;
420 }
421
422 /* Record this block on the list of all blocks in the file.
423 Put it after opblock, or at the beginning if opblock is 0.
424 This puts the block in the list after all its subblocks. */
425
426 /* Allocate in the symbol_obstack to save time.
427 It wastes a little space. */
428 pblock = (struct pending_block *)
429 obstack_alloc (symbol_obstack,
430 sizeof (struct pending_block));
431 pblock->block = block;
432 if (opblock)
433 {
434 pblock->next = opblock->next;
435 opblock->next = pblock;
436 }
437 else
438 {
439 pblock->next = pending_blocks;
440 pending_blocks = pblock;
441 }
442 }
443
444 struct blockvector *
445 make_blockvector ()
446 {
447 register struct pending_block *next;
448 register struct blockvector *blockvector;
449 register int i;
450
451 /* Count the length of the list of blocks. */
452
453 for (next = pending_blocks, i = 0; next; next = next->next, i++);
454
455 blockvector = (struct blockvector *)
456 obstack_alloc (symbol_obstack,
457 (sizeof (struct blockvector)
458 + (i - 1) * sizeof (struct block *)));
459
460 /* Copy the blocks into the blockvector.
461 This is done in reverse order, which happens to put
462 the blocks into the proper order (ascending starting address).
463 finish_block has hair to insert each block into the list
464 after its subblocks in order to make sure this is true. */
465
466 BLOCKVECTOR_NBLOCKS (blockvector) = i;
467 for (next = pending_blocks; next; next = next->next) {
468 BLOCKVECTOR_BLOCK (blockvector, --i) = next->block;
469 }
470
471 #if 0 /* Now we make the links in the obstack, so don't free them. */
472 /* Now free the links of the list, and empty the list. */
473
474 for (next = pending_blocks; next; next = next1)
475 {
476 next1 = next->next;
477 free (next);
478 }
479 #endif
480 pending_blocks = 0;
481
482 #if 1 /* FIXME, shut this off after a while to speed up symbol reading. */
483 /* Some compilers output blocks in the wrong order, but we depend
484 on their being in the right order so we can binary search.
485 Check the order and moan about it. FIXME. */
486 if (BLOCKVECTOR_NBLOCKS (blockvector) > 1)
487 for (i = 1; i < BLOCKVECTOR_NBLOCKS (blockvector); i++) {
488 if (BLOCK_START(BLOCKVECTOR_BLOCK (blockvector, i-1))
489 > BLOCK_START(BLOCKVECTOR_BLOCK (blockvector, i))) {
490 complain (&blockvector_complaint,
491 BLOCK_START(BLOCKVECTOR_BLOCK (blockvector, i)));
492 }
493 }
494 #endif
495
496 return blockvector;
497 }
498 \f
499 /* Start recording information about source code that came from an included
500 (or otherwise merged-in) source file with a different name. */
501
502 void
503 start_subfile (name, dirname)
504 char *name;
505 char *dirname;
506 {
507 register struct subfile *subfile;
508
509 /* See if this subfile is already known as a subfile of the
510 current main source file. */
511
512 for (subfile = subfiles; subfile; subfile = subfile->next)
513 {
514 if (!strcmp (subfile->name, name))
515 {
516 current_subfile = subfile;
517 return;
518 }
519 }
520
521 /* This subfile is not known. Add an entry for it.
522 Make an entry for this subfile in the list of all subfiles
523 of the current main source file. */
524
525 subfile = (struct subfile *) xmalloc (sizeof (struct subfile));
526 subfile->next = subfiles;
527 subfiles = subfile;
528 current_subfile = subfile;
529
530 /* Save its name and compilation directory name */
531 subfile->name = obsavestring (name, strlen (name));
532 if (dirname == NULL)
533 subfile->dirname = NULL;
534 else
535 subfile->dirname = obsavestring (dirname, strlen (dirname));
536
537 /* Initialize line-number recording for this subfile. */
538 subfile->line_vector = 0;
539 }
540 \f
541 /* Handle the N_BINCL and N_EINCL symbol types
542 that act like N_SOL for switching source files
543 (different subfiles, as we call them) within one object file,
544 but using a stack rather than in an arbitrary order. */
545
546 void
547 push_subfile ()
548 {
549 register struct subfile_stack *tem
550 = (struct subfile_stack *) xmalloc (sizeof (struct subfile_stack));
551
552 tem->next = subfile_stack;
553 subfile_stack = tem;
554 if (current_subfile == 0 || current_subfile->name == 0)
555 abort ();
556 tem->name = current_subfile->name;
557 tem->prev_index = header_file_prev_index;
558 }
559
560 char *
561 pop_subfile ()
562 {
563 register char *name;
564 register struct subfile_stack *link = subfile_stack;
565
566 if (link == 0)
567 abort ();
568
569 name = link->name;
570 subfile_stack = link->next;
571 header_file_prev_index = link->prev_index;
572 free (link);
573
574 return name;
575 }
576 \f
577 /* Manage the vector of line numbers for each subfile. */
578
579 void
580 record_line (subfile, line, pc)
581 register struct subfile *subfile;
582 int line;
583 CORE_ADDR pc;
584 {
585 struct linetable_entry *e;
586 /* Ignore the dummy line number in libg.o */
587
588 if (line == 0xffff)
589 return;
590
591 /* Make sure line vector exists and is big enough. */
592 if (!subfile->line_vector) {
593 subfile->line_vector_length = INITIAL_LINE_VECTOR_LENGTH;
594 subfile->line_vector = (struct linetable *)
595 xmalloc (sizeof (struct linetable)
596 + subfile->line_vector_length * sizeof (struct linetable_entry));
597 subfile->line_vector->nitems = 0;
598 }
599
600 if (subfile->line_vector->nitems + 1 >= subfile->line_vector_length)
601 {
602 subfile->line_vector_length *= 2;
603 subfile->line_vector = (struct linetable *)
604 xrealloc (subfile->line_vector, (sizeof (struct linetable)
605 + subfile->line_vector_length * sizeof (struct linetable_entry)));
606 }
607
608 e = subfile->line_vector->item + subfile->line_vector->nitems++;
609 e->line = line; e->pc = pc;
610 }
611
612
613 /* Needed in order to sort line tables from IBM xcoff files. Sigh! */
614
615 /* static */
616 int
617 compare_line_numbers (ln1, ln2)
618 struct linetable_entry *ln1, *ln2;
619 {
620 return ln1->line - ln2->line;
621 }
622 \f
623 /* Start a new symtab for a new source file.
624 This is called when a dbx symbol of type N_SO is seen;
625 it indicates the start of data for one original source file. */
626
627 void
628 start_symtab (name, dirname, start_addr)
629 char *name;
630 char *dirname;
631 CORE_ADDR start_addr;
632 {
633
634 last_source_file = name;
635 last_source_start_addr = start_addr;
636 file_symbols = 0;
637 global_symbols = 0;
638 global_stabs = 0; /* AIX COFF */
639 file_stabs = 0; /* AIX COFF */
640 within_function = 0;
641
642 /* Context stack is initially empty. Allocate first one with room for
643 10 levels; reuse it forever afterward. */
644 if (context_stack == 0) {
645 context_stack_size = INITIAL_CONTEXT_STACK_SIZE;
646 context_stack = (struct context_stack *)
647 xmalloc (context_stack_size * sizeof (struct context_stack));
648 }
649 context_stack_depth = 0;
650
651 new_object_header_files ();
652
653 type_vector_length = 0;
654 type_vector = (struct type **) 0;
655
656 /* Initialize the list of sub source files with one entry
657 for this file (the top-level source file). */
658
659 subfiles = 0;
660 current_subfile = 0;
661 start_subfile (name, dirname);
662 }
663
664 /* Finish the symbol definitions for one main source file,
665 close off all the lexical contexts for that file
666 (creating struct block's for them), then make the struct symtab
667 for that file and put it in the list of all such.
668
669 END_ADDR is the address of the end of the file's text. */
670
671 struct symtab *
672 end_symtab (end_addr, sort_pending, sort_linevec, objfile)
673 CORE_ADDR end_addr;
674 int sort_pending;
675 int sort_linevec;
676 struct objfile *objfile;
677 {
678 register struct symtab *symtab;
679 register struct blockvector *blockvector;
680 register struct subfile *subfile;
681 struct subfile *nextsub;
682
683 /* Finish the lexical context of the last function in the file;
684 pop the context stack. */
685
686 if (context_stack_depth > 0)
687 {
688 register struct context_stack *cstk;
689 context_stack_depth--;
690 cstk = &context_stack[context_stack_depth];
691 /* Make a block for the local symbols within. */
692 finish_block (cstk->name, &local_symbols, cstk->old_blocks,
693 cstk->start_addr, end_addr);
694
695 /* Debug: if context stack still has something in it, we are in
696 trouble. */
697 if (context_stack_depth > 0)
698 abort ();
699 }
700
701 /* It is unfortunate that in aixcoff, pending blocks might not be ordered
702 in this stage. Especially, blocks for static functions will show up at
703 the end. We need to sort them, so tools like `find_pc_function' and
704 `find_pc_block' can work reliably. */
705 if (sort_pending && pending_blocks) {
706 /* FIXME! Remove this horrid bubble sort and use qsort!!! */
707 int swapped;
708 do {
709 struct pending_block *pb, *pbnext;
710
711 pb = pending_blocks, pbnext = pb->next;
712 swapped = 0;
713
714 while ( pbnext ) {
715
716 /* swap blocks if unordered! */
717
718 if (BLOCK_START(pb->block) < BLOCK_START(pbnext->block)) {
719 struct block *tmp = pb->block;
720 pb->block = pbnext->block;
721 pbnext->block = tmp;
722 swapped = 1;
723 }
724 pb = pbnext;
725 pbnext = pbnext->next;
726 }
727 } while (swapped);
728 }
729
730 /* Cleanup any undefined types that have been left hanging around
731 (this needs to be done before the finish_blocks so that
732 file_symbols is still good). */
733 cleanup_undefined_types ();
734
735 /* Hooks for xcoffread.c */
736 if (file_stabs) {
737 patch_block_stabs (file_symbols, file_stabs);
738 free (file_stabs);
739 file_stabs = 0;
740 }
741
742 if (global_stabs) {
743 patch_block_stabs (global_symbols, global_stabs);
744 free (global_stabs);
745 global_stabs = 0;
746 }
747
748 if (pending_blocks == 0
749 && file_symbols == 0
750 && global_symbols == 0) {
751 /* Ignore symtabs that have no functions with real debugging info */
752 blockvector = NULL;
753 } else {
754 /* Define the STATIC_BLOCK and GLOBAL_BLOCK, and build the blockvector. */
755 finish_block (0, &file_symbols, 0, last_source_start_addr, end_addr);
756 finish_block (0, &global_symbols, 0, last_source_start_addr, end_addr);
757 blockvector = make_blockvector ();
758 }
759
760 /* Now create the symtab objects proper, one for each subfile. */
761 /* (The main file is the last one on the chain.) */
762
763 for (subfile = subfiles; subfile; subfile = nextsub)
764 {
765 /* If we have blocks of symbols, make a symtab.
766 Otherwise, just ignore this file and any line number info in it. */
767 symtab = 0;
768 if (blockvector) {
769 if (subfile->line_vector) {
770 /* First, shrink the linetable to make more memory. */
771 subfile->line_vector = (struct linetable *)
772 xrealloc (subfile->line_vector, (sizeof (struct linetable)
773 + subfile->line_vector->nitems * sizeof (struct linetable_entry)));
774
775 if (sort_linevec)
776 qsort (subfile->line_vector->item, subfile->line_vector->nitems,
777 sizeof (struct linetable_entry), compare_line_numbers);
778 }
779
780 /* Now, allocate a symbol table. */
781 symtab = allocate_symtab (subfile->name, objfile);
782
783 /* Fill in its components. */
784 symtab->blockvector = blockvector;
785 symtab->linetable = subfile->line_vector;
786 symtab->dirname = subfile->dirname;
787 symtab->free_code = free_linetable;
788 symtab->free_ptr = 0;
789
790 /* Link the new symtab into the list of such. */
791 symtab->next = symtab_list;
792 symtab_list = symtab;
793 } else {
794 /* No blocks for this file. Delete any line number info we have
795 for it. */
796 if (subfile->line_vector)
797 free (subfile->line_vector);
798 }
799
800 nextsub = subfile->next;
801 free (subfile);
802 }
803
804 if (type_vector)
805 free ((char *) type_vector);
806 type_vector = 0;
807 type_vector_length = 0;
808
809 last_source_file = 0;
810 current_subfile = 0;
811
812 return symtab;
813 }
814
815
816 /* Push a context block. Args are an identifying nesting level (checkable
817 when you pop it), and the starting PC address of this context. */
818
819 struct context_stack *
820 push_context (desc, valu)
821 int desc;
822 CORE_ADDR valu;
823 {
824 register struct context_stack *new;
825
826 if (context_stack_depth == context_stack_size)
827 {
828 context_stack_size *= 2;
829 context_stack = (struct context_stack *)
830 xrealloc (context_stack,
831 (context_stack_size
832 * sizeof (struct context_stack)));
833 }
834
835 new = &context_stack[context_stack_depth++];
836 new->depth = desc;
837 new->locals = local_symbols;
838 new->old_blocks = pending_blocks;
839 new->start_addr = valu;
840 new->name = 0;
841
842 local_symbols = 0;
843
844 return new;
845 }
846 \f
847 /* Initialize anything that needs initializing when starting to read
848 a fresh piece of a symbol file, e.g. reading in the stuff corresponding
849 to a psymtab. */
850
851 void
852 buildsym_init ()
853 {
854 free_pendings = 0;
855 file_symbols = 0;
856 global_symbols = 0;
857 pending_blocks = 0;
858 }
859
860 /* Initialize anything that needs initializing when a completely new
861 symbol file is specified (not just adding some symbols from another
862 file, e.g. a shared library). */
863
864 void
865 buildsym_new_init ()
866 {
867 /* Empty the hash table of global syms looking for values. */
868 bzero (global_sym_chain, sizeof global_sym_chain);
869
870 buildsym_init ();
871 }
872
873 /* Scan through all of the global symbols defined in the object file,
874 assigning values to the debugging symbols that need to be assigned
875 to. Get these symbols from the misc function list. */
876
877 void
878 scan_file_globals ()
879 {
880 int hash;
881 int mf;
882
883 for (mf = 0; mf < misc_function_count; mf++)
884 {
885 char *namestring = misc_function_vector[mf].name;
886 struct symbol *sym, *prev;
887
888 QUIT;
889
890 prev = (struct symbol *) 0;
891
892 /* Get the hash index and check all the symbols
893 under that hash index. */
894
895 hash = hashname (namestring);
896
897 for (sym = global_sym_chain[hash]; sym;)
898 {
899 if (*namestring == SYMBOL_NAME (sym)[0]
900 && !strcmp(namestring + 1, SYMBOL_NAME (sym) + 1))
901 {
902 /* Splice this symbol out of the hash chain and
903 assign the value we have to it. */
904 if (prev)
905 SYMBOL_VALUE_CHAIN (prev) = SYMBOL_VALUE_CHAIN (sym);
906 else
907 global_sym_chain[hash] = SYMBOL_VALUE_CHAIN (sym);
908
909 /* Check to see whether we need to fix up a common block. */
910 /* Note: this code might be executed several times for
911 the same symbol if there are multiple references. */
912 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
913 fix_common_block (sym, misc_function_vector[mf].address);
914 else
915 SYMBOL_VALUE_ADDRESS (sym) = misc_function_vector[mf].address;
916
917 if (prev)
918 sym = SYMBOL_VALUE_CHAIN (prev);
919 else
920 sym = global_sym_chain[hash];
921 }
922 else
923 {
924 prev = sym;
925 sym = SYMBOL_VALUE_CHAIN (sym);
926 }
927 }
928 }
929 }
930
931 \f
932 /* Read a number by which a type is referred to in dbx data,
933 or perhaps read a pair (FILENUM, TYPENUM) in parentheses.
934 Just a single number N is equivalent to (0,N).
935 Return the two numbers by storing them in the vector TYPENUMS.
936 TYPENUMS will then be used as an argument to dbx_lookup_type. */
937
938 void
939 read_type_number (pp, typenums)
940 register char **pp;
941 register int *typenums;
942 {
943 if (**pp == '(')
944 {
945 (*pp)++;
946 typenums[0] = read_number (pp, ',');
947 typenums[1] = read_number (pp, ')');
948 }
949 else
950 {
951 typenums[0] = 0;
952 typenums[1] = read_number (pp, 0);
953 }
954 }
955 \f
956 /* To handle GNU C++ typename abbreviation, we need to be able to
957 fill in a type's name as soon as space for that type is allocated.
958 `type_synonym_name' is the name of the type being allocated.
959 It is cleared as soon as it is used (lest all allocated types
960 get this name). */
961 static char *type_synonym_name;
962
963 /* ARGSUSED */
964 struct symbol *
965 define_symbol (valu, string, desc, type)
966 unsigned int valu;
967 char *string;
968 int desc;
969 int type;
970 {
971 register struct symbol *sym;
972 char *p = (char *) strchr (string, ':');
973 int deftype;
974 int synonym = 0;
975 register int i;
976
977 /* Ignore syms with empty names. */
978 if (string[0] == 0)
979 return 0;
980
981 /* Ignore old-style symbols from cc -go */
982 if (p == 0)
983 return 0;
984
985 sym = (struct symbol *)obstack_alloc (symbol_obstack, sizeof (struct symbol));
986
987 if (processing_gcc_compilation) {
988 /* GCC 2.x puts the line number in desc. SunOS apparently puts in the
989 number of bytes occupied by a type or object, which we ignore. */
990 SYMBOL_LINE(sym) = desc;
991 } else {
992 SYMBOL_LINE(sym) = 0; /* unknown */
993 }
994
995 if (string[0] == CPLUS_MARKER)
996 {
997 /* Special GNU C++ names. */
998 switch (string[1])
999 {
1000 case 't':
1001 SYMBOL_NAME (sym) = "this";
1002 break;
1003 case 'v': /* $vtbl_ptr_type */
1004 /* Was: SYMBOL_NAME (sym) = "vptr"; */
1005 goto normal;
1006 case 'e':
1007 SYMBOL_NAME (sym) = "eh_throw";
1008 break;
1009
1010 case '_':
1011 /* This was an anonymous type that was never fixed up. */
1012 goto normal;
1013
1014 default:
1015 abort ();
1016 }
1017 }
1018 else
1019 {
1020 normal:
1021 SYMBOL_NAME (sym)
1022 = (char *) obstack_alloc (symbol_obstack, ((p - string) + 1));
1023 /* Open-coded bcopy--saves function call time. */
1024 {
1025 register char *p1 = string;
1026 register char *p2 = SYMBOL_NAME (sym);
1027 while (p1 != p)
1028 *p2++ = *p1++;
1029 *p2++ = '\0';
1030 }
1031 }
1032 p++;
1033 /* Determine the type of name being defined. */
1034 /* The Acorn RISC machine's compiler can put out locals that don't
1035 start with "234=" or "(3,4)=", so assume anything other than the
1036 deftypes we know how to handle is a local. */
1037 /* (Peter Watkins @ Computervision)
1038 Handle Sun-style local fortran array types 'ar...' .
1039 (gnu@cygnus.com) -- this strchr() handles them properly?
1040 (tiemann@cygnus.com) -- 'C' is for catch. */
1041 if (!strchr ("cfFGpPrStTvVXC", *p))
1042 deftype = 'l';
1043 else
1044 deftype = *p++;
1045
1046 /* c is a special case, not followed by a type-number.
1047 SYMBOL:c=iVALUE for an integer constant symbol.
1048 SYMBOL:c=rVALUE for a floating constant symbol.
1049 SYMBOL:c=eTYPE,INTVALUE for an enum constant symbol.
1050 e.g. "b:c=e6,0" for "const b = blob1"
1051 (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;"). */
1052 if (deftype == 'c')
1053 {
1054 if (*p++ != '=')
1055 error ("Invalid symbol data at symtab pos %d.", symnum);
1056 switch (*p++)
1057 {
1058 case 'r':
1059 {
1060 double d = atof (p);
1061 char *dbl_valu;
1062
1063 SYMBOL_TYPE (sym) = builtin_type_double;
1064 dbl_valu =
1065 (char *) obstack_alloc (symbol_obstack, sizeof (double));
1066 bcopy (&d, dbl_valu, sizeof (double));
1067 SWAP_TARGET_AND_HOST (dbl_valu, sizeof (double));
1068 SYMBOL_VALUE_BYTES (sym) = dbl_valu;
1069 SYMBOL_CLASS (sym) = LOC_CONST_BYTES;
1070 }
1071 break;
1072 case 'i':
1073 {
1074 SYMBOL_TYPE (sym) = builtin_type_int;
1075 SYMBOL_VALUE (sym) = atoi (p);
1076 SYMBOL_CLASS (sym) = LOC_CONST;
1077 }
1078 break;
1079 case 'e':
1080 /* SYMBOL:c=eTYPE,INTVALUE for an enum constant symbol.
1081 e.g. "b:c=e6,0" for "const b = blob1"
1082 (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;"). */
1083 {
1084 int typenums[2];
1085
1086 read_type_number (&p, typenums);
1087 if (*p++ != ',')
1088 error ("Invalid symbol data: no comma in enum const symbol");
1089
1090 SYMBOL_TYPE (sym) = *dbx_lookup_type (typenums);
1091 SYMBOL_VALUE (sym) = atoi (p);
1092 SYMBOL_CLASS (sym) = LOC_CONST;
1093 }
1094 break;
1095 default:
1096 error ("Invalid symbol data at symtab pos %d.", symnum);
1097 }
1098 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1099 add_symbol_to_list (sym, &file_symbols);
1100 return sym;
1101 }
1102
1103 /* Now usually comes a number that says which data type,
1104 and possibly more stuff to define the type
1105 (all of which is handled by read_type) */
1106
1107 if (deftype == 'p' && *p == 'F')
1108 /* pF is a two-letter code that means a function parameter in Fortran.
1109 The type-number specifies the type of the return value.
1110 Translate it into a pointer-to-function type. */
1111 {
1112 p++;
1113 SYMBOL_TYPE (sym)
1114 = lookup_pointer_type (lookup_function_type (read_type (&p)));
1115 }
1116 else
1117 {
1118 struct type *type_read;
1119 synonym = *p == 't';
1120
1121 if (synonym)
1122 {
1123 p += 1;
1124 type_synonym_name = obsavestring (SYMBOL_NAME (sym),
1125 strlen (SYMBOL_NAME (sym)));
1126 }
1127
1128 /* Here we save the name of the symbol for read_range_type, which
1129 ends up reading in the basic types. In stabs, unfortunately there
1130 is no distinction between "int" and "long" types except their
1131 names. Until we work out a saner type policy (eliminating most
1132 builtin types and using the names specified in the files), we
1133 save away the name so that far away from here in read_range_type,
1134 we can examine it to decide between "int" and "long". FIXME. */
1135 long_kludge_name = SYMBOL_NAME (sym);
1136 type_read = read_type (&p);
1137
1138 if ((deftype == 'F' || deftype == 'f')
1139 && TYPE_CODE (type_read) != TYPE_CODE_FUNC)
1140 {
1141 #if 0
1142 /* This code doesn't work -- it needs to realloc and can't. */
1143 struct type *new = (struct type *)
1144 obstack_alloc (symbol_obstack, sizeof (struct type));
1145
1146 /* Generate a template for the type of this function. The
1147 types of the arguments will be added as we read the symbol
1148 table. */
1149 *new = *lookup_function_type (type_read);
1150 SYMBOL_TYPE(sym) = new;
1151 in_function_type = new;
1152 #else
1153 SYMBOL_TYPE (sym) = lookup_function_type (type_read);
1154 #endif
1155 }
1156 else
1157 SYMBOL_TYPE (sym) = type_read;
1158 }
1159
1160 switch (deftype)
1161 {
1162 case 'C':
1163 /* The name of a caught exception. */
1164 SYMBOL_CLASS (sym) = LOC_LABEL;
1165 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1166 SYMBOL_VALUE_ADDRESS (sym) = valu;
1167 add_symbol_to_list (sym, &local_symbols);
1168 break;
1169
1170 case 'f':
1171 SYMBOL_CLASS (sym) = LOC_BLOCK;
1172 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1173 add_symbol_to_list (sym, &file_symbols);
1174 break;
1175
1176 case 'F':
1177 SYMBOL_CLASS (sym) = LOC_BLOCK;
1178 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1179 add_symbol_to_list (sym, &global_symbols);
1180 break;
1181
1182 case 'G':
1183 /* For a class G (global) symbol, it appears that the
1184 value is not correct. It is necessary to search for the
1185 corresponding linker definition to find the value.
1186 These definitions appear at the end of the namelist. */
1187 i = hashname (SYMBOL_NAME (sym));
1188 SYMBOL_VALUE_CHAIN (sym) = global_sym_chain[i];
1189 global_sym_chain[i] = sym;
1190 SYMBOL_CLASS (sym) = LOC_STATIC;
1191 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1192 add_symbol_to_list (sym, &global_symbols);
1193 break;
1194
1195 /* This case is faked by a conditional above,
1196 when there is no code letter in the dbx data.
1197 Dbx data never actually contains 'l'. */
1198 case 'l':
1199 SYMBOL_CLASS (sym) = LOC_LOCAL;
1200 SYMBOL_VALUE (sym) = valu;
1201 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1202 add_symbol_to_list (sym, &local_symbols);
1203 break;
1204
1205 case 'p':
1206 /* Normally this is a parameter, a LOC_ARG. On the i960, it
1207 can also be a LOC_LOCAL_ARG depending on symbol type. */
1208 #ifndef DBX_PARM_SYMBOL_CLASS
1209 #define DBX_PARM_SYMBOL_CLASS(type) LOC_ARG
1210 #endif
1211 SYMBOL_CLASS (sym) = DBX_PARM_SYMBOL_CLASS (type);
1212 SYMBOL_VALUE (sym) = valu;
1213 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1214 #if 0
1215 /* This doesn't work yet. */
1216 add_param_to_type (&in_function_type, sym);
1217 #endif
1218 add_symbol_to_list (sym, &local_symbols);
1219
1220 /* If it's gcc-compiled, if it says `short', believe it. */
1221 if (processing_gcc_compilation || BELIEVE_PCC_PROMOTION)
1222 break;
1223
1224 #if defined(BELIEVE_PCC_PROMOTION_TYPE)
1225 /* This macro is defined on machines (e.g. sparc) where
1226 we should believe the type of a PCC 'short' argument,
1227 but shouldn't believe the address (the address is
1228 the address of the corresponding int). Note that
1229 this is only different from the BELIEVE_PCC_PROMOTION
1230 case on big-endian machines.
1231
1232 My guess is that this correction, as opposed to changing
1233 the parameter to an 'int' (as done below, for PCC
1234 on most machines), is the right thing to do
1235 on all machines, but I don't want to risk breaking
1236 something that already works. On most PCC machines,
1237 the sparc problem doesn't come up because the calling
1238 function has to zero the top bytes (not knowing whether
1239 the called function wants an int or a short), so there
1240 is no practical difference between an int and a short
1241 (except perhaps what happens when the GDB user types
1242 "print short_arg = 0x10000;").
1243
1244 Hacked for SunOS 4.1 by gnu@cygnus.com. In 4.1, the compiler
1245 actually produces the correct address (we don't need to fix it
1246 up). I made this code adapt so that it will offset the symbol
1247 if it was pointing at an int-aligned location and not
1248 otherwise. This way you can use the same gdb for 4.0.x and
1249 4.1 systems.
1250
1251 If the parameter is shorter than an int, and is integral
1252 (e.g. char, short, or unsigned equivalent), and is claimed to
1253 be passed on an integer boundary, don't believe it! Offset the
1254 parameter's address to the tail-end of that integer. */
1255
1256 if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (builtin_type_int)
1257 && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT
1258 && 0 == SYMBOL_VALUE (sym) % TYPE_LENGTH (builtin_type_int)) {
1259 SYMBOL_VALUE (sym) += TYPE_LENGTH (builtin_type_int)
1260 - TYPE_LENGTH (SYMBOL_TYPE (sym));
1261 }
1262 break;
1263
1264 #else /* no BELIEVE_PCC_PROMOTION_TYPE. */
1265
1266 /* If PCC says a parameter is a short or a char,
1267 it is really an int. */
1268 if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (builtin_type_int)
1269 && TYPE_CODE (SYMBOL_TYPE (sym) == TYPE_CODE_INT) {
1270 SYMBOL_TYPE (sym) = TYPE_UNSIGNED (SYMBOL_TYPE (sym))?
1271 builtin_type_unsigned_int:
1272 builtin_type_int;
1273 }
1274 break;
1275
1276 #endif /* no BELIEVE_PCC_PROMOTION_TYPE. */
1277
1278 case 'P':
1279 SYMBOL_CLASS (sym) = LOC_REGPARM;
1280 SYMBOL_VALUE (sym) = STAB_REG_TO_REGNUM (valu);
1281 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1282 add_symbol_to_list (sym, &local_symbols);
1283 break;
1284
1285 case 'r':
1286 SYMBOL_CLASS (sym) = LOC_REGISTER;
1287 SYMBOL_VALUE (sym) = STAB_REG_TO_REGNUM (valu);
1288 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1289 add_symbol_to_list (sym, &local_symbols);
1290 break;
1291
1292 case 'S':
1293 /* Static symbol at top level of file */
1294 SYMBOL_CLASS (sym) = LOC_STATIC;
1295 SYMBOL_VALUE_ADDRESS (sym) = valu;
1296 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1297 add_symbol_to_list (sym, &file_symbols);
1298 break;
1299
1300 case 't':
1301 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
1302 SYMBOL_VALUE (sym) = valu;
1303 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1304 if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0
1305 && (TYPE_FLAGS (SYMBOL_TYPE (sym)) & TYPE_FLAG_PERM) == 0)
1306 TYPE_NAME (SYMBOL_TYPE (sym)) =
1307 obsavestring (SYMBOL_NAME (sym),
1308 strlen (SYMBOL_NAME (sym)));
1309 /* C++ vagaries: we may have a type which is derived from
1310 a base type which did not have its name defined when the
1311 derived class was output. We fill in the derived class's
1312 base part member's name here in that case. */
1313 else if ((TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_STRUCT
1314 || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_UNION)
1315 && TYPE_N_BASECLASSES (SYMBOL_TYPE (sym)))
1316 {
1317 int j;
1318 for (j = TYPE_N_BASECLASSES (SYMBOL_TYPE (sym)) - 1; j >= 0; j--)
1319 if (TYPE_BASECLASS_NAME (SYMBOL_TYPE (sym), j) == 0)
1320 TYPE_BASECLASS_NAME (SYMBOL_TYPE (sym), j) =
1321 type_name_no_tag (TYPE_BASECLASS (SYMBOL_TYPE (sym), j));
1322 }
1323
1324 add_symbol_to_list (sym, &file_symbols);
1325 break;
1326
1327 case 'T':
1328 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
1329 SYMBOL_VALUE (sym) = valu;
1330 SYMBOL_NAMESPACE (sym) = STRUCT_NAMESPACE;
1331 if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0
1332 && (TYPE_FLAGS (SYMBOL_TYPE (sym)) & TYPE_FLAG_PERM) == 0)
1333 TYPE_NAME (SYMBOL_TYPE (sym))
1334 = obconcat ("",
1335 (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_ENUM
1336 ? "enum "
1337 : (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_STRUCT
1338 ? "struct " : "union ")),
1339 SYMBOL_NAME (sym));
1340 add_symbol_to_list (sym, &file_symbols);
1341
1342 if (synonym)
1343 {
1344 register struct symbol *typedef_sym
1345 = (struct symbol *) obstack_alloc (symbol_obstack, sizeof (struct symbol));
1346 SYMBOL_NAME (typedef_sym) = SYMBOL_NAME (sym);
1347 SYMBOL_TYPE (typedef_sym) = SYMBOL_TYPE (sym);
1348
1349 SYMBOL_CLASS (typedef_sym) = LOC_TYPEDEF;
1350 SYMBOL_VALUE (typedef_sym) = valu;
1351 SYMBOL_NAMESPACE (typedef_sym) = VAR_NAMESPACE;
1352 add_symbol_to_list (typedef_sym, &file_symbols);
1353 }
1354 break;
1355
1356 case 'V':
1357 /* Static symbol of local scope */
1358 SYMBOL_CLASS (sym) = LOC_STATIC;
1359 SYMBOL_VALUE_ADDRESS (sym) = valu;
1360 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1361 add_symbol_to_list (sym, &local_symbols);
1362 break;
1363
1364 case 'v':
1365 /* Reference parameter */
1366 SYMBOL_CLASS (sym) = LOC_REF_ARG;
1367 SYMBOL_VALUE (sym) = valu;
1368 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1369 add_symbol_to_list (sym, &local_symbols);
1370 break;
1371
1372 case 'X':
1373 /* This is used by Sun FORTRAN for "function result value".
1374 Sun claims ("dbx and dbxtool interfaces", 2nd ed)
1375 that Pascal uses it too, but when I tried it Pascal used
1376 "x:3" (local symbol) instead. */
1377 SYMBOL_CLASS (sym) = LOC_LOCAL;
1378 SYMBOL_VALUE (sym) = valu;
1379 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1380 add_symbol_to_list (sym, &local_symbols);
1381 break;
1382
1383 default:
1384 error ("Invalid symbol data: unknown symbol-type code `%c' at symtab pos %d.", deftype, symnum);
1385 }
1386 return sym;
1387 }
1388 \f
1389 /* What about types defined as forward references inside of a small lexical
1390 scope? */
1391 /* Add a type to the list of undefined types to be checked through
1392 once this file has been read in. */
1393 void
1394 add_undefined_type (type)
1395 struct type *type;
1396 {
1397 if (undef_types_length == undef_types_allocated)
1398 {
1399 undef_types_allocated *= 2;
1400 undef_types = (struct type **)
1401 xrealloc (undef_types,
1402 undef_types_allocated * sizeof (struct type *));
1403 }
1404 undef_types[undef_types_length++] = type;
1405 }
1406
1407 /* Go through each undefined type, see if it's still undefined, and fix it
1408 up if possible. We have two kinds of undefined types:
1409
1410 TYPE_CODE_ARRAY: Array whose target type wasn't defined yet.
1411 Fix: update array length using the element bounds
1412 and the target type's length.
1413 TYPE_CODE_STRUCT, TYPE_CODE_UNION: Structure whose fields were not
1414 yet defined at the time a pointer to it was made.
1415 Fix: Do a full lookup on the struct/union tag. */
1416 static void
1417 cleanup_undefined_types ()
1418 {
1419 struct type **type;
1420
1421 for (type = undef_types; type < undef_types + undef_types_length; type++) {
1422 switch (TYPE_CODE (*type)) {
1423
1424 case TYPE_CODE_STRUCT:
1425 case TYPE_CODE_UNION:
1426 {
1427 /* Reasonable test to see if it's been defined since. */
1428 if (TYPE_NFIELDS (*type) == 0)
1429 {
1430 struct pending *ppt;
1431 int i;
1432 /* Name of the type, without "struct" or "union" */
1433 char *typename = TYPE_NAME (*type);
1434
1435 if (!strncmp (typename, "struct ", 7))
1436 typename += 7;
1437 if (!strncmp (typename, "union ", 6))
1438 typename += 6;
1439
1440 for (ppt = file_symbols; ppt; ppt = ppt->next)
1441 for (i = 0; i < ppt->nsyms; i++)
1442 {
1443 struct symbol *sym = ppt->symbol[i];
1444
1445 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF
1446 && SYMBOL_NAMESPACE (sym) == STRUCT_NAMESPACE
1447 && (TYPE_CODE (SYMBOL_TYPE (sym)) ==
1448 TYPE_CODE (*type))
1449 && !strcmp (SYMBOL_NAME (sym), typename))
1450 bcopy (SYMBOL_TYPE (sym), *type, sizeof (struct type));
1451 }
1452 }
1453 else
1454 /* It has been defined; don't mark it as a stub. */
1455 TYPE_FLAGS (*type) &= ~TYPE_FLAG_STUB;
1456 }
1457 break;
1458
1459 case TYPE_CODE_ARRAY:
1460 {
1461 struct type *range_type;
1462 int lower, upper;
1463
1464 if (TYPE_LENGTH (*type) != 0) /* Better be unknown */
1465 goto badtype;
1466 if (TYPE_NFIELDS (*type) != 1)
1467 goto badtype;
1468 range_type = TYPE_FIELD_TYPE (*type, 0);
1469 if (TYPE_CODE (range_type) != TYPE_CODE_RANGE)
1470 goto badtype;
1471
1472 /* Now recompute the length of the array type, based on its
1473 number of elements and the target type's length. */
1474 lower = TYPE_FIELD_BITPOS (range_type, 0);
1475 upper = TYPE_FIELD_BITPOS (range_type, 1);
1476 TYPE_LENGTH (*type) = (upper - lower + 1)
1477 * TYPE_LENGTH (TYPE_TARGET_TYPE (*type));
1478 }
1479 break;
1480
1481 default:
1482 badtype:
1483 error ("GDB internal error. cleanup_undefined_types with bad type.");
1484 break;
1485 }
1486 }
1487 undef_types_length = 0;
1488 }
1489 \f
1490 /* Skip rest of this symbol and return an error type.
1491
1492 General notes on error recovery: error_type always skips to the
1493 end of the symbol (modulo cretinous dbx symbol name continuation).
1494 Thus code like this:
1495
1496 if (*(*pp)++ != ';')
1497 return error_type (pp);
1498
1499 is wrong because if *pp starts out pointing at '\0' (typically as the
1500 result of an earlier error), it will be incremented to point to the
1501 start of the next symbol, which might produce strange results, at least
1502 if you run off the end of the string table. Instead use
1503
1504 if (**pp != ';')
1505 return error_type (pp);
1506 ++*pp;
1507
1508 or
1509
1510 if (**pp != ';')
1511 foo = error_type (pp);
1512 else
1513 ++*pp;
1514
1515 And in case it isn't obvious, the point of all this hair is so the compiler
1516 can define new types and new syntaxes, and old versions of the
1517 debugger will be able to read the new symbol tables. */
1518
1519 struct type *
1520 error_type (pp)
1521 char **pp;
1522 {
1523 complain (&error_type_complaint, 0);
1524 while (1)
1525 {
1526 /* Skip to end of symbol. */
1527 while (**pp != '\0')
1528 (*pp)++;
1529
1530 /* Check for and handle cretinous dbx symbol name continuation! */
1531 if ((*pp)[-1] == '\\')
1532 *pp = next_symbol_text ();
1533 else
1534 break;
1535 }
1536 return builtin_type_error;
1537 }
1538 \f
1539 /* Read a dbx type reference or definition;
1540 return the type that is meant.
1541 This can be just a number, in which case it references
1542 a type already defined and placed in type_vector.
1543 Or the number can be followed by an =, in which case
1544 it means to define a new type according to the text that
1545 follows the =. */
1546
1547 struct type *
1548 read_type (pp)
1549 register char **pp;
1550 {
1551 register struct type *type = 0;
1552 struct type *type1;
1553 int typenums[2];
1554 int xtypenums[2];
1555
1556 /* Read type number if present. The type number may be omitted.
1557 for instance in a two-dimensional array declared with type
1558 "ar1;1;10;ar1;1;10;4". */
1559 if ((**pp >= '0' && **pp <= '9')
1560 || **pp == '(')
1561 {
1562 read_type_number (pp, typenums);
1563
1564 /* Type is not being defined here. Either it already exists,
1565 or this is a forward reference to it. dbx_alloc_type handles
1566 both cases. */
1567 if (**pp != '=')
1568 return dbx_alloc_type (typenums);
1569
1570 /* Type is being defined here. */
1571 #if 0 /* Callers aren't prepared for a NULL result! FIXME -- metin! */
1572 {
1573 struct type *tt;
1574
1575 /* if such a type already exists, this is an unnecessary duplication
1576 of the stab string, which is common in (RS/6000) xlc generated
1577 objects. In that case, simply return NULL and let the caller take
1578 care of it. */
1579
1580 tt = *dbx_lookup_type (typenums);
1581 if (tt && tt->length && tt->code)
1582 return NULL;
1583 }
1584 #endif
1585
1586 *pp += 2;
1587 }
1588 else
1589 {
1590 /* 'typenums=' not present, type is anonymous. Read and return
1591 the definition, but don't put it in the type vector. */
1592 typenums[0] = typenums[1] = -1;
1593 *pp += 1;
1594 }
1595
1596 switch ((*pp)[-1])
1597 {
1598 case 'x':
1599 {
1600 enum type_code code;
1601
1602 /* Used to index through file_symbols. */
1603 struct pending *ppt;
1604 int i;
1605
1606 /* Name including "struct", etc. */
1607 char *type_name;
1608
1609 /* Name without "struct", etc. */
1610 char *type_name_only;
1611
1612 {
1613 char *prefix;
1614 char *from, *to;
1615
1616 /* Set the type code according to the following letter. */
1617 switch ((*pp)[0])
1618 {
1619 case 's':
1620 code = TYPE_CODE_STRUCT;
1621 prefix = "struct ";
1622 break;
1623 case 'u':
1624 code = TYPE_CODE_UNION;
1625 prefix = "union ";
1626 break;
1627 case 'e':
1628 code = TYPE_CODE_ENUM;
1629 prefix = "enum ";
1630 break;
1631 default:
1632 return error_type (pp);
1633 }
1634
1635 to = type_name = (char *)
1636 obstack_alloc (symbol_obstack,
1637 (strlen (prefix) +
1638 ((char *) strchr (*pp, ':') - (*pp)) + 1));
1639
1640 /* Copy the prefix. */
1641 from = prefix;
1642 while (*to++ = *from++)
1643 ;
1644 to--;
1645
1646 type_name_only = to;
1647
1648 /* Copy the name. */
1649 from = *pp + 1;
1650 while ((*to++ = *from++) != ':')
1651 ;
1652 *--to = '\0';
1653
1654 /* Set the pointer ahead of the name which we just read. */
1655 *pp = from;
1656
1657 #if 0
1658 /* The following hack is clearly wrong, because it doesn't
1659 check whether we are in a baseclass. I tried to reproduce
1660 the case that it is trying to fix, but I couldn't get
1661 g++ to put out a cross reference to a basetype. Perhaps
1662 it doesn't do it anymore. */
1663 /* Note: for C++, the cross reference may be to a base type which
1664 has not yet been seen. In this case, we skip to the comma,
1665 which will mark the end of the base class name. (The ':'
1666 at the end of the base class name will be skipped as well.)
1667 But sometimes (ie. when the cross ref is the last thing on
1668 the line) there will be no ','. */
1669 from = (char *) strchr (*pp, ',');
1670 if (from)
1671 *pp = from;
1672 #endif /* 0 */
1673 }
1674
1675 /* Now check to see whether the type has already been declared. */
1676 /* This is necessary at least in the case where the
1677 program says something like
1678 struct foo bar[5];
1679 The compiler puts out a cross-reference; we better find
1680 set the length of the structure correctly so we can
1681 set the length of the array. */
1682 for (ppt = file_symbols; ppt; ppt = ppt->next)
1683 for (i = 0; i < ppt->nsyms; i++)
1684 {
1685 struct symbol *sym = ppt->symbol[i];
1686
1687 if (SYMBOL_CLASS (sym) == LOC_TYPEDEF
1688 && SYMBOL_NAMESPACE (sym) == STRUCT_NAMESPACE
1689 && (TYPE_CODE (SYMBOL_TYPE (sym)) == code)
1690 && !strcmp (SYMBOL_NAME (sym), type_name_only))
1691 {
1692 obstack_free (symbol_obstack, type_name);
1693 type = SYMBOL_TYPE (sym);
1694 return type;
1695 }
1696 }
1697
1698 /* Didn't find the type to which this refers, so we must
1699 be dealing with a forward reference. Allocate a type
1700 structure for it, and keep track of it so we can
1701 fill in the rest of the fields when we get the full
1702 type. */
1703 type = dbx_alloc_type (typenums);
1704 TYPE_CODE (type) = code;
1705 TYPE_NAME (type) = type_name;
1706 if (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
1707 {
1708 TYPE_CPLUS_SPECIFIC (type)
1709 = (struct cplus_struct_type *) obstack_alloc (symbol_obstack, sizeof (struct cplus_struct_type));
1710 bzero (TYPE_CPLUS_SPECIFIC (type), sizeof (struct cplus_struct_type));
1711 }
1712
1713 TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
1714
1715 add_undefined_type (type);
1716 return type;
1717 }
1718
1719 case '-': /* RS/6000 built-in type */
1720 (*pp)--;
1721 type = builtin_type (pp); /* (in xcoffread.c) */
1722 goto after_digits;
1723
1724 case '0':
1725 case '1':
1726 case '2':
1727 case '3':
1728 case '4':
1729 case '5':
1730 case '6':
1731 case '7':
1732 case '8':
1733 case '9':
1734 case '(':
1735 (*pp)--;
1736 read_type_number (pp, xtypenums);
1737 type = *dbx_lookup_type (xtypenums);
1738 /* fall through */
1739
1740 after_digits:
1741 if (type == 0)
1742 type = builtin_type_void;
1743 if (typenums[0] != -1)
1744 *dbx_lookup_type (typenums) = type;
1745 break;
1746
1747 case '*':
1748 type1 = read_type (pp);
1749 /* FIXME -- we should be doing smash_to_XXX types here. */
1750 #if 0
1751 /* postponed type decoration should be allowed. */
1752 if (typenums[1] > 0 && typenums[1] < type_vector_length &&
1753 (type = type_vector[typenums[1]])) {
1754 smash_to_pointer_type (type, type1);
1755 break;
1756 }
1757 #endif
1758 type = lookup_pointer_type (type1);
1759 if (typenums[0] != -1)
1760 *dbx_lookup_type (typenums) = type;
1761 break;
1762
1763 case '@':
1764 {
1765 struct type *domain = read_type (pp);
1766 struct type *memtype;
1767
1768 if (**pp != ',')
1769 /* Invalid member type data format. */
1770 return error_type (pp);
1771 ++*pp;
1772
1773 memtype = read_type (pp);
1774 type = dbx_alloc_type (typenums);
1775 smash_to_member_type (type, domain, memtype);
1776 }
1777 break;
1778
1779 case '#':
1780 if ((*pp)[0] == '#')
1781 {
1782 /* We'll get the parameter types from the name. */
1783 struct type *return_type;
1784
1785 *pp += 1;
1786 return_type = read_type (pp);
1787 if (*(*pp)++ != ';')
1788 complain (&invalid_member_complaint, symnum);
1789 type = allocate_stub_method (return_type);
1790 if (typenums[0] != -1)
1791 *dbx_lookup_type (typenums) = type;
1792 }
1793 else
1794 {
1795 struct type *domain = read_type (pp);
1796 struct type *return_type;
1797 struct type **args;
1798
1799 if (*(*pp)++ != ',')
1800 error ("invalid member type data format, at symtab pos %d.",
1801 symnum);
1802
1803 return_type = read_type (pp);
1804 args = read_args (pp, ';');
1805 type = dbx_alloc_type (typenums);
1806 smash_to_method_type (type, domain, return_type, args);
1807 }
1808 break;
1809
1810 case '&':
1811 type1 = read_type (pp);
1812 type = lookup_reference_type (type1);
1813 if (typenums[0] != -1)
1814 *dbx_lookup_type (typenums) = type;
1815 break;
1816
1817 case 'f':
1818 type1 = read_type (pp);
1819 type = lookup_function_type (type1);
1820 if (typenums[0] != -1)
1821 *dbx_lookup_type (typenums) = type;
1822 break;
1823
1824 case 'r':
1825 type = read_range_type (pp, typenums);
1826 if (typenums[0] != -1)
1827 *dbx_lookup_type (typenums) = type;
1828 break;
1829
1830 case 'e':
1831 type = dbx_alloc_type (typenums);
1832 type = read_enum_type (pp, type);
1833 *dbx_lookup_type (typenums) = type;
1834 break;
1835
1836 case 's':
1837 type = dbx_alloc_type (typenums);
1838 TYPE_NAME (type) = type_synonym_name;
1839 type_synonym_name = 0;
1840 type = read_struct_type (pp, type);
1841 break;
1842
1843 case 'u':
1844 type = dbx_alloc_type (typenums);
1845 TYPE_NAME (type) = type_synonym_name;
1846 type_synonym_name = 0;
1847 type = read_struct_type (pp, type);
1848 TYPE_CODE (type) = TYPE_CODE_UNION;
1849 break;
1850
1851 case 'a':
1852 if (**pp != 'r')
1853 return error_type (pp);
1854 ++*pp;
1855
1856 type = dbx_alloc_type (typenums);
1857 type = read_array_type (pp, type);
1858 break;
1859
1860 default:
1861 --*pp; /* Go back to the symbol in error */
1862 /* Particularly important if it was \0! */
1863 return error_type (pp);
1864 }
1865
1866 if (type == 0)
1867 abort ();
1868
1869 #if 0
1870 /* If this is an overriding temporary alteration for a header file's
1871 contents, and this type number is unknown in the global definition,
1872 put this type into the global definition at this type number. */
1873 if (header_file_prev_index >= 0)
1874 {
1875 register struct type **tp
1876 = explicit_lookup_type (header_file_prev_index, typenums[1]);
1877 if (*tp == 0)
1878 *tp = type;
1879 }
1880 #endif
1881 return type;
1882 }
1883 \f
1884 /* This page contains subroutines of read_type. */
1885
1886 /* Read the description of a structure (or union type)
1887 and return an object describing the type. */
1888
1889 struct type *
1890 read_struct_type (pp, type)
1891 char **pp;
1892 register struct type *type;
1893 {
1894 /* Total number of methods defined in this class.
1895 If the class defines two `f' methods, and one `g' method,
1896 then this will have the value 3. */
1897 int total_length = 0;
1898
1899 struct nextfield
1900 {
1901 struct nextfield *next;
1902 int visibility; /* 0=public, 1=protected, 2=public */
1903 struct field field;
1904 };
1905
1906 struct next_fnfield
1907 {
1908 struct next_fnfield *next;
1909 int visibility; /* 0=public, 1=protected, 2=public */
1910 struct fn_field fn_field;
1911 };
1912
1913 struct next_fnfieldlist
1914 {
1915 struct next_fnfieldlist *next;
1916 struct fn_fieldlist fn_fieldlist;
1917 };
1918
1919 register struct nextfield *list = 0;
1920 struct nextfield *new;
1921 register char *p;
1922 int nfields = 0;
1923 register int n;
1924
1925 register struct next_fnfieldlist *mainlist = 0;
1926 int nfn_fields = 0;
1927
1928 TYPE_CODE (type) = TYPE_CODE_STRUCT;
1929 TYPE_CPLUS_SPECIFIC (type)
1930 = (struct cplus_struct_type *) obstack_alloc (symbol_obstack, sizeof (struct cplus_struct_type));
1931 bzero (TYPE_CPLUS_SPECIFIC (type), sizeof (struct cplus_struct_type));
1932
1933 /* First comes the total size in bytes. */
1934
1935 TYPE_LENGTH (type) = read_number (pp, 0);
1936
1937 /* C++: Now, if the class is a derived class, then the next character
1938 will be a '!', followed by the number of base classes derived from.
1939 Each element in the list contains visibility information,
1940 the offset of this base class in the derived structure,
1941 and then the base type. */
1942 if (**pp == '!')
1943 {
1944 int i, n_baseclasses, offset;
1945 struct type *baseclass;
1946 int via_public;
1947
1948 /* Nonzero if it is a virtual baseclass, i.e.,
1949
1950 struct A{};
1951 struct B{};
1952 struct C : public B, public virtual A {};
1953
1954 B is a baseclass of C; A is a virtual baseclass for C. This is a C++
1955 2.0 language feature. */
1956 int via_virtual;
1957
1958 *pp += 1;
1959
1960 n_baseclasses = read_number (pp, ',');
1961 TYPE_FIELD_VIRTUAL_BITS (type) =
1962 (B_TYPE *) obstack_alloc (symbol_obstack, B_BYTES (n_baseclasses));
1963 B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), n_baseclasses);
1964
1965 for (i = 0; i < n_baseclasses; i++)
1966 {
1967 if (**pp == '\\')
1968 *pp = next_symbol_text ();
1969
1970 switch (**pp)
1971 {
1972 case '0':
1973 via_virtual = 0;
1974 break;
1975 case '1':
1976 via_virtual = 1;
1977 break;
1978 default:
1979 /* Bad visibility format. */
1980 return error_type (pp);
1981 }
1982 ++*pp;
1983
1984 switch (**pp)
1985 {
1986 case '0':
1987 via_public = 0;
1988 break;
1989 case '2':
1990 via_public = 2;
1991 break;
1992 default:
1993 /* Bad visibility format. */
1994 return error_type (pp);
1995 }
1996 if (via_virtual)
1997 SET_TYPE_FIELD_VIRTUAL (type, i);
1998 ++*pp;
1999
2000 /* Offset of the portion of the object corresponding to
2001 this baseclass. Always zero in the absence of
2002 multiple inheritance. */
2003 offset = read_number (pp, ',');
2004 baseclass = read_type (pp);
2005 *pp += 1; /* skip trailing ';' */
2006
2007 /* Make this baseclass visible for structure-printing purposes. */
2008 new = (struct nextfield *) alloca (sizeof (struct nextfield));
2009 new->next = list;
2010 list = new;
2011 list->visibility = via_public;
2012 list->field.type = baseclass;
2013 list->field.name = type_name_no_tag (baseclass);
2014 list->field.bitpos = offset;
2015 list->field.bitsize = 0; /* this should be an unpacked field! */
2016 nfields++;
2017 }
2018 TYPE_N_BASECLASSES (type) = n_baseclasses;
2019 }
2020
2021 /* Now come the fields, as NAME:?TYPENUM,BITPOS,BITSIZE; for each one.
2022 At the end, we see a semicolon instead of a field.
2023
2024 In C++, this may wind up being NAME:?TYPENUM:PHYSNAME; for
2025 a static field.
2026
2027 The `?' is a placeholder for one of '/2' (public visibility),
2028 '/1' (protected visibility), '/0' (private visibility), or nothing
2029 (C style symbol table, public visibility). */
2030
2031 /* We better set p right now, in case there are no fields at all... */
2032 p = *pp;
2033
2034 while (**pp != ';')
2035 {
2036 /* Check for and handle cretinous dbx symbol name continuation! */
2037 if (**pp == '\\') *pp = next_symbol_text ();
2038
2039 /* Get space to record the next field's data. */
2040 new = (struct nextfield *) alloca (sizeof (struct nextfield));
2041 new->next = list;
2042 list = new;
2043
2044 /* Get the field name. */
2045 p = *pp;
2046 if (*p == CPLUS_MARKER)
2047 {
2048 /* Special GNU C++ name. */
2049 if (*++p == 'v')
2050 {
2051 const char *prefix;
2052 char *name = 0;
2053 struct type *context;
2054
2055 switch (*++p)
2056 {
2057 case 'f':
2058 prefix = vptr_name;
2059 break;
2060 case 'b':
2061 prefix = vb_name;
2062 break;
2063 default:
2064 complain (&invalid_cpp_abbrev_complaint, *pp);
2065 prefix = "INVALID_C++_ABBREV";
2066 break;
2067 }
2068 *pp = p + 1;
2069 context = read_type (pp);
2070 name = type_name_no_tag (context);
2071 if (name == 0)
2072 {
2073 complain (&invalid_cpp_type_complaint, symnum);
2074 TYPE_NAME (context) = name;
2075 }
2076 list->field.name = obconcat (prefix, name, "");
2077 p = ++(*pp);
2078 if (p[-1] != ':')
2079 complain (&invalid_cpp_abbrev_complaint, *pp);
2080 list->field.type = read_type (pp);
2081 (*pp)++; /* Skip the comma. */
2082 list->field.bitpos = read_number (pp, ';');
2083 /* This field is unpacked. */
2084 list->field.bitsize = 0;
2085 }
2086 /* GNU C++ anonymous type. */
2087 else if (*p == '_')
2088 break;
2089 else
2090 complain (&invalid_cpp_abbrev_complaint, *pp);
2091
2092 nfields++;
2093 continue;
2094 }
2095
2096 while (*p != ':') p++;
2097 list->field.name = obsavestring (*pp, p - *pp);
2098
2099 /* C++: Check to see if we have hit the methods yet. */
2100 if (p[1] == ':')
2101 break;
2102
2103 *pp = p + 1;
2104
2105 /* This means we have a visibility for a field coming. */
2106 if (**pp == '/')
2107 {
2108 switch (*++*pp)
2109 {
2110 case '0':
2111 list->visibility = 0; /* private */
2112 *pp += 1;
2113 break;
2114
2115 case '1':
2116 list->visibility = 1; /* protected */
2117 *pp += 1;
2118 break;
2119
2120 case '2':
2121 list->visibility = 2; /* public */
2122 *pp += 1;
2123 break;
2124 }
2125 }
2126 else /* normal dbx-style format. */
2127 list->visibility = 2; /* public */
2128
2129 list->field.type = read_type (pp);
2130 if (**pp == ':')
2131 {
2132 /* Static class member. */
2133 list->field.bitpos = (long)-1;
2134 p = ++(*pp);
2135 while (*p != ';') p++;
2136 list->field.bitsize = (long) savestring (*pp, p - *pp);
2137 *pp = p + 1;
2138 nfields++;
2139 continue;
2140 }
2141 else if (**pp != ',')
2142 /* Bad structure-type format. */
2143 return error_type (pp);
2144
2145 (*pp)++; /* Skip the comma. */
2146 list->field.bitpos = read_number (pp, ',');
2147 list->field.bitsize = read_number (pp, ';');
2148
2149 #if 0
2150 /* FIXME-tiemann: Can't the compiler put out something which
2151 lets us distinguish these? (or maybe just not put out anything
2152 for the field). What is the story here? What does the compiler
2153 really do? Also, patch gdb.texinfo for this case; I document
2154 it as a possible problem there. Search for "DBX-style". */
2155
2156 /* This is wrong because this is identical to the symbols
2157 produced for GCC 0-size arrays. For example:
2158 typedef union {
2159 int num;
2160 char str[0];
2161 } foo;
2162 The code which dumped core in such circumstances should be
2163 fixed not to dump core. */
2164
2165 /* g++ -g0 can put out bitpos & bitsize zero for a static
2166 field. This does not give us any way of getting its
2167 class, so we can't know its name. But we can just
2168 ignore the field so we don't dump core and other nasty
2169 stuff. */
2170 if (list->field.bitpos == 0
2171 && list->field.bitsize == 0)
2172 {
2173 complain (&dbx_class_complaint, 0);
2174 /* Ignore this field. */
2175 list = list->next;
2176 }
2177 else
2178 #endif /* 0 */
2179 {
2180 /* Detect an unpacked field and mark it as such.
2181 dbx gives a bit size for all fields.
2182 Note that forward refs cannot be packed,
2183 and treat enums as if they had the width of ints. */
2184 if (TYPE_CODE (list->field.type) != TYPE_CODE_INT
2185 && TYPE_CODE (list->field.type) != TYPE_CODE_ENUM)
2186 list->field.bitsize = 0;
2187 if ((list->field.bitsize == 8 * TYPE_LENGTH (list->field.type)
2188 || (TYPE_CODE (list->field.type) == TYPE_CODE_ENUM
2189 && (list->field.bitsize
2190 == 8 * TYPE_LENGTH (builtin_type_int))
2191 )
2192 )
2193 &&
2194 list->field.bitpos % 8 == 0)
2195 list->field.bitsize = 0;
2196 nfields++;
2197 }
2198 }
2199
2200 if (p[1] == ':')
2201 /* chill the list of fields: the last entry (at the head)
2202 is a partially constructed entry which we now scrub. */
2203 list = list->next;
2204
2205 /* Now create the vector of fields, and record how big it is.
2206 We need this info to record proper virtual function table information
2207 for this class's virtual functions. */
2208
2209 TYPE_NFIELDS (type) = nfields;
2210 TYPE_FIELDS (type) = (struct field *) obstack_alloc (symbol_obstack,
2211 sizeof (struct field) * nfields);
2212
2213 TYPE_FIELD_PRIVATE_BITS (type) =
2214 (B_TYPE *) obstack_alloc (symbol_obstack, B_BYTES (nfields));
2215 B_CLRALL (TYPE_FIELD_PRIVATE_BITS (type), nfields);
2216
2217 TYPE_FIELD_PROTECTED_BITS (type) =
2218 (B_TYPE *) obstack_alloc (symbol_obstack, B_BYTES (nfields));
2219 B_CLRALL (TYPE_FIELD_PROTECTED_BITS (type), nfields);
2220
2221 /* Copy the saved-up fields into the field vector. */
2222
2223 for (n = nfields; list; list = list->next)
2224 {
2225 n -= 1;
2226 TYPE_FIELD (type, n) = list->field;
2227 if (list->visibility == 0)
2228 SET_TYPE_FIELD_PRIVATE (type, n);
2229 else if (list->visibility == 1)
2230 SET_TYPE_FIELD_PROTECTED (type, n);
2231 }
2232
2233 /* Now come the method fields, as NAME::methods
2234 where each method is of the form TYPENUM,ARGS,...:PHYSNAME;
2235 At the end, we see a semicolon instead of a field.
2236
2237 For the case of overloaded operators, the format is
2238 OPERATOR::*.methods, where OPERATOR is the string "operator",
2239 `*' holds the place for an operator name (such as `+=')
2240 and `.' marks the end of the operator name. */
2241 if (p[1] == ':')
2242 {
2243 /* Now, read in the methods. To simplify matters, we
2244 "unread" the name that has been read, so that we can
2245 start from the top. */
2246
2247 /* For each list of method lists... */
2248 do
2249 {
2250 int i;
2251 struct next_fnfield *sublist = 0;
2252 struct type *look_ahead_type = NULL;
2253 int length = 0;
2254 struct next_fnfieldlist *new_mainlist =
2255 (struct next_fnfieldlist *)alloca (sizeof (struct next_fnfieldlist));
2256 char *main_fn_name;
2257
2258 p = *pp;
2259
2260 /* read in the name. */
2261 while (*p != ':') p++;
2262 if ((*pp)[0] == 'o' && (*pp)[1] == 'p' && (*pp)[2] == CPLUS_MARKER)
2263 {
2264 /* This is a completely wierd case. In order to stuff in the
2265 names that might contain colons (the usual name delimiter),
2266 Mike Tiemann defined a different name format which is
2267 signalled if the identifier is "op$". In that case, the
2268 format is "op$::XXXX." where XXXX is the name. This is
2269 used for names like "+" or "=". YUUUUUUUK! FIXME! */
2270 /* This lets the user type "break operator+".
2271 We could just put in "+" as the name, but that wouldn't
2272 work for "*". */
2273 static char opname[32] = {'o', 'p', CPLUS_MARKER};
2274 char *o = opname + 3;
2275
2276 /* Skip past '::'. */
2277 *pp = p + 2;
2278 if (**pp == '\\') *pp = next_symbol_text ();
2279 p = *pp;
2280 while (*p != '.')
2281 *o++ = *p++;
2282 main_fn_name = savestring (opname, o - opname);
2283 /* Skip past '.' */
2284 *pp = p + 1;
2285 }
2286 else
2287 main_fn_name = savestring (*pp, p - *pp);
2288 /* Skip past '::'. */
2289 *pp = p + 2;
2290 new_mainlist->fn_fieldlist.name = main_fn_name;
2291
2292 do
2293 {
2294 struct next_fnfield *new_sublist =
2295 (struct next_fnfield *)alloca (sizeof (struct next_fnfield));
2296
2297 /* Check for and handle cretinous dbx symbol name continuation! */
2298 if (look_ahead_type == NULL) /* Normal case. */
2299 {
2300 if (**pp == '\\') *pp = next_symbol_text ();
2301
2302 new_sublist->fn_field.type = read_type (pp);
2303 if (**pp != ':')
2304 /* Invalid symtab info for method. */
2305 return error_type (pp);
2306 }
2307 else
2308 { /* g++ version 1 kludge */
2309 new_sublist->fn_field.type = look_ahead_type;
2310 look_ahead_type = NULL;
2311 }
2312
2313 *pp += 1;
2314 p = *pp;
2315 while (*p != ';') p++;
2316 /* If this is just a stub, then we don't have the
2317 real name here. */
2318 new_sublist->fn_field.physname = savestring (*pp, p - *pp);
2319 *pp = p + 1;
2320 new_sublist->visibility = *(*pp)++ - '0';
2321 if (**pp == '\\') *pp = next_symbol_text ();
2322 switch (**pp)
2323 {
2324 case 'A': /* Normal functions. */
2325 new_sublist->fn_field.is_const = 0;
2326 new_sublist->fn_field.is_volatile = 0;
2327 (*pp)++;
2328 break;
2329 case 'B': /* `const' member functions. */
2330 new_sublist->fn_field.is_const = 1;
2331 new_sublist->fn_field.is_volatile = 0;
2332 (*pp)++;
2333 break;
2334 case 'C': /* `volatile' member function. */
2335 new_sublist->fn_field.is_const = 0;
2336 new_sublist->fn_field.is_volatile = 1;
2337 (*pp)++;
2338 break;
2339 case 'D': /* `const volatile' member function. */
2340 new_sublist->fn_field.is_const = 1;
2341 new_sublist->fn_field.is_volatile = 1;
2342 (*pp)++;
2343 break;
2344 case '*': /* File compiled with g++ version 1 -- no info */
2345 case '?':
2346 case '.':
2347 break;
2348 default:
2349 complain(&const_vol_complaint, **pp);
2350 break;
2351 }
2352
2353 switch (*(*pp)++)
2354 {
2355 case '*':
2356 /* virtual member function, followed by index. */
2357 /* The sign bit is set to distinguish pointers-to-methods
2358 from virtual function indicies. Since the array is
2359 in words, the quantity must be shifted left by 1
2360 on 16 bit machine, and by 2 on 32 bit machine, forcing
2361 the sign bit out, and usable as a valid index into
2362 the array. Remove the sign bit here. */
2363 new_sublist->fn_field.voffset =
2364 (0x7fffffff & read_number (pp, ';')) + 2;
2365
2366 if (**pp == '\\') *pp = next_symbol_text ();
2367
2368 if (**pp == ';' || **pp == '\0')
2369 /* Must be g++ version 1. */
2370 new_sublist->fn_field.fcontext = 0;
2371 else
2372 {
2373 /* Figure out from whence this virtual function came.
2374 It may belong to virtual function table of
2375 one of its baseclasses. */
2376 look_ahead_type = read_type (pp);
2377 if (**pp == ':')
2378 { /* g++ version 1 overloaded methods. */ }
2379 else
2380 {
2381 new_sublist->fn_field.fcontext = look_ahead_type;
2382 if (**pp != ';')
2383 return error_type (pp);
2384 else
2385 ++*pp;
2386 look_ahead_type = NULL;
2387 }
2388 }
2389 break;
2390
2391 case '?':
2392 /* static member function. */
2393 new_sublist->fn_field.voffset = VOFFSET_STATIC;
2394 break;
2395
2396 default:
2397 /* error */
2398 complain (&member_fn_complaint, (*pp)[-1]);
2399 /* Fall through into normal member function. */
2400
2401 case '.':
2402 /* normal member function. */
2403 new_sublist->fn_field.voffset = 0;
2404 new_sublist->fn_field.fcontext = 0;
2405 break;
2406 }
2407
2408 new_sublist->next = sublist;
2409 sublist = new_sublist;
2410 length++;
2411 if (**pp == '\\') *pp = next_symbol_text ();
2412 }
2413 while (**pp != ';' && **pp != '\0');
2414
2415 *pp += 1;
2416
2417 new_mainlist->fn_fieldlist.fn_fields =
2418 (struct fn_field *) obstack_alloc (symbol_obstack,
2419 sizeof (struct fn_field) * length);
2420 TYPE_FN_PRIVATE_BITS (new_mainlist->fn_fieldlist) =
2421 (B_TYPE *) obstack_alloc (symbol_obstack, B_BYTES (length));
2422 B_CLRALL (TYPE_FN_PRIVATE_BITS (new_mainlist->fn_fieldlist), length);
2423
2424 TYPE_FN_PROTECTED_BITS (new_mainlist->fn_fieldlist) =
2425 (B_TYPE *) obstack_alloc (symbol_obstack, B_BYTES (length));
2426 B_CLRALL (TYPE_FN_PROTECTED_BITS (new_mainlist->fn_fieldlist), length);
2427
2428 for (i = length; (i--, sublist); sublist = sublist->next)
2429 {
2430 new_mainlist->fn_fieldlist.fn_fields[i] = sublist->fn_field;
2431 if (sublist->visibility == 0)
2432 B_SET (new_mainlist->fn_fieldlist.private_fn_field_bits, i);
2433 else if (sublist->visibility == 1)
2434 B_SET (new_mainlist->fn_fieldlist.protected_fn_field_bits, i);
2435 }
2436
2437 new_mainlist->fn_fieldlist.length = length;
2438 new_mainlist->next = mainlist;
2439 mainlist = new_mainlist;
2440 nfn_fields++;
2441 total_length += length;
2442 }
2443 while (**pp != ';');
2444 }
2445
2446 *pp += 1;
2447
2448 TYPE_FN_FIELDLISTS (type) =
2449 (struct fn_fieldlist *) obstack_alloc (symbol_obstack,
2450 sizeof (struct fn_fieldlist) * nfn_fields);
2451
2452 TYPE_NFN_FIELDS (type) = nfn_fields;
2453 TYPE_NFN_FIELDS_TOTAL (type) = total_length;
2454
2455 {
2456 int i;
2457 for (i = 0; i < TYPE_N_BASECLASSES (type); ++i)
2458 TYPE_NFN_FIELDS_TOTAL (type) +=
2459 TYPE_NFN_FIELDS_TOTAL (TYPE_BASECLASS (type, i));
2460 }
2461
2462 for (n = nfn_fields; mainlist; mainlist = mainlist->next)
2463 TYPE_FN_FIELDLISTS (type)[--n] = mainlist->fn_fieldlist;
2464
2465 if (**pp == '~')
2466 {
2467 *pp += 1;
2468
2469 if (**pp == '=' || **pp == '+' || **pp == '-')
2470 {
2471 /* Obsolete flags that used to indicate the presence
2472 of constructors and/or destructors. */
2473 *pp += 1;
2474 }
2475
2476 /* Read either a '%' or the final ';'. */
2477 if (*(*pp)++ == '%')
2478 {
2479 /* We'd like to be able to derive the vtable pointer field
2480 from the type information, but when it's inherited, that's
2481 hard. A reason it's hard is because we may read in the
2482 info about a derived class before we read in info about
2483 the base class that provides the vtable pointer field.
2484 Once the base info has been read, we could fill in the info
2485 for the derived classes, but for the fact that by then,
2486 we don't remember who needs what. */
2487
2488 int predicted_fieldno = -1;
2489
2490 /* Now we must record the virtual function table pointer's
2491 field information. */
2492
2493 struct type *t;
2494 int i;
2495
2496
2497 #if 0
2498 {
2499 /* In version 2, we derive the vfield ourselves. */
2500 for (n = 0; n < nfields; n++)
2501 {
2502 if (! strncmp (TYPE_FIELD_NAME (type, n), vptr_name,
2503 sizeof (vptr_name) -1))
2504 {
2505 predicted_fieldno = n;
2506 break;
2507 }
2508 }
2509 if (predicted_fieldno < 0)
2510 for (n = 0; n < TYPE_N_BASECLASSES (type); n++)
2511 if (! TYPE_FIELD_VIRTUAL (type, n)
2512 && TYPE_VPTR_FIELDNO (TYPE_BASECLASS (type, n)) >= 0)
2513 {
2514 predicted_fieldno = TYPE_VPTR_FIELDNO (TYPE_BASECLASS (type, n));
2515 break;
2516 }
2517 }
2518 #endif
2519
2520 t = read_type (pp);
2521 p = (*pp)++;
2522 while (*p != '\0' && *p != ';')
2523 p++;
2524 if (*p == '\0')
2525 /* Premature end of symbol. */
2526 return error_type (pp);
2527
2528 TYPE_VPTR_BASETYPE (type) = t;
2529 if (type == t)
2530 {
2531 if (TYPE_FIELD_NAME (t, TYPE_N_BASECLASSES (t)) == 0)
2532 {
2533 /* FIXME-tiemann: what's this? */
2534 #if 0
2535 TYPE_VPTR_FIELDNO (type) = i = TYPE_N_BASECLASSES (t);
2536 #else
2537 error_type (pp);
2538 #endif
2539 }
2540 else for (i = TYPE_NFIELDS (t) - 1; i >= TYPE_N_BASECLASSES (t); --i)
2541 if (! strncmp (TYPE_FIELD_NAME (t, i), vptr_name,
2542 sizeof (vptr_name) -1))
2543 {
2544 TYPE_VPTR_FIELDNO (type) = i;
2545 break;
2546 }
2547 if (i < 0)
2548 /* Virtual function table field not found. */
2549 return error_type (pp);
2550 }
2551 else
2552 TYPE_VPTR_FIELDNO (type) = TYPE_VPTR_FIELDNO (t);
2553
2554 #if 0
2555 if (TYPE_VPTR_FIELDNO (type) != predicted_fieldno)
2556 error ("TYPE_VPTR_FIELDNO miscalculated");
2557 #endif
2558
2559 *pp = p + 1;
2560 }
2561 }
2562
2563 return type;
2564 }
2565
2566 /* Read a definition of an array type,
2567 and create and return a suitable type object.
2568 Also creates a range type which represents the bounds of that
2569 array. */
2570 struct type *
2571 read_array_type (pp, type)
2572 register char **pp;
2573 register struct type *type;
2574 {
2575 struct type *index_type, *element_type, *range_type;
2576 int lower, upper;
2577 int adjustable = 0;
2578
2579 /* Format of an array type:
2580 "ar<index type>;lower;upper;<array_contents_type>". Put code in
2581 to handle this.
2582
2583 Fortran adjustable arrays use Adigits or Tdigits for lower or upper;
2584 for these, produce a type like float[][]. */
2585
2586 index_type = read_type (pp);
2587 if (**pp != ';')
2588 /* Improper format of array type decl. */
2589 return error_type (pp);
2590 ++*pp;
2591
2592 if (!(**pp >= '0' && **pp <= '9'))
2593 {
2594 *pp += 1;
2595 adjustable = 1;
2596 }
2597 lower = read_number (pp, ';');
2598
2599 if (!(**pp >= '0' && **pp <= '9'))
2600 {
2601 *pp += 1;
2602 adjustable = 1;
2603 }
2604 upper = read_number (pp, ';');
2605
2606 element_type = read_type (pp);
2607
2608 if (adjustable)
2609 {
2610 lower = 0;
2611 upper = -1;
2612 }
2613
2614 {
2615 /* Create range type. */
2616 range_type = (struct type *) obstack_alloc (symbol_obstack,
2617 sizeof (struct type));
2618 TYPE_CODE (range_type) = TYPE_CODE_RANGE;
2619 TYPE_TARGET_TYPE (range_type) = index_type;
2620
2621 /* This should never be needed. */
2622 TYPE_LENGTH (range_type) = sizeof (int);
2623
2624 TYPE_NFIELDS (range_type) = 2;
2625 TYPE_FIELDS (range_type) =
2626 (struct field *) obstack_alloc (symbol_obstack,
2627 2 * sizeof (struct field));
2628 TYPE_FIELD_BITPOS (range_type, 0) = lower;
2629 TYPE_FIELD_BITPOS (range_type, 1) = upper;
2630 }
2631
2632 TYPE_CODE (type) = TYPE_CODE_ARRAY;
2633 TYPE_TARGET_TYPE (type) = element_type;
2634 TYPE_LENGTH (type) = (upper - lower + 1) * TYPE_LENGTH (element_type);
2635 TYPE_NFIELDS (type) = 1;
2636 TYPE_FIELDS (type) =
2637 (struct field *) obstack_alloc (symbol_obstack,
2638 sizeof (struct field));
2639 TYPE_FIELD_TYPE (type, 0) = range_type;
2640
2641 /* If we have an array whose element type is not yet known, but whose
2642 bounds *are* known, record it to be adjusted at the end of the file. */
2643 if (TYPE_LENGTH (element_type) == 0 && !adjustable)
2644 add_undefined_type (type);
2645
2646 return type;
2647 }
2648
2649
2650 /* Read a definition of an enumeration type,
2651 and create and return a suitable type object.
2652 Also defines the symbols that represent the values of the type. */
2653
2654 struct type *
2655 read_enum_type (pp, type)
2656 register char **pp;
2657 register struct type *type;
2658 {
2659 register char *p;
2660 char *name;
2661 register long n;
2662 register struct symbol *sym;
2663 int nsyms = 0;
2664 struct pending **symlist;
2665 struct pending *osyms, *syms;
2666 int o_nsyms;
2667
2668 if (within_function)
2669 symlist = &local_symbols;
2670 else
2671 symlist = &file_symbols;
2672 osyms = *symlist;
2673 o_nsyms = osyms ? osyms->nsyms : 0;
2674
2675 /* Read the value-names and their values.
2676 The input syntax is NAME:VALUE,NAME:VALUE, and so on.
2677 A semicolon or comman instead of a NAME means the end. */
2678 while (**pp && **pp != ';' && **pp != ',')
2679 {
2680 /* Check for and handle cretinous dbx symbol name continuation! */
2681 if (**pp == '\\') *pp = next_symbol_text ();
2682
2683 p = *pp;
2684 while (*p != ':') p++;
2685 name = obsavestring (*pp, p - *pp);
2686 *pp = p + 1;
2687 n = read_number (pp, ',');
2688
2689 sym = (struct symbol *) obstack_alloc (symbol_obstack, sizeof (struct symbol));
2690 bzero (sym, sizeof (struct symbol));
2691 SYMBOL_NAME (sym) = name;
2692 SYMBOL_CLASS (sym) = LOC_CONST;
2693 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2694 SYMBOL_VALUE (sym) = n;
2695 add_symbol_to_list (sym, symlist);
2696 nsyms++;
2697 }
2698
2699 if (**pp == ';')
2700 (*pp)++; /* Skip the semicolon. */
2701
2702 /* Now fill in the fields of the type-structure. */
2703
2704 TYPE_LENGTH (type) = sizeof (int);
2705 TYPE_CODE (type) = TYPE_CODE_ENUM;
2706 TYPE_NFIELDS (type) = nsyms;
2707 TYPE_FIELDS (type) = (struct field *) obstack_alloc (symbol_obstack, sizeof (struct field) * nsyms);
2708
2709 /* Find the symbols for the values and put them into the type.
2710 The symbols can be found in the symlist that we put them on
2711 to cause them to be defined. osyms contains the old value
2712 of that symlist; everything up to there was defined by us. */
2713 /* Note that we preserve the order of the enum constants, so
2714 that in something like "enum {FOO, LAST_THING=FOO}" we print
2715 FOO, not LAST_THING. */
2716
2717 for (syms = *symlist, n = 0; syms; syms = syms->next)
2718 {
2719 int j = 0;
2720 if (syms == osyms)
2721 j = o_nsyms;
2722 for (; j < syms->nsyms; j++,n++)
2723 {
2724 struct symbol *xsym = syms->symbol[j];
2725 SYMBOL_TYPE (xsym) = type;
2726 TYPE_FIELD_NAME (type, n) = SYMBOL_NAME (xsym);
2727 TYPE_FIELD_VALUE (type, n) = 0;
2728 TYPE_FIELD_BITPOS (type, n) = SYMBOL_VALUE (xsym);
2729 TYPE_FIELD_BITSIZE (type, n) = 0;
2730 }
2731 if (syms == osyms)
2732 break;
2733 }
2734
2735 #if 0
2736 /* This screws up perfectly good C programs with enums. FIXME. */
2737 /* Is this Modula-2's BOOLEAN type? Flag it as such if so. */
2738 if(TYPE_NFIELDS(type) == 2 &&
2739 ((!strcmp(TYPE_FIELD_NAME(type,0),"TRUE") &&
2740 !strcmp(TYPE_FIELD_NAME(type,1),"FALSE")) ||
2741 (!strcmp(TYPE_FIELD_NAME(type,1),"TRUE") &&
2742 !strcmp(TYPE_FIELD_NAME(type,0),"FALSE"))))
2743 TYPE_CODE(type) = TYPE_CODE_BOOL;
2744 #endif
2745
2746 return type;
2747 }
2748
2749 /* Read a number from the string pointed to by *PP.
2750 The value of *PP is advanced over the number.
2751 If END is nonzero, the character that ends the
2752 number must match END, or an error happens;
2753 and that character is skipped if it does match.
2754 If END is zero, *PP is left pointing to that character.
2755
2756 If the number fits in a long, set *VALUE and set *BITS to 0.
2757 If not, set *BITS to be the number of bits in the number.
2758
2759 If encounter garbage, set *BITS to -1. */
2760
2761 void
2762 read_huge_number (pp, end, valu, bits)
2763 char **pp;
2764 int end;
2765 long *valu;
2766 int *bits;
2767 {
2768 char *p = *pp;
2769 int sign = 1;
2770 long n = 0;
2771 int radix = 10;
2772 char overflow = 0;
2773 int nbits = 0;
2774 int c;
2775 long upper_limit;
2776
2777 if (*p == '-')
2778 {
2779 sign = -1;
2780 p++;
2781 }
2782
2783 /* Leading zero means octal. GCC uses this to output values larger
2784 than an int (because that would be hard in decimal). */
2785 if (*p == '0')
2786 {
2787 radix = 8;
2788 p++;
2789 }
2790
2791 upper_limit = LONG_MAX / radix;
2792 while ((c = *p++) >= '0' && c <= ('0' + radix))
2793 {
2794 if (n <= upper_limit)
2795 {
2796 n *= radix;
2797 n += c - '0'; /* FIXME this overflows anyway */
2798 }
2799 else
2800 overflow = 1;
2801
2802 /* This depends on large values being output in octal, which is
2803 what GCC does. */
2804 if (radix == 8)
2805 {
2806 if (nbits == 0)
2807 {
2808 if (c == '0')
2809 /* Ignore leading zeroes. */
2810 ;
2811 else if (c == '1')
2812 nbits = 1;
2813 else if (c == '2' || c == '3')
2814 nbits = 2;
2815 else
2816 nbits = 3;
2817 }
2818 else
2819 nbits += 3;
2820 }
2821 }
2822 if (end)
2823 {
2824 if (c && c != end)
2825 {
2826 if (bits != NULL)
2827 *bits = -1;
2828 return;
2829 }
2830 }
2831 else
2832 --p;
2833
2834 *pp = p;
2835 if (overflow)
2836 {
2837 if (nbits == 0)
2838 {
2839 /* Large decimal constants are an error (because it is hard to
2840 count how many bits are in them). */
2841 if (bits != NULL)
2842 *bits = -1;
2843 return;
2844 }
2845
2846 /* -0x7f is the same as 0x80. So deal with it by adding one to
2847 the number of bits. */
2848 if (sign == -1)
2849 ++nbits;
2850 if (bits)
2851 *bits = nbits;
2852 }
2853 else
2854 {
2855 if (valu)
2856 *valu = n * sign;
2857 if (bits)
2858 *bits = 0;
2859 }
2860 }
2861
2862 #define MAX_OF_C_TYPE(t) ((1 << (sizeof (t)*8 - 1)) - 1)
2863 #define MIN_OF_C_TYPE(t) (-(1 << (sizeof (t)*8 - 1)))
2864
2865 struct type *
2866 read_range_type (pp, typenums)
2867 char **pp;
2868 int typenums[2];
2869 {
2870 int rangenums[2];
2871 long n2, n3;
2872 int n2bits, n3bits;
2873 int self_subrange;
2874 struct type *result_type;
2875
2876 /* First comes a type we are a subrange of.
2877 In C it is usually 0, 1 or the type being defined. */
2878 read_type_number (pp, rangenums);
2879 self_subrange = (rangenums[0] == typenums[0] &&
2880 rangenums[1] == typenums[1]);
2881
2882 /* A semicolon should now follow; skip it. */
2883 if (**pp == ';')
2884 (*pp)++;
2885
2886 /* The remaining two operands are usually lower and upper bounds
2887 of the range. But in some special cases they mean something else. */
2888 read_huge_number (pp, ';', &n2, &n2bits);
2889 read_huge_number (pp, ';', &n3, &n3bits);
2890
2891 if (n2bits == -1 || n3bits == -1)
2892 return error_type (pp);
2893
2894 /* If limits are huge, must be large integral type. */
2895 if (n2bits != 0 || n3bits != 0)
2896 {
2897 char got_signed = 0;
2898 char got_unsigned = 0;
2899 /* Number of bits in the type. */
2900 int nbits;
2901
2902 /* Range from 0 to <large number> is an unsigned large integral type. */
2903 if ((n2bits == 0 && n2 == 0) && n3bits != 0)
2904 {
2905 got_unsigned = 1;
2906 nbits = n3bits;
2907 }
2908 /* Range from <large number> to <large number>-1 is a large signed
2909 integral type. */
2910 else if (n2bits != 0 && n3bits != 0 && n2bits == n3bits + 1)
2911 {
2912 got_signed = 1;
2913 nbits = n2bits;
2914 }
2915
2916 /* Check for "long long". */
2917 if (got_signed && nbits == TARGET_LONG_LONG_BIT)
2918 return builtin_type_long_long;
2919 if (got_unsigned && nbits == TARGET_LONG_LONG_BIT)
2920 return builtin_type_unsigned_long_long;
2921
2922 if (got_signed || got_unsigned)
2923 {
2924 result_type = (struct type *) obstack_alloc (symbol_obstack,
2925 sizeof (struct type));
2926 bzero (result_type, sizeof (struct type));
2927 TYPE_LENGTH (result_type) = nbits / TARGET_CHAR_BIT;
2928 TYPE_CODE (result_type) = TYPE_CODE_INT;
2929 if (got_unsigned)
2930 TYPE_FLAGS (result_type) |= TYPE_FLAG_UNSIGNED;
2931 return result_type;
2932 }
2933 else
2934 return error_type (pp);
2935 }
2936
2937 /* A type defined as a subrange of itself, with bounds both 0, is void. */
2938 if (self_subrange && n2 == 0 && n3 == 0)
2939 return builtin_type_void;
2940
2941 /* If n3 is zero and n2 is not, we want a floating type,
2942 and n2 is the width in bytes.
2943
2944 Fortran programs appear to use this for complex types also,
2945 and they give no way to distinguish between double and single-complex!
2946 We don't have complex types, so we would lose on all fortran files!
2947 So return type `double' for all of those. It won't work right
2948 for the complex values, but at least it makes the file loadable.
2949
2950 FIXME, we may be able to distinguish these by their names. FIXME. */
2951
2952 if (n3 == 0 && n2 > 0)
2953 {
2954 if (n2 == sizeof (float))
2955 return builtin_type_float;
2956 return builtin_type_double;
2957 }
2958
2959 /* If the upper bound is -1, it must really be an unsigned int. */
2960
2961 else if (n2 == 0 && n3 == -1)
2962 {
2963 /* FIXME -- the only way to distinguish `unsigned int' from `unsigned
2964 long' is to look at its name! */
2965 if (
2966 long_kludge_name && ((long_kludge_name[0] == 'u' /* unsigned */ &&
2967 long_kludge_name[9] == 'l' /* long */)
2968 || (long_kludge_name[0] == 'l' /* long unsigned */)))
2969 return builtin_type_unsigned_long;
2970 else
2971 return builtin_type_unsigned_int;
2972 }
2973
2974 /* Special case: char is defined (Who knows why) as a subrange of
2975 itself with range 0-127. */
2976 else if (self_subrange && n2 == 0 && n3 == 127)
2977 return builtin_type_char;
2978
2979 /* Assumptions made here: Subrange of self is equivalent to subrange
2980 of int. FIXME: Host and target type-sizes assumed the same. */
2981 /* FIXME: This is the *only* place in GDB that depends on comparing
2982 some type to a builtin type with ==. Fix it! */
2983 else if (n2 == 0
2984 && (self_subrange ||
2985 *dbx_lookup_type (rangenums) == builtin_type_int))
2986 {
2987 /* an unsigned type */
2988 #ifdef LONG_LONG
2989 if (n3 == - sizeof (long long))
2990 return builtin_type_unsigned_long_long;
2991 #endif
2992 /* FIXME -- the only way to distinguish `unsigned int' from `unsigned
2993 long' is to look at its name! */
2994 if (n3 == (unsigned long)~0L &&
2995 long_kludge_name && ((long_kludge_name[0] == 'u' /* unsigned */ &&
2996 long_kludge_name[9] == 'l' /* long */)
2997 || (long_kludge_name[0] == 'l' /* long unsigned */)))
2998 return builtin_type_unsigned_long;
2999 if (n3 == (unsigned int)~0L)
3000 return builtin_type_unsigned_int;
3001 if (n3 == (unsigned short)~0L)
3002 return builtin_type_unsigned_short;
3003 if (n3 == (unsigned char)~0L)
3004 return builtin_type_unsigned_char;
3005 }
3006 #ifdef LONG_LONG
3007 else if (n3 == 0 && n2 == -sizeof (long long))
3008 return builtin_type_long_long;
3009 #endif
3010 else if (n2 == -n3 -1)
3011 {
3012 /* a signed type */
3013 /* FIXME -- the only way to distinguish `int' from `long' is to look
3014 at its name! */
3015 if ((n3 == (1 << (8 * sizeof (long) - 1)) - 1) &&
3016 long_kludge_name && long_kludge_name[0] == 'l' /* long */)
3017 return builtin_type_long;
3018 if (n3 == (1 << (8 * sizeof (int) - 1)) - 1)
3019 return builtin_type_int;
3020 if (n3 == (1 << (8 * sizeof (short) - 1)) - 1)
3021 return builtin_type_short;
3022 if (n3 == (1 << (8 * sizeof (char) - 1)) - 1)
3023 return builtin_type_char;
3024 }
3025
3026 /* We have a real range type on our hands. Allocate space and
3027 return a real pointer. */
3028
3029 /* At this point I don't have the faintest idea how to deal with
3030 a self_subrange type; I'm going to assume that this is used
3031 as an idiom, and that all of them are special cases. So . . . */
3032 if (self_subrange)
3033 return error_type (pp);
3034
3035 result_type = (struct type *) obstack_alloc (symbol_obstack,
3036 sizeof (struct type));
3037 bzero (result_type, sizeof (struct type));
3038
3039 TYPE_CODE (result_type) = TYPE_CODE_RANGE;
3040
3041 TYPE_TARGET_TYPE (result_type) = *dbx_lookup_type(rangenums);
3042 if (TYPE_TARGET_TYPE (result_type) == 0) {
3043 complain (&range_type_base_complaint, rangenums[1]);
3044 TYPE_TARGET_TYPE (result_type) = builtin_type_int;
3045 }
3046
3047 TYPE_NFIELDS (result_type) = 2;
3048 TYPE_FIELDS (result_type) =
3049 (struct field *) obstack_alloc (symbol_obstack,
3050 2 * sizeof (struct field));
3051 bzero (TYPE_FIELDS (result_type), 2 * sizeof (struct field));
3052 TYPE_FIELD_BITPOS (result_type, 0) = n2;
3053 TYPE_FIELD_BITPOS (result_type, 1) = n3;
3054
3055 TYPE_LENGTH (result_type) = TYPE_LENGTH (TYPE_TARGET_TYPE (result_type));
3056
3057 return result_type;
3058 }
3059
3060 /* Read a number from the string pointed to by *PP.
3061 The value of *PP is advanced over the number.
3062 If END is nonzero, the character that ends the
3063 number must match END, or an error happens;
3064 and that character is skipped if it does match.
3065 If END is zero, *PP is left pointing to that character. */
3066
3067 long
3068 read_number (pp, end)
3069 char **pp;
3070 int end;
3071 {
3072 register char *p = *pp;
3073 register long n = 0;
3074 register int c;
3075 int sign = 1;
3076
3077 /* Handle an optional leading minus sign. */
3078
3079 if (*p == '-')
3080 {
3081 sign = -1;
3082 p++;
3083 }
3084
3085 /* Read the digits, as far as they go. */
3086
3087 while ((c = *p++) >= '0' && c <= '9')
3088 {
3089 n *= 10;
3090 n += c - '0';
3091 }
3092 if (end)
3093 {
3094 if (c && c != end)
3095 error ("Invalid symbol data: invalid character \\%03o at symbol pos %d.", c, symnum);
3096 }
3097 else
3098 --p;
3099
3100 *pp = p;
3101 return n * sign;
3102 }
3103
3104 /* Read in an argument list. This is a list of types, separated by commas
3105 and terminated with END. Return the list of types read in, or (struct type
3106 **)-1 if there is an error. */
3107 struct type **
3108 read_args (pp, end)
3109 char **pp;
3110 int end;
3111 {
3112 /* FIXME! Remove this arbitrary limit! */
3113 struct type *types[1024], **rval; /* allow for fns of 1023 parameters */
3114 int n = 0;
3115
3116 while (**pp != end)
3117 {
3118 if (**pp != ',')
3119 /* Invalid argument list: no ','. */
3120 return (struct type **)-1;
3121 *pp += 1;
3122
3123 /* Check for and handle cretinous dbx symbol name continuation! */
3124 if (**pp == '\\')
3125 *pp = next_symbol_text ();
3126
3127 types[n++] = read_type (pp);
3128 }
3129 *pp += 1; /* get past `end' (the ':' character) */
3130
3131 if (n == 1)
3132 {
3133 rval = (struct type **) xmalloc (2 * sizeof (struct type *));
3134 }
3135 else if (TYPE_CODE (types[n-1]) != TYPE_CODE_VOID)
3136 {
3137 rval = (struct type **) xmalloc ((n + 1) * sizeof (struct type *));
3138 bzero (rval + n, sizeof (struct type *));
3139 }
3140 else
3141 {
3142 rval = (struct type **) xmalloc (n * sizeof (struct type *));
3143 }
3144 bcopy (types, rval, n * sizeof (struct type *));
3145 return rval;
3146 }
3147
3148 /* Add a common block's start address to the offset of each symbol
3149 declared to be in it (by being between a BCOMM/ECOMM pair that uses
3150 the common block name). */
3151
3152 static void
3153 fix_common_block (sym, valu)
3154 struct symbol *sym;
3155 int valu;
3156 {
3157 struct pending *next = (struct pending *) SYMBOL_NAMESPACE (sym);
3158 for ( ; next; next = next->next)
3159 {
3160 register int j;
3161 for (j = next->nsyms - 1; j >= 0; j--)
3162 SYMBOL_VALUE_ADDRESS (next->symbol[j]) += valu;
3163 }
3164 }
3165
3166 /* Initializer for this module */
3167 void
3168 _initialize_buildsym ()
3169 {
3170 undef_types_allocated = 20;
3171 undef_types_length = 0;
3172 undef_types = (struct type **) xmalloc (undef_types_allocated *
3173 sizeof (struct type *));
3174 }
This page took 0.169211 seconds and 5 git commands to generate.