* serial.h: Fix prototye for serial_raw().
[deliverable/binutils-gdb.git] / gdb / gdbtypes.c
CommitLineData
1ab3bf1b
JG
1/* Support routines for manipulating internal types for GDB.
2 Copyright (C) 1992 Free Software Foundation, Inc.
3 Contributed by Cygnus Support, using pieces from other GDB modules.
4
5This file is part of GDB.
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program; if not, write to the Free Software
19Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20
1ab3bf1b 21#include "defs.h"
93fe4e33 22#include <string.h>
1ab3bf1b
JG
23#include "bfd.h"
24#include "symtab.h"
25#include "symfile.h"
5e2e79f8 26#include "objfiles.h"
1ab3bf1b
JG
27#include "gdbtypes.h"
28#include "expression.h"
29#include "language.h"
30#include "target.h"
31#include "value.h"
8f793aa5 32#include "demangle.h"
1ab3bf1b
JG
33
34/* Alloc a new type structure and fill it with some defaults. If
35 OBJFILE is non-NULL, then allocate the space for the type structure
36 in that objfile's type_obstack. */
37
38struct type *
39alloc_type (objfile)
40 struct objfile *objfile;
41{
42 register struct type *type;
43
44 /* Alloc the structure and start off with all fields zeroed. */
45
46 if (objfile == NULL)
47 {
48 type = (struct type *) xmalloc (sizeof (struct type));
49 }
50 else
51 {
52 type = (struct type *) obstack_alloc (&objfile -> type_obstack,
53 sizeof (struct type));
54 }
dac9734e 55 memset ((char *) type, 0, sizeof (struct type));
1ab3bf1b
JG
56
57 /* Initialize the fields that might not be zero. */
58
59 TYPE_CODE (type) = TYPE_CODE_UNDEF;
60 TYPE_OBJFILE (type) = objfile;
61 TYPE_VPTR_FIELDNO (type) = -1;
62
63 return (type);
64}
65
ea1549b3
JG
66/* Lookup a pointer to a type TYPE. TYPEPTR, if nonzero, points
67 to a pointer to memory where the pointer type should be stored.
68 If *TYPEPTR is zero, update it to point to the pointer type we return.
69 We allocate new memory if needed. */
70
71struct type *
72make_pointer_type (type, typeptr)
73 struct type *type;
74 struct type **typeptr;
75{
76 register struct type *ntype; /* New type */
77 struct objfile *objfile;
78
79 ntype = TYPE_POINTER_TYPE (type);
80
81 if (ntype)
82 if (typeptr == 0)
83 return ntype; /* Don't care about alloc, and have new type. */
84 else if (*typeptr == 0)
85 {
86 *typeptr = ntype; /* Tracking alloc, and we have new type. */
87 return ntype;
88 }
89
90 if (typeptr == 0 || *typeptr == 0) /* We'll need to allocate one. */
91 {
92 ntype = alloc_type (TYPE_OBJFILE (type));
93 if (typeptr)
94 *typeptr = ntype;
95 }
96 else /* We have storage, but need to reset it. */
97 {
98 ntype = *typeptr;
99 objfile = TYPE_OBJFILE (ntype);
dac9734e 100 memset ((char *) ntype, 0, sizeof (struct type));
ea1549b3
JG
101 TYPE_OBJFILE (ntype) = objfile;
102 }
103
104 TYPE_TARGET_TYPE (ntype) = type;
105 TYPE_POINTER_TYPE (type) = ntype;
106
107 /* FIXME! Assume the machine has only one representation for pointers! */
108
109 TYPE_LENGTH (ntype) = TARGET_PTR_BIT / TARGET_CHAR_BIT;
110 TYPE_CODE (ntype) = TYPE_CODE_PTR;
111
112 /* pointers are unsigned */
113 TYPE_FLAGS (ntype) |= TYPE_FLAG_UNSIGNED;
114
115 if (!TYPE_POINTER_TYPE (type)) /* Remember it, if don't have one. */
116 TYPE_POINTER_TYPE (type) = ntype;
117
118 return ntype;
119}
120
1ab3bf1b
JG
121/* Given a type TYPE, return a type of pointers to that type.
122 May need to construct such a type if this is the first use. */
123
124struct type *
125lookup_pointer_type (type)
126 struct type *type;
127{
ea1549b3
JG
128 return make_pointer_type (type, (struct type **)0);
129}
130
131/* Lookup a C++ `reference' to a type TYPE. TYPEPTR, if nonzero, points
132 to a pointer to memory where the reference type should be stored.
133 If *TYPEPTR is zero, update it to point to the reference type we return.
134 We allocate new memory if needed. */
135
136struct type *
137make_reference_type (type, typeptr)
138 struct type *type;
139 struct type **typeptr;
140{
141 register struct type *ntype; /* New type */
142 struct objfile *objfile;
143
144 ntype = TYPE_REFERENCE_TYPE (type);
1ab3bf1b 145
ea1549b3
JG
146 if (ntype)
147 if (typeptr == 0)
148 return ntype; /* Don't care about alloc, and have new type. */
149 else if (*typeptr == 0)
150 {
151 *typeptr = ntype; /* Tracking alloc, and we have new type. */
152 return ntype;
153 }
154
155 if (typeptr == 0 || *typeptr == 0) /* We'll need to allocate one. */
156 {
157 ntype = alloc_type (TYPE_OBJFILE (type));
158 if (typeptr)
159 *typeptr = ntype;
160 }
161 else /* We have storage, but need to reset it. */
1ab3bf1b 162 {
ea1549b3
JG
163 ntype = *typeptr;
164 objfile = TYPE_OBJFILE (ntype);
dac9734e 165 memset ((char *) ntype, 0, sizeof (struct type));
ea1549b3 166 TYPE_OBJFILE (ntype) = objfile;
1ab3bf1b 167 }
ea1549b3
JG
168
169 TYPE_TARGET_TYPE (ntype) = type;
170 TYPE_REFERENCE_TYPE (type) = ntype;
171
172 /* FIXME! Assume the machine has only one representation for references,
173 and that it matches the (only) representation for pointers! */
174
175 TYPE_LENGTH (ntype) = TARGET_PTR_BIT / TARGET_CHAR_BIT;
176 TYPE_CODE (ntype) = TYPE_CODE_REF;
177
178 if (!TYPE_REFERENCE_TYPE (type)) /* Remember it, if don't have one. */
179 TYPE_REFERENCE_TYPE (type) = ntype;
180
181 return ntype;
1ab3bf1b
JG
182}
183
ea1549b3
JG
184/* Same as above, but caller doesn't care about memory allocation details. */
185
1ab3bf1b
JG
186struct type *
187lookup_reference_type (type)
188 struct type *type;
189{
ea1549b3
JG
190 return make_reference_type (type, (struct type **)0);
191}
192
193/* Lookup a function type that returns type TYPE. TYPEPTR, if nonzero, points
194 to a pointer to memory where the function type should be stored.
195 If *TYPEPTR is zero, update it to point to the function type we return.
196 We allocate new memory if needed. */
1ab3bf1b 197
ea1549b3
JG
198struct type *
199make_function_type (type, typeptr)
200 struct type *type;
201 struct type **typeptr;
202{
203 register struct type *ntype; /* New type */
204 struct objfile *objfile;
205
206 ntype = TYPE_FUNCTION_TYPE (type);
207
208 if (ntype)
209 if (typeptr == 0)
210 return ntype; /* Don't care about alloc, and have new type. */
211 else if (*typeptr == 0)
212 {
213 *typeptr = ntype; /* Tracking alloc, and we have new type. */
214 return ntype;
215 }
216
217 if (typeptr == 0 || *typeptr == 0) /* We'll need to allocate one. */
1ab3bf1b 218 {
ea1549b3
JG
219 ntype = alloc_type (TYPE_OBJFILE (type));
220 if (typeptr)
221 *typeptr = ntype;
1ab3bf1b 222 }
ea1549b3
JG
223 else /* We have storage, but need to reset it. */
224 {
225 ntype = *typeptr;
226 objfile = TYPE_OBJFILE (ntype);
dac9734e 227 memset ((char *) ntype, 0, sizeof (struct type));
ea1549b3
JG
228 TYPE_OBJFILE (ntype) = objfile;
229 }
230
231 TYPE_TARGET_TYPE (ntype) = type;
232 TYPE_FUNCTION_TYPE (type) = ntype;
233
234 TYPE_LENGTH (ntype) = 1;
235 TYPE_CODE (ntype) = TYPE_CODE_FUNC;
236
237 if (!TYPE_FUNCTION_TYPE (type)) /* Remember it, if don't have one. */
238 TYPE_FUNCTION_TYPE (type) = ntype;
239
240 return ntype;
1ab3bf1b
JG
241}
242
ea1549b3 243
1ab3bf1b
JG
244/* Given a type TYPE, return a type of functions that return that type.
245 May need to construct such a type if this is the first use. */
246
247struct type *
248lookup_function_type (type)
249 struct type *type;
250{
ea1549b3 251 return make_function_type (type, (struct type **)0);
1ab3bf1b
JG
252}
253
254/* Implement direct support for MEMBER_TYPE in GNU C++.
255 May need to construct such a type if this is the first use.
256 The TYPE is the type of the member. The DOMAIN is the type
257 of the aggregate that the member belongs to. */
258
259struct type *
260lookup_member_type (type, domain)
261 struct type *type;
262 struct type *domain;
263{
264 register struct type *mtype;
265
266 mtype = alloc_type (TYPE_OBJFILE (type));
267 smash_to_member_type (mtype, domain, type);
268 return (mtype);
269}
270
271/* Allocate a stub method whose return type is TYPE.
272 This apparently happens for speed of symbol reading, since parsing
273 out the arguments to the method is cpu-intensive, the way we are doing
274 it. So, we will fill in arguments later.
275 This always returns a fresh type. */
276
277struct type *
278allocate_stub_method (type)
279 struct type *type;
280{
281 struct type *mtype;
282
283 mtype = alloc_type (TYPE_OBJFILE (type));
284 TYPE_TARGET_TYPE (mtype) = type;
285 /* _DOMAIN_TYPE (mtype) = unknown yet */
286 /* _ARG_TYPES (mtype) = unknown yet */
287 TYPE_FLAGS (mtype) = TYPE_FLAG_STUB;
288 TYPE_CODE (mtype) = TYPE_CODE_METHOD;
289 TYPE_LENGTH (mtype) = 1;
290 return (mtype);
291}
292
293/* Create an array type. Elements will be of type TYPE, and there will
294 be NUM of them.
295
296 Eventually this should be extended to take two more arguments which
297 specify the bounds of the array and the type of the index.
298 It should also be changed to be a "lookup" function, with the
299 appropriate data structures added to the type field.
300 Then read array type should call here. */
301
302struct type *
303create_array_type (element_type, number)
304 struct type *element_type;
305 int number;
306{
307 struct type *result_type;
308 struct type *range_type;
309
310 result_type = alloc_type (TYPE_OBJFILE (element_type));
311
312 TYPE_CODE (result_type) = TYPE_CODE_ARRAY;
313 TYPE_TARGET_TYPE (result_type) = element_type;
314 TYPE_LENGTH (result_type) = number * TYPE_LENGTH (element_type);
315 TYPE_NFIELDS (result_type) = 1;
316 TYPE_FIELDS (result_type) = (struct field *)
dac9734e 317 TYPE_ALLOC (result_type, sizeof (struct field));
1ab3bf1b
JG
318
319 {
320 /* Create range type. */
321 range_type = alloc_type (TYPE_OBJFILE (result_type));
322 TYPE_CODE (range_type) = TYPE_CODE_RANGE;
323 TYPE_TARGET_TYPE (range_type) = builtin_type_int; /* FIXME */
324
325 /* This should never be needed. */
326 TYPE_LENGTH (range_type) = sizeof (int);
327
328 TYPE_NFIELDS (range_type) = 2;
329 TYPE_FIELDS (range_type) = (struct field *)
dac9734e 330 TYPE_ALLOC (range_type, 2 * sizeof (struct field));
1ab3bf1b
JG
331 TYPE_FIELD_BITPOS (range_type, 0) = 0; /* FIXME */
332 TYPE_FIELD_BITPOS (range_type, 1) = number-1; /* FIXME */
333 TYPE_FIELD_TYPE (range_type, 0) = builtin_type_int; /* FIXME */
334 TYPE_FIELD_TYPE (range_type, 1) = builtin_type_int; /* FIXME */
335 }
8050a57b 336 TYPE_FIELD_TYPE (result_type, 0) = range_type;
1ab3bf1b
JG
337 TYPE_VPTR_FIELDNO (result_type) = -1;
338
339 return (result_type);
340}
341
342
343/* Smash TYPE to be a type of members of DOMAIN with type TO_TYPE.
344 A MEMBER is a wierd thing -- it amounts to a typed offset into
345 a struct, e.g. "an int at offset 8". A MEMBER TYPE doesn't
346 include the offset (that's the value of the MEMBER itself), but does
347 include the structure type into which it points (for some reason).
348
c2e4669f 349 When "smashing" the type, we preserve the objfile that the
1ab3bf1b 350 old type pointed to, since we aren't changing where the type is actually
c2e4669f 351 allocated. */
1ab3bf1b
JG
352
353void
354smash_to_member_type (type, domain, to_type)
355 struct type *type;
356 struct type *domain;
357 struct type *to_type;
358{
359 struct objfile *objfile;
360
361 objfile = TYPE_OBJFILE (type);
362
dac9734e 363 memset ((char *) type, 0, sizeof (struct type));
1ab3bf1b
JG
364 TYPE_OBJFILE (type) = objfile;
365 TYPE_TARGET_TYPE (type) = to_type;
366 TYPE_DOMAIN_TYPE (type) = domain;
367 TYPE_LENGTH (type) = 1; /* In practice, this is never needed. */
368 TYPE_CODE (type) = TYPE_CODE_MEMBER;
369}
370
371/* Smash TYPE to be a type of method of DOMAIN with type TO_TYPE.
372 METHOD just means `function that gets an extra "this" argument'.
373
c2e4669f 374 When "smashing" the type, we preserve the objfile that the
1ab3bf1b 375 old type pointed to, since we aren't changing where the type is actually
c2e4669f 376 allocated. */
1ab3bf1b
JG
377
378void
379smash_to_method_type (type, domain, to_type, args)
380 struct type *type;
381 struct type *domain;
382 struct type *to_type;
383 struct type **args;
384{
385 struct objfile *objfile;
386
387 objfile = TYPE_OBJFILE (type);
388
dac9734e 389 memset ((char *) type, 0, sizeof (struct type));
1ab3bf1b
JG
390 TYPE_OBJFILE (type) = objfile;
391 TYPE_TARGET_TYPE (type) = to_type;
392 TYPE_DOMAIN_TYPE (type) = domain;
393 TYPE_ARG_TYPES (type) = args;
394 TYPE_LENGTH (type) = 1; /* In practice, this is never needed. */
395 TYPE_CODE (type) = TYPE_CODE_METHOD;
396}
397
398/* Return a typename for a struct/union/enum type
399 without the tag qualifier. If the type has a NULL name,
400 NULL is returned. */
401
402char *
403type_name_no_tag (type)
404 register const struct type *type;
405{
406 register char *name;
407
408 if ((name = TYPE_NAME (type)) != NULL)
409 {
410 switch (TYPE_CODE (type))
411 {
412 case TYPE_CODE_STRUCT:
413 if(!strncmp (name, "struct ", 7))
414 {
415 name += 7;
416 }
417 break;
418 case TYPE_CODE_UNION:
419 if(!strncmp (name, "union ", 6))
420 {
421 name += 6;
422 }
423 break;
424 case TYPE_CODE_ENUM:
425 if(!strncmp (name, "enum ", 5))
426 {
427 name += 5;
428 }
429 break;
ac88ca20
JG
430 default: /* To avoid -Wall warnings */
431 break;
1ab3bf1b
JG
432 }
433 }
434 return (name);
435}
436
437/* Lookup a primitive type named NAME.
438 Return zero if NAME is not a primitive type.*/
439
440struct type *
441lookup_primitive_typename (name)
442 char *name;
443{
444 struct type ** const *p;
445
446 for (p = current_language -> la_builtin_type_vector; *p != NULL; p++)
447 {
448 if (!strcmp ((**p) -> name, name))
449 {
450 return (**p);
451 }
452 }
453 return (NULL);
454}
455
456/* Lookup a typedef or primitive type named NAME,
457 visible in lexical block BLOCK.
458 If NOERR is nonzero, return zero if NAME is not suitably defined. */
459
460struct type *
461lookup_typename (name, block, noerr)
462 char *name;
463 struct block *block;
464 int noerr;
465{
466 register struct symbol *sym;
467 register struct type *tmp;
468
469 sym = lookup_symbol (name, block, VAR_NAMESPACE, 0, (struct symtab **) NULL);
470 if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
471 {
472 tmp = lookup_primitive_typename (name);
473 if (tmp)
474 {
475 return (tmp);
476 }
477 else if (!tmp && noerr)
478 {
479 return (NULL);
480 }
481 else
482 {
483 error ("No type named %s.", name);
484 }
485 }
486 return (SYMBOL_TYPE (sym));
487}
488
489struct type *
490lookup_unsigned_typename (name)
491 char *name;
492{
493 char *uns = alloca (strlen (name) + 10);
494
495 strcpy (uns, "unsigned ");
496 strcpy (uns + 9, name);
497 return (lookup_typename (uns, (struct block *) NULL, 0));
498}
499
a252e715
PB
500struct type *
501lookup_signed_typename (name)
502 char *name;
503{
504 struct type *t;
505 char *uns = alloca (strlen (name) + 8);
506
507 strcpy (uns, "signed ");
508 strcpy (uns + 7, name);
509 t = lookup_typename (uns, (struct block *) NULL, 1);
510 /* If we don't find "signed FOO" just try again with plain "FOO". */
511 if (t != NULL)
512 return t;
513 return lookup_typename (name, (struct block *) NULL, 0);
514}
515
35fcebce
PB
516struct type *
517check_struct (type)
518 struct type *type;
519{
520 if (TYPE_CODE (type) != TYPE_CODE_STRUCT)
521 error ("This context has %s, not a struct or class.", TYPE_NAME (type));
522 return type;
523}
524
1ab3bf1b
JG
525/* Lookup a structure type named "struct NAME",
526 visible in lexical block BLOCK. */
527
528struct type *
529lookup_struct (name, block)
530 char *name;
531 struct block *block;
532{
533 register struct symbol *sym;
534
535 sym = lookup_symbol (name, block, STRUCT_NAMESPACE, 0,
536 (struct symtab **) NULL);
537
538 if (sym == NULL)
539 {
540 error ("No struct type named %s.", name);
541 }
35fcebce
PB
542 return check_struct (SYMBOL_TYPE (sym));
543}
544
545struct type *
546check_union (type)
547 struct type *type;
548{
549 if (TYPE_CODE (type) != TYPE_CODE_UNION)
550 error ("This context has %s, not a union.", TYPE_NAME (type));
551 return type;
1ab3bf1b
JG
552}
553
554/* Lookup a union type named "union NAME",
555 visible in lexical block BLOCK. */
556
557struct type *
558lookup_union (name, block)
559 char *name;
560 struct block *block;
561{
562 register struct symbol *sym;
563
564 sym = lookup_symbol (name, block, STRUCT_NAMESPACE, 0,
565 (struct symtab **) NULL);
566
567 if (sym == NULL)
568 {
569 error ("No union type named %s.", name);
570 }
35fcebce
PB
571 return check_union (SYMBOL_TYPE (sym));
572}
573
574struct type *
575check_enum (type)
576 struct type *type;
577{
578 if (TYPE_CODE (type) != TYPE_CODE_ENUM)
579 error ("This context has %s, not an enum.", TYPE_NAME (type));
580 return type;
1ab3bf1b
JG
581}
582
583/* Lookup an enum type named "enum NAME",
584 visible in lexical block BLOCK. */
585
586struct type *
587lookup_enum (name, block)
588 char *name;
589 struct block *block;
590{
591 register struct symbol *sym;
592
593 sym = lookup_symbol (name, block, STRUCT_NAMESPACE, 0,
594 (struct symtab **) NULL);
595 if (sym == NULL)
596 {
597 error ("No enum type named %s.", name);
598 }
35fcebce 599 return check_enum (SYMBOL_TYPE (sym));
1ab3bf1b
JG
600}
601
602/* Lookup a template type named "template NAME<TYPE>",
603 visible in lexical block BLOCK. */
604
605struct type *
606lookup_template_type (name, type, block)
607 char *name;
608 struct type *type;
609 struct block *block;
610{
611 struct symbol *sym;
612 char *nam = (char*) alloca(strlen(name) + strlen(type->name) + 4);
613 strcpy (nam, name);
614 strcat (nam, "<");
615 strcat (nam, type->name);
616 strcat (nam, " >"); /* FIXME, extra space still introduced in gcc? */
617
618 sym = lookup_symbol (nam, block, VAR_NAMESPACE, 0, (struct symtab **)NULL);
619
620 if (sym == NULL)
621 {
622 error ("No template type named %s.", name);
623 }
624 if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_STRUCT)
625 {
626 error ("This context has class, union or enum %s, not a struct.", name);
627 }
628 return (SYMBOL_TYPE (sym));
629}
630
631/* Given a type TYPE, lookup the type of the component of type named
632 NAME.
633 If NOERR is nonzero, return zero if NAME is not suitably defined. */
634
635struct type *
636lookup_struct_elt_type (type, name, noerr)
637 struct type *type;
638 char *name;
639 int noerr;
640{
641 int i;
642
5c5b5d4b
PB
643 if (TYPE_CODE (type) == TYPE_CODE_PTR ||
644 TYPE_CODE (type) == TYPE_CODE_REF)
645 type = TYPE_TARGET_TYPE (type);
646
1ab3bf1b
JG
647 if (TYPE_CODE (type) != TYPE_CODE_STRUCT &&
648 TYPE_CODE (type) != TYPE_CODE_UNION)
649 {
650 target_terminal_ours ();
651 fflush (stdout);
652 fprintf (stderr, "Type ");
653 type_print (type, "", stderr, -1);
654 error (" is not a structure or union type.");
655 }
656
657 check_stub_type (type);
658
659 for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
660 {
661 char *t_field_name = TYPE_FIELD_NAME (type, i);
662
663 if (t_field_name && !strcmp (t_field_name, name))
664 {
665 return TYPE_FIELD_TYPE (type, i);
666 }
667 }
668
669 /* OK, it's not in this class. Recursively check the baseclasses. */
670 for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
671 {
672 struct type *t;
673
674 t = lookup_struct_elt_type (TYPE_BASECLASS (type, i), name, 0);
675 if (t != NULL)
676 {
677 return t;
678 }
679 }
680
681 if (noerr)
682 {
683 return NULL;
684 }
685
686 target_terminal_ours ();
687 fflush (stdout);
688 fprintf (stderr, "Type ");
689 type_print (type, "", stderr, -1);
690 fprintf (stderr, " has no component named ");
691 fputs_filtered (name, stderr);
692 error (".");
693 return (struct type *)-1; /* For lint */
694}
695
696/* This function is really horrible, but to avoid it, there would need
697 to be more filling in of forward references. */
698
699void
700fill_in_vptr_fieldno (type)
701 struct type *type;
702{
703 if (TYPE_VPTR_FIELDNO (type) < 0)
704 {
705 int i;
706 for (i = 1; i < TYPE_N_BASECLASSES (type); i++)
707 {
708 fill_in_vptr_fieldno (TYPE_BASECLASS (type, i));
709 if (TYPE_VPTR_FIELDNO (TYPE_BASECLASS (type, i)) >= 0)
710 {
711 TYPE_VPTR_FIELDNO (type)
712 = TYPE_VPTR_FIELDNO (TYPE_BASECLASS (type, i));
713 TYPE_VPTR_BASETYPE (type)
714 = TYPE_VPTR_BASETYPE (TYPE_BASECLASS (type, i));
715 break;
716 }
717 }
718 }
719}
720
721/* Added by Bryan Boreham, Kewill, Sun Sep 17 18:07:17 1989.
722
723 If this is a stubbed struct (i.e. declared as struct foo *), see if
724 we can find a full definition in some other file. If so, copy this
725 definition, so we can use it in future. If not, set a flag so we
726 don't waste too much time in future. (FIXME, this doesn't seem
727 to be happening...)
728
729 This used to be coded as a macro, but I don't think it is called
730 often enough to merit such treatment.
731*/
732
733struct complaint stub_noname_complaint =
734 {"stub type has NULL name", 0, 0};
735
736void
737check_stub_type (type)
738 struct type *type;
739{
740 if (TYPE_FLAGS(type) & TYPE_FLAG_STUB)
741 {
742 char* name = type_name_no_tag (type);
743 struct symbol *sym;
744 if (name == NULL)
745 {
746 complain (&stub_noname_complaint, 0);
747 return;
748 }
749 sym = lookup_symbol (name, 0, STRUCT_NAMESPACE, 0,
750 (struct symtab **) NULL);
751 if (sym)
752 {
93fe4e33 753 memcpy ((char *)type, (char *)SYMBOL_TYPE(sym), sizeof (struct type));
1ab3bf1b
JG
754 }
755 }
756}
757
758/* Ugly hack to convert method stubs into method types.
759
760 He ain't kiddin'. This demangles the name of the method into a string
761 including argument types, parses out each argument type, generates
762 a string casting a zero to that type, evaluates the string, and stuffs
763 the resulting type into an argtype vector!!! Then it knows the type
764 of the whole function (including argument types for overloading),
765 which info used to be in the stab's but was removed to hack back
766 the space required for them. */
767
768void
769check_stub_method (type, i, j)
770 struct type *type;
771 int i;
772 int j;
773{
774 struct fn_field *f;
775 char *mangled_name = gdb_mangle_name (type, i, j);
8050a57b
FF
776 char *demangled_name = cplus_demangle (mangled_name,
777 DMGL_PARAMS | DMGL_ANSI);
1ab3bf1b
JG
778 char *argtypetext, *p;
779 int depth = 0, argcount = 1;
780 struct type **argtypes;
781 struct type *mtype;
782
783 if (demangled_name == NULL)
784 {
785 error ("Internal: Cannot demangle mangled name `%s'.", mangled_name);
786 }
787
788 /* Now, read in the parameters that define this type. */
789 argtypetext = strchr (demangled_name, '(') + 1;
790 p = argtypetext;
791 while (*p)
792 {
793 if (*p == '(')
794 {
795 depth += 1;
796 }
797 else if (*p == ')')
798 {
799 depth -= 1;
800 }
801 else if (*p == ',' && depth == 0)
802 {
803 argcount += 1;
804 }
805
806 p += 1;
807 }
808
809 /* We need two more slots: one for the THIS pointer, and one for the
810 NULL [...] or void [end of arglist]. */
811
812 argtypes = (struct type **)
dac9734e 813 TYPE_ALLOC (type, (argcount + 2) * sizeof (struct type *));
1ab3bf1b
JG
814 p = argtypetext;
815 argtypes[0] = lookup_pointer_type (type);
816 argcount = 1;
817
818 if (*p != ')') /* () means no args, skip while */
819 {
820 depth = 0;
821 while (*p)
822 {
823 if (depth <= 0 && (*p == ',' || *p == ')'))
824 {
825 argtypes[argcount] =
826 parse_and_eval_type (argtypetext, p - argtypetext);
827 argcount += 1;
828 argtypetext = p + 1;
829 }
830
831 if (*p == '(')
832 {
833 depth += 1;
834 }
835 else if (*p == ')')
836 {
837 depth -= 1;
838 }
839
840 p += 1;
841 }
842 }
843
c0f1085b 844 if (p[-2] != '.') /* Not '...' */
1ab3bf1b 845 {
c0f1085b 846 argtypes[argcount] = builtin_type_void; /* List terminator */
1ab3bf1b
JG
847 }
848 else
849 {
c0f1085b 850 argtypes[argcount] = NULL; /* Ellist terminator */
1ab3bf1b
JG
851 }
852
853 free (demangled_name);
854
855 f = TYPE_FN_FIELDLIST1 (type, i);
856 TYPE_FN_FIELD_PHYSNAME (f, j) = mangled_name;
857
858 /* Now update the old "stub" type into a real type. */
859 mtype = TYPE_FN_FIELD_TYPE (f, j);
860 TYPE_DOMAIN_TYPE (mtype) = type;
861 TYPE_ARG_TYPES (mtype) = argtypes;
862 TYPE_FLAGS (mtype) &= ~TYPE_FLAG_STUB;
863 TYPE_FN_FIELD_STUB (f, j) = 0;
864}
865
866const struct cplus_struct_type cplus_struct_default;
867
868void
869allocate_cplus_struct_type (type)
870 struct type *type;
871{
872 if (!HAVE_CPLUS_STRUCT (type))
873 {
874 TYPE_CPLUS_SPECIFIC (type) = (struct cplus_struct_type *)
dac9734e 875 TYPE_ALLOC (type, sizeof (struct cplus_struct_type));
1ab3bf1b
JG
876 *(TYPE_CPLUS_SPECIFIC(type)) = cplus_struct_default;
877 }
878}
879
50e0dc41
FF
880/* Helper function to initialize the standard scalar types.
881
882 If NAME is non-NULL and OBJFILE is non-NULL, then we make a copy
883 of the string pointed to by name in the type_obstack for that objfile,
884 and initialize the type name to that copy. There are places (mipsread.c
885 in particular, where init_type is called with a NULL value for NAME). */
1ab3bf1b
JG
886
887struct type *
888init_type (code, length, flags, name, objfile)
889 enum type_code code;
890 int length;
891 int flags;
892 char *name;
893 struct objfile *objfile;
894{
895 register struct type *type;
896
897 type = alloc_type (objfile);
898 TYPE_CODE (type) = code;
899 TYPE_LENGTH (type) = length;
900 TYPE_FLAGS (type) |= flags;
50e0dc41
FF
901 if ((name != NULL) && (objfile != NULL))
902 {
903 TYPE_NAME (type) =
904 obsavestring (name, strlen (name), &objfile -> type_obstack);
905 }
906 else
907 {
908 TYPE_NAME (type) = name;
909 }
1ab3bf1b
JG
910
911 /* C++ fancies. */
912
913 if (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
914 {
915 INIT_CPLUS_SPECIFIC (type);
916 }
917 return (type);
918}
919
920/* Look up a fundamental type for the specified objfile.
921 May need to construct such a type if this is the first use.
922
923 Some object file formats (ELF, COFF, etc) do not define fundamental
924 types such as "int" or "double". Others (stabs for example), do
925 define fundamental types.
926
927 For the formats which don't provide fundamental types, gdb can create
6b53bf34
FF
928 such types, using defaults reasonable for the current target machine.
929
930 FIXME: Some compilers distinguish explicitly signed integral types
931 (signed short, signed int, signed long) from "regular" integral types
932 (short, int, long) in the debugging information. There is some dis-
933 agreement as to how useful this feature is. In particular, gcc does
934 not support this. Also, only some debugging formats allow the
935 distinction to be passed on to a debugger. For now, we always just
936 use "short", "int", or "long" as the type name, for both the implicit
937 and explicitly signed types. This also makes life easier for the
938 gdb test suite since we don't have to account for the differences
939 in output depending upon what the compiler and debugging format
940 support. We will probably have to re-examine the issue when gdb
941 starts taking it's fundamental type information directly from the
942 debugging information supplied by the compiler. fnf@cygnus.com */
1ab3bf1b
JG
943
944struct type *
945lookup_fundamental_type (objfile, typeid)
946 struct objfile *objfile;
947 int typeid;
948{
949 register struct type *type = NULL;
950 register struct type **typep;
951 register int nbytes;
952
953 if (typeid < 0 || typeid >= FT_NUM_MEMBERS)
954 {
955 error ("internal error - invalid fundamental type id %d", typeid);
956 }
957 else
958 {
959 /* If this is the first time we */
960 if (objfile -> fundamental_types == NULL)
961 {
962 nbytes = FT_NUM_MEMBERS * sizeof (struct type *);
963 objfile -> fundamental_types = (struct type **)
964 obstack_alloc (&objfile -> type_obstack, nbytes);
dac9734e 965 memset ((char *) objfile -> fundamental_types, 0, nbytes);
1ab3bf1b
JG
966 }
967 typep = objfile -> fundamental_types + typeid;
968 if ((type = *typep) == NULL)
969 {
970 switch (typeid)
971 {
972 default:
973 error ("internal error: unhandled type id %d", typeid);
974 break;
975 case FT_VOID:
976 type = init_type (TYPE_CODE_VOID,
977 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
1867b3be 978 0,
1ab3bf1b
JG
979 "void", objfile);
980 break;
981 case FT_BOOLEAN:
982 type = init_type (TYPE_CODE_INT,
983 TARGET_INT_BIT / TARGET_CHAR_BIT,
1867b3be 984 TYPE_FLAG_UNSIGNED,
318bf84f 985 "boolean", objfile);
1ab3bf1b
JG
986 break;
987 case FT_STRING:
988 type = init_type (TYPE_CODE_PASCAL_ARRAY,
989 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
1867b3be 990 0,
318bf84f 991 "string", objfile);
1ab3bf1b
JG
992 break;
993 case FT_CHAR:
994 type = init_type (TYPE_CODE_INT,
995 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
1867b3be 996 0,
318bf84f 997 "char", objfile);
1ab3bf1b
JG
998 break;
999 case FT_SIGNED_CHAR:
1000 type = init_type (TYPE_CODE_INT,
1001 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
1867b3be 1002 TYPE_FLAG_SIGNED,
318bf84f 1003 "signed char", objfile);
1ab3bf1b
JG
1004 break;
1005 case FT_UNSIGNED_CHAR:
1006 type = init_type (TYPE_CODE_INT,
1007 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
1867b3be 1008 TYPE_FLAG_UNSIGNED,
318bf84f 1009 "unsigned char", objfile);
1ab3bf1b
JG
1010 break;
1011 case FT_SHORT:
1012 type = init_type (TYPE_CODE_INT,
1013 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
1867b3be 1014 0,
318bf84f 1015 "short", objfile);
1ab3bf1b
JG
1016 break;
1017 case FT_SIGNED_SHORT:
1018 type = init_type (TYPE_CODE_INT,
1019 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
1867b3be 1020 TYPE_FLAG_SIGNED,
6b53bf34 1021 "short", objfile); /* FIXME -fnf */
1ab3bf1b
JG
1022 break;
1023 case FT_UNSIGNED_SHORT:
1024 type = init_type (TYPE_CODE_INT,
1025 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
1867b3be 1026 TYPE_FLAG_UNSIGNED,
318bf84f 1027 "unsigned short", objfile);
1ab3bf1b
JG
1028 break;
1029 case FT_INTEGER:
1030 type = init_type (TYPE_CODE_INT,
1031 TARGET_INT_BIT / TARGET_CHAR_BIT,
1867b3be 1032 0,
318bf84f 1033 "int", objfile);
1ab3bf1b
JG
1034 break;
1035 case FT_SIGNED_INTEGER:
1036 type = init_type (TYPE_CODE_INT,
1037 TARGET_INT_BIT / TARGET_CHAR_BIT,
1867b3be 1038 TYPE_FLAG_SIGNED,
6b53bf34 1039 "int", objfile); /* FIXME -fnf */
1ab3bf1b
JG
1040 break;
1041 case FT_UNSIGNED_INTEGER:
1042 type = init_type (TYPE_CODE_INT,
1043 TARGET_INT_BIT / TARGET_CHAR_BIT,
1867b3be 1044 TYPE_FLAG_UNSIGNED,
318bf84f 1045 "unsigned int", objfile);
1ab3bf1b 1046 break;
4a11eef2
FF
1047 case FT_FIXED_DECIMAL:
1048 type = init_type (TYPE_CODE_INT,
1049 TARGET_INT_BIT / TARGET_CHAR_BIT,
1867b3be 1050 0,
4a11eef2
FF
1051 "fixed decimal", objfile);
1052 break;
1ab3bf1b
JG
1053 case FT_LONG:
1054 type = init_type (TYPE_CODE_INT,
1055 TARGET_LONG_BIT / TARGET_CHAR_BIT,
1867b3be 1056 0,
318bf84f 1057 "long", objfile);
1ab3bf1b
JG
1058 break;
1059 case FT_SIGNED_LONG:
1060 type = init_type (TYPE_CODE_INT,
1061 TARGET_LONG_BIT / TARGET_CHAR_BIT,
1867b3be 1062 TYPE_FLAG_SIGNED,
6b53bf34 1063 "long", objfile); /* FIXME -fnf */
1ab3bf1b
JG
1064 break;
1065 case FT_UNSIGNED_LONG:
1066 type = init_type (TYPE_CODE_INT,
1067 TARGET_LONG_BIT / TARGET_CHAR_BIT,
1867b3be 1068 TYPE_FLAG_UNSIGNED,
318bf84f 1069 "unsigned long", objfile);
1ab3bf1b
JG
1070 break;
1071 case FT_LONG_LONG:
1072 type = init_type (TYPE_CODE_INT,
1073 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
1867b3be 1074 0,
318bf84f 1075 "long long", objfile);
1ab3bf1b
JG
1076 break;
1077 case FT_SIGNED_LONG_LONG:
1078 type = init_type (TYPE_CODE_INT,
1079 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
1867b3be 1080 TYPE_FLAG_SIGNED,
318bf84f 1081 "signed long long", objfile);
1ab3bf1b
JG
1082 break;
1083 case FT_UNSIGNED_LONG_LONG:
1084 type = init_type (TYPE_CODE_INT,
1085 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
1867b3be 1086 TYPE_FLAG_UNSIGNED,
4a11eef2 1087 "unsigned long long", objfile);
1ab3bf1b
JG
1088 break;
1089 case FT_FLOAT:
1090 type = init_type (TYPE_CODE_FLT,
1091 TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
1867b3be 1092 0,
318bf84f 1093 "float", objfile);
1ab3bf1b
JG
1094 break;
1095 case FT_DBL_PREC_FLOAT:
1096 type = init_type (TYPE_CODE_FLT,
1097 TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
1867b3be 1098 0,
318bf84f 1099 "double", objfile);
1ab3bf1b 1100 break;
4a11eef2
FF
1101 case FT_FLOAT_DECIMAL:
1102 type = init_type (TYPE_CODE_FLT,
1103 TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
1867b3be 1104 0,
4a11eef2
FF
1105 "floating decimal", objfile);
1106 break;
1ab3bf1b
JG
1107 case FT_EXT_PREC_FLOAT:
1108 type = init_type (TYPE_CODE_FLT,
1109 TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
1867b3be 1110 0,
318bf84f 1111 "long double", objfile);
1ab3bf1b
JG
1112 break;
1113 case FT_COMPLEX:
1114 type = init_type (TYPE_CODE_FLT,
1115 TARGET_COMPLEX_BIT / TARGET_CHAR_BIT,
1867b3be 1116 0,
318bf84f 1117 "complex", objfile);
1ab3bf1b
JG
1118 break;
1119 case FT_DBL_PREC_COMPLEX:
1120 type = init_type (TYPE_CODE_FLT,
1121 TARGET_DOUBLE_COMPLEX_BIT / TARGET_CHAR_BIT,
1867b3be 1122 0,
318bf84f 1123 "double complex", objfile);
1ab3bf1b
JG
1124 break;
1125 case FT_EXT_PREC_COMPLEX:
1126 type = init_type (TYPE_CODE_FLT,
1127 TARGET_DOUBLE_COMPLEX_BIT / TARGET_CHAR_BIT,
1867b3be 1128 0,
4a11eef2 1129 "long double complex", objfile);
1ab3bf1b
JG
1130 break;
1131 }
1132 /* Install the newly created type in the objfile's fundamental_types
1133 vector. */
1134 *typep = type;
1135 }
1136 }
1137 return (type);
1138}
1139
0239d9b3
FF
1140#if MAINTENANCE_CMDS
1141
8050a57b
FF
1142static void
1143print_bit_vector (bits, nbits)
1144 B_TYPE *bits;
1145 int nbits;
0239d9b3 1146{
8050a57b
FF
1147 int bitno;
1148
1149 for (bitno = 0; bitno < nbits; bitno++)
0239d9b3 1150 {
8050a57b
FF
1151 if ((bitno % 8) == 0)
1152 {
1153 puts_filtered (" ");
1154 }
1155 if (B_TST (bits, bitno))
1156 {
1157 printf_filtered ("1");
1158 }
1159 else
1160 {
1161 printf_filtered ("0");
1162 }
0239d9b3 1163 }
8050a57b
FF
1164}
1165
c0f1085b
FF
1166/* The args list is a strange beast. It is either terminated by a NULL
1167 pointer for varargs functions, or by a pointer to a TYPE_CODE_VOID
1168 type for normal fixed argcount functions. (FIXME someday)
1169 Also note the first arg should be the "this" pointer, we may not want to
1170 include it since we may get into a infinitely recursive situation. */
1171
1172static void
1173print_arg_types (args, spaces)
1174 struct type **args;
1175 int spaces;
1176{
1177 if (args != NULL)
1178 {
1179 while (*args != NULL)
1180 {
1181 recursive_dump_type (*args, spaces + 2);
1182 if ((*args++) -> code == TYPE_CODE_VOID)
1183 {
1184 break;
1185 }
1186 }
1187 }
1188}
1189
1190static void
1191dump_fn_fieldlists (type, spaces)
1192 struct type *type;
1193 int spaces;
1194{
1195 int method_idx;
1196 int overload_idx;
1197 struct fn_field *f;
1198
1199 printfi_filtered (spaces, "fn_fieldlists 0x%x\n",
1200 TYPE_FN_FIELDLISTS (type));
1201 for (method_idx = 0; method_idx < TYPE_NFN_FIELDS (type); method_idx++)
1202 {
1203 f = TYPE_FN_FIELDLIST1 (type, method_idx);
1204 printfi_filtered (spaces + 2, "[%d] name '%s' (0x%x) length %d\n",
1205 method_idx,
1206 TYPE_FN_FIELDLIST_NAME (type, method_idx),
1207 TYPE_FN_FIELDLIST_NAME (type, method_idx),
1208 TYPE_FN_FIELDLIST_LENGTH (type, method_idx));
1209 for (overload_idx = 0;
1210 overload_idx < TYPE_FN_FIELDLIST_LENGTH (type, method_idx);
1211 overload_idx++)
1212 {
1213 printfi_filtered (spaces + 4, "[%d] physname '%s' (0x%x)\n",
1214 overload_idx,
1215 TYPE_FN_FIELD_PHYSNAME (f, overload_idx),
1216 TYPE_FN_FIELD_PHYSNAME (f, overload_idx));
1217 printfi_filtered (spaces + 8, "type 0x%x\n",
1218 TYPE_FN_FIELD_TYPE (f, overload_idx));
1219 recursive_dump_type (TYPE_FN_FIELD_TYPE (f, overload_idx),
1220 spaces + 8 + 2);
1221 printfi_filtered (spaces + 8, "args 0x%x\n",
1222 TYPE_FN_FIELD_ARGS (f, overload_idx));
1223 print_arg_types (TYPE_FN_FIELD_ARGS (f, overload_idx), spaces);
1224 printfi_filtered (spaces + 8, "fcontext 0x%x\n",
1225 TYPE_FN_FIELD_FCONTEXT (f, overload_idx));
1226 printfi_filtered (spaces + 8, "is_const %d\n",
1227 TYPE_FN_FIELD_CONST (f, overload_idx));
1228 printfi_filtered (spaces + 8, "is_volatile %d\n",
1229 TYPE_FN_FIELD_VOLATILE (f, overload_idx));
1230 printfi_filtered (spaces + 8, "is_private %d\n",
1231 TYPE_FN_FIELD_PRIVATE (f, overload_idx));
1232 printfi_filtered (spaces + 8, "is_protected %d\n",
1233 TYPE_FN_FIELD_PROTECTED (f, overload_idx));
1234 printfi_filtered (spaces + 8, "is_stub %d\n",
1235 TYPE_FN_FIELD_STUB (f, overload_idx));
d07734e3 1236 printfi_filtered (spaces + 8, "voffset %u\n",
c0f1085b
FF
1237 TYPE_FN_FIELD_VOFFSET (f, overload_idx));
1238 }
1239 }
1240}
1241
8050a57b
FF
1242static void
1243print_cplus_stuff (type, spaces)
1244 struct type *type;
1245 int spaces;
1246{
1247 int bitno;
1248
c0f1085b 1249 printfi_filtered (spaces, "n_baseclasses %d\n",
8050a57b 1250 TYPE_N_BASECLASSES (type));
c0f1085b
FF
1251 printfi_filtered (spaces, "nfn_fields %d\n",
1252 TYPE_NFN_FIELDS (type));
1253 printfi_filtered (spaces, "nfn_fields_total %d\n",
1254 TYPE_NFN_FIELDS_TOTAL (type));
8050a57b 1255 if (TYPE_N_BASECLASSES (type) > 0)
0239d9b3 1256 {
d07734e3 1257 printfi_filtered (spaces, "virtual_field_bits (%d bits at *0x%x)",
8050a57b
FF
1258 TYPE_N_BASECLASSES (type),
1259 TYPE_FIELD_VIRTUAL_BITS (type));
1260 print_bit_vector (TYPE_FIELD_VIRTUAL_BITS (type),
1261 TYPE_N_BASECLASSES (type));
1262 puts_filtered ("\n");
0239d9b3 1263 }
8050a57b 1264 if (TYPE_NFIELDS (type) > 0)
0239d9b3 1265 {
8050a57b
FF
1266 if (TYPE_FIELD_PRIVATE_BITS (type) != NULL)
1267 {
d07734e3 1268 printfi_filtered (spaces, "private_field_bits (%d bits at *0x%x)",
8050a57b
FF
1269 TYPE_NFIELDS (type),
1270 TYPE_FIELD_PRIVATE_BITS (type));
1271 print_bit_vector (TYPE_FIELD_PRIVATE_BITS (type),
1272 TYPE_NFIELDS (type));
1273 puts_filtered ("\n");
1274 }
1275 if (TYPE_FIELD_PROTECTED_BITS (type) != NULL)
0239d9b3 1276 {
d07734e3 1277 printfi_filtered (spaces, "protected_field_bits (%d bits at *0x%x)",
8050a57b
FF
1278 TYPE_NFIELDS (type),
1279 TYPE_FIELD_PROTECTED_BITS (type));
1280 print_bit_vector (TYPE_FIELD_PROTECTED_BITS (type),
1281 TYPE_NFIELDS (type));
1282 puts_filtered ("\n");
0239d9b3
FF
1283 }
1284 }
c0f1085b
FF
1285 if (TYPE_NFN_FIELDS (type) > 0)
1286 {
1287 dump_fn_fieldlists (type, spaces);
1288 }
8050a57b
FF
1289}
1290
1291void
1292recursive_dump_type (type, spaces)
1293 struct type *type;
1294 int spaces;
1295{
1296 int idx;
0239d9b3 1297
c0f1085b
FF
1298 printfi_filtered (spaces, "type node 0x%x\n", type);
1299 printfi_filtered (spaces, "name '%s' (0x%x)\n", TYPE_NAME (type),
8050a57b 1300 TYPE_NAME (type) ? TYPE_NAME (type) : "<NULL>");
c0f1085b 1301 printfi_filtered (spaces, "code 0x%x ", TYPE_CODE (type));
8050a57b 1302 switch (TYPE_CODE (type))
0239d9b3 1303 {
8050a57b 1304 case TYPE_CODE_UNDEF:
c0f1085b 1305 printf_filtered ("(TYPE_CODE_UNDEF)");
8050a57b
FF
1306 break;
1307 case TYPE_CODE_PTR:
c0f1085b 1308 printf_filtered ("(TYPE_CODE_PTR)");
8050a57b
FF
1309 break;
1310 case TYPE_CODE_ARRAY:
c0f1085b 1311 printf_filtered ("(TYPE_CODE_ARRAY)");
8050a57b
FF
1312 break;
1313 case TYPE_CODE_STRUCT:
c0f1085b 1314 printf_filtered ("(TYPE_CODE_STRUCT)");
8050a57b
FF
1315 break;
1316 case TYPE_CODE_UNION:
c0f1085b 1317 printf_filtered ("(TYPE_CODE_UNION)");
8050a57b
FF
1318 break;
1319 case TYPE_CODE_ENUM:
c0f1085b 1320 printf_filtered ("(TYPE_CODE_ENUM)");
8050a57b
FF
1321 break;
1322 case TYPE_CODE_FUNC:
c0f1085b 1323 printf_filtered ("(TYPE_CODE_FUNC)");
8050a57b
FF
1324 break;
1325 case TYPE_CODE_INT:
c0f1085b 1326 printf_filtered ("(TYPE_CODE_INT)");
8050a57b
FF
1327 break;
1328 case TYPE_CODE_FLT:
c0f1085b 1329 printf_filtered ("(TYPE_CODE_FLT)");
8050a57b
FF
1330 break;
1331 case TYPE_CODE_VOID:
c0f1085b 1332 printf_filtered ("(TYPE_CODE_VOID)");
8050a57b
FF
1333 break;
1334 case TYPE_CODE_SET:
c0f1085b 1335 printf_filtered ("(TYPE_CODE_SET)");
8050a57b
FF
1336 break;
1337 case TYPE_CODE_RANGE:
c0f1085b 1338 printf_filtered ("(TYPE_CODE_RANGE)");
8050a57b
FF
1339 break;
1340 case TYPE_CODE_PASCAL_ARRAY:
c0f1085b 1341 printf_filtered ("(TYPE_CODE_PASCAL_ARRAY)");
8050a57b
FF
1342 break;
1343 case TYPE_CODE_ERROR:
c0f1085b 1344 printf_filtered ("(TYPE_CODE_ERROR)");
8050a57b
FF
1345 break;
1346 case TYPE_CODE_MEMBER:
c0f1085b 1347 printf_filtered ("(TYPE_CODE_MEMBER)");
8050a57b
FF
1348 break;
1349 case TYPE_CODE_METHOD:
c0f1085b 1350 printf_filtered ("(TYPE_CODE_METHOD)");
8050a57b
FF
1351 break;
1352 case TYPE_CODE_REF:
c0f1085b 1353 printf_filtered ("(TYPE_CODE_REF)");
8050a57b
FF
1354 break;
1355 case TYPE_CODE_CHAR:
c0f1085b 1356 printf_filtered ("(TYPE_CODE_CHAR)");
8050a57b
FF
1357 break;
1358 case TYPE_CODE_BOOL:
c0f1085b 1359 printf_filtered ("(TYPE_CODE_BOOL)");
8050a57b
FF
1360 break;
1361 default:
c0f1085b 1362 printf_filtered ("(UNKNOWN TYPE CODE)");
8050a57b 1363 break;
0239d9b3 1364 }
8050a57b 1365 puts_filtered ("\n");
c0f1085b
FF
1366 printfi_filtered (spaces, "length %d\n", TYPE_LENGTH (type));
1367 printfi_filtered (spaces, "objfile 0x%x\n", TYPE_OBJFILE (type));
1368 printfi_filtered (spaces, "target_type 0x%x\n", TYPE_TARGET_TYPE (type));
8050a57b
FF
1369 if (TYPE_TARGET_TYPE (type) != NULL)
1370 {
1371 recursive_dump_type (TYPE_TARGET_TYPE (type), spaces + 2);
1372 }
c0f1085b 1373 printfi_filtered (spaces, "pointer_type 0x%x\n",
8050a57b 1374 TYPE_POINTER_TYPE (type));
c0f1085b 1375 printfi_filtered (spaces, "reference_type 0x%x\n",
8050a57b 1376 TYPE_REFERENCE_TYPE (type));
c0f1085b 1377 printfi_filtered (spaces, "function_type 0x%x\n",
8050a57b 1378 TYPE_FUNCTION_TYPE (type));
c0f1085b 1379 printfi_filtered (spaces, "flags 0x%x", TYPE_FLAGS (type));
8050a57b
FF
1380 if (TYPE_FLAGS (type) & TYPE_FLAG_UNSIGNED)
1381 {
1382 puts_filtered (" TYPE_FLAG_UNSIGNED");
1383 }
1384 if (TYPE_FLAGS (type) & TYPE_FLAG_SIGNED)
1385 {
1386 puts_filtered (" TYPE_FLAG_SIGNED");
1387 }
1388 if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
1389 {
1390 puts_filtered (" TYPE_FLAG_STUB");
1391 }
1392 puts_filtered ("\n");
c0f1085b 1393 printfi_filtered (spaces, "nfields %d 0x%x\n", TYPE_NFIELDS (type),
8050a57b
FF
1394 TYPE_FIELDS (type));
1395 for (idx = 0; idx < TYPE_NFIELDS (type); idx++)
1396 {
1397 printfi_filtered (spaces + 2,
c0f1085b 1398 "[%d] bitpos %d bitsize %d type 0x%x name '%s' (0x%x)\n",
8050a57b
FF
1399 idx, TYPE_FIELD_BITPOS (type, idx),
1400 TYPE_FIELD_BITSIZE (type, idx),
1401 TYPE_FIELD_TYPE (type, idx),
1402 TYPE_FIELD_NAME (type, idx),
1403 TYPE_FIELD_NAME (type, idx) != NULL
1404 ? TYPE_FIELD_NAME (type, idx)
1405 : "<NULL>");
1406 if (TYPE_FIELD_TYPE (type, idx) != NULL)
1407 {
1408 recursive_dump_type (TYPE_FIELD_TYPE (type, idx), spaces + 4);
1409 }
1410 }
c0f1085b 1411 printfi_filtered (spaces, "vptr_basetype 0x%x\n",
8050a57b
FF
1412 TYPE_VPTR_BASETYPE (type));
1413 if (TYPE_VPTR_BASETYPE (type) != NULL)
1414 {
1415 recursive_dump_type (TYPE_VPTR_BASETYPE (type), spaces + 2);
1416 }
c0f1085b 1417 printfi_filtered (spaces, "vptr_fieldno %d\n", TYPE_VPTR_FIELDNO (type));
8050a57b 1418 switch (TYPE_CODE (type))
0239d9b3
FF
1419 {
1420 case TYPE_CODE_METHOD:
1421 case TYPE_CODE_FUNC:
c0f1085b
FF
1422 printfi_filtered (spaces, "arg_types 0x%x\n", TYPE_ARG_TYPES (type));
1423 print_arg_types (TYPE_ARG_TYPES (type), spaces);
0239d9b3
FF
1424 break;
1425
1426 case TYPE_CODE_STRUCT:
d07734e3
FF
1427 printfi_filtered (spaces, "cplus_stuff 0x%x\n",
1428 TYPE_CPLUS_SPECIFIC (type));
8050a57b 1429 print_cplus_stuff (type, spaces);
0239d9b3 1430 break;
d07734e3
FF
1431
1432 default:
1433 /* We have to pick one of the union types to be able print and test
1434 the value. Pick cplus_struct_type, even though we know it isn't
1435 any particular one. */
1436 printfi_filtered (spaces, "type_specific 0x%x",
1437 TYPE_CPLUS_SPECIFIC (type));
1438 if (TYPE_CPLUS_SPECIFIC (type) != NULL)
1439 {
1440 printf_filtered (" (unknown data form)");
1441 }
1442 printf_filtered ("\n");
1443 break;
1444
0239d9b3
FF
1445 }
1446}
1447
1448#endif /* MAINTENANCE_CMDS */
This page took 0.102795 seconds and 4 git commands to generate.