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