* inferior.h: Eliminate CANNOT_EXECUTE_STACK in favor of
[deliverable/binutils-gdb.git] / gdb / valprint.c
CommitLineData
bd5635a1
RP
1/* Print values for GNU debugger gdb.
2 Copyright (C) 1986, 1988, 1989 Free Software Foundation, Inc.
3
4This file is part of GDB.
5
36b9d39c 6This program is free software; you can redistribute it and/or modify
bd5635a1 7it under the terms of the GNU General Public License as published by
36b9d39c
JG
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
bd5635a1 10
36b9d39c 11This program is distributed in the hope that it will be useful,
bd5635a1
RP
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
36b9d39c
JG
17along with this program; if not, write to the Free Software
18Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
bd5635a1
RP
19
20#include <stdio.h>
21#include <string.h>
22#include "defs.h"
23#include "param.h"
24#include "symtab.h"
25#include "value.h"
26#include "gdbcore.h"
27#include "gdbcmd.h"
28#include "target.h"
29#include "obstack.h"
30
31#include <errno.h>
32extern int sys_nerr;
33extern char *sys_errlist[];
34
35extern void print_scalar_formatted(); /* printcmd.c */
36extern void print_address_demangle(); /* printcmd.c */
37extern int demangle; /* whether to print C++ syms raw or source-form */
38
39/* Maximum number of chars to print for a string pointer value
40 or vector contents, or UINT_MAX for no limit. */
41
42static unsigned int print_max;
43
44static void type_print_varspec_suffix ();
45static void type_print_varspec_prefix ();
46static void type_print_base ();
47static void type_print_method_args ();
48
49/* Default input and output radixes, and output format letter. */
50
51unsigned input_radix = 10;
52unsigned output_radix = 10;
53int output_format = 0;
54
55
56char **unsigned_type_table;
57char **signed_type_table;
58char **float_type_table;
59
60
61/* Print repeat counts if there are more than this
62 many repetitions of an element in an array. */
63#define REPEAT_COUNT_THRESHOLD 10
0dce3774
JK
64
65/* Define a mess of print controls. */
66
67int prettyprint; /* Controls pretty printing of structures */
68int vtblprint; /* Controls printing of vtbl's */
69int unionprint; /* Controls printing of nested unions. */
70int arrayprint; /* Controls pretty printing of arrays. */
71int addressprint; /* Controls pretty printing of addresses. */
72int objectprint; /* Controls looking up an object's derived type
73 using what we find in its vtables. */
74
75struct obstack dont_print_obstack;
76
77static void cplus_val_print ();
bd5635a1
RP
78\f
79/* Print the character string STRING, printing at most LENGTH characters.
80 Printing stops early if the number hits print_max; repeat counts
81 are printed as appropriate. Print ellipses at the end if we
82 had to stop before printing LENGTH characters, or if FORCE_ELLIPSES. */
83
84void
85print_string (stream, string, length, force_ellipses)
86 FILE *stream;
87 char *string;
88 unsigned int length;
89 int force_ellipses;
90{
91 register unsigned int i;
92 unsigned int things_printed = 0;
93 int in_quotes = 0;
94 int need_comma = 0;
95 extern int inspect_it;
96
97 if (length == 0)
98 {
99 fputs_filtered ("\"\"", stdout);
100 return;
101 }
102
103 for (i = 0; i < length && things_printed < print_max; ++i)
104 {
105 /* Position of the character we are examining
106 to see whether it is repeated. */
107 unsigned int rep1;
108 /* Number of repetitions we have detected so far. */
109 unsigned int reps;
110
111 QUIT;
112
113 if (need_comma)
114 {
115 fputs_filtered (", ", stream);
116 need_comma = 0;
117 }
118
119 rep1 = i + 1;
120 reps = 1;
121 while (rep1 < length && string[rep1] == string[i])
122 {
123 ++rep1;
124 ++reps;
125 }
126
127 if (reps > REPEAT_COUNT_THRESHOLD)
128 {
129 if (in_quotes)
130 {
131 if (inspect_it)
132 fputs_filtered ("\\\", ", stream);
133 else
134 fputs_filtered ("\", ", stream);
135 in_quotes = 0;
136 }
137 fputs_filtered ("'", stream);
138 printchar (string[i], stream, '\'');
139 fprintf_filtered (stream, "' <repeats %u times>", reps);
140 i = rep1 - 1;
141 things_printed += REPEAT_COUNT_THRESHOLD;
142 need_comma = 1;
143 }
144 else
145 {
146 if (!in_quotes)
147 {
148 if (inspect_it)
149 fputs_filtered ("\\\"", stream);
150 else
151 fputs_filtered ("\"", stream);
152 in_quotes = 1;
153 }
154 printchar (string[i], stream, '"');
155 ++things_printed;
156 }
157 }
158
159 /* Terminate the quotes if necessary. */
160 if (in_quotes)
161 {
162 if (inspect_it)
163 fputs_filtered ("\\\"", stream);
164 else
165 fputs_filtered ("\"", stream);
166 }
167
168 if (force_ellipses || i < length)
169 fputs_filtered ("...", stream);
170}
171
172/* Print a floating point value of type TYPE, pointed to in GDB by VALADDR,
173 on STREAM. */
174
175void
176print_floating (valaddr, type, stream)
177 char *valaddr;
178 struct type *type;
179 FILE *stream;
180{
181 double doub;
182 int inv;
183 unsigned len = TYPE_LENGTH (type);
184
185#if defined (IEEE_FLOAT)
186
187 /* Check for NaN's. Note that this code does not depend on us being
188 on an IEEE conforming system. It only depends on the target
189 machine using IEEE representation. This means (a)
190 cross-debugging works right, and (2) IEEE_FLOAT can (and should)
191 be defined for systems like the 68881, which uses IEEE
192 representation, but is not IEEE conforming. */
193
194 {
195 long low, high;
196 /* Is the sign bit 0? */
197 int nonnegative;
198 /* Is it is a NaN (i.e. the exponent is all ones and
199 the fraction is nonzero)? */
200 int is_nan;
201
202 if (len == sizeof (float))
203 {
204 /* It's single precision. */
205 bcopy (valaddr, &low, sizeof (low));
206 /* target -> host. */
207 SWAP_TARGET_AND_HOST (&low, sizeof (float));
208 nonnegative = low >= 0;
209 is_nan = ((((low >> 23) & 0xFF) == 0xFF)
210 && 0 != (low & 0x7FFFFF));
211 low &= 0x7fffff;
212 high = 0;
213 }
214 else
215 {
216 /* It's double precision. Get the high and low words. */
217
218#if TARGET_BYTE_ORDER == BIG_ENDIAN
219 bcopy (valaddr+4, &low, sizeof (low));
220 bcopy (valaddr+0, &high, sizeof (high));
221#else
222 bcopy (valaddr+0, &low, sizeof (low));
223 bcopy (valaddr+4, &high, sizeof (high));
224#endif
225 SWAP_TARGET_AND_HOST (&low, sizeof (low));
226 SWAP_TARGET_AND_HOST (&high, sizeof (high));
227 nonnegative = high >= 0;
228 is_nan = (((high >> 20) & 0x7ff) == 0x7ff
229 && ! ((((high & 0xfffff) == 0)) && (low == 0)));
230 high &= 0xfffff;
231 }
232
233 if (is_nan)
234 {
235 /* The meaning of the sign and fraction is not defined by IEEE.
236 But the user might know what they mean. For example, they
237 (in an implementation-defined manner) distinguish between
238 signaling and quiet NaN's. */
239 if (high)
240 fprintf_filtered (stream, "-NaN(0x%lx%.8lx)" + nonnegative,
241 high, low);
242 else
243 fprintf_filtered (stream, "-NaN(0x%lx)" + nonnegative, low);
244 return;
245 }
246 }
247#endif /* IEEE_FLOAT. */
248
249 doub = unpack_double (type, valaddr, &inv);
250 if (inv)
251 fprintf_filtered (stream, "<invalid float value>");
252 else
253 fprintf_filtered (stream, len <= sizeof(float) ? "%.6g" : "%.17g", doub);
254}
255
256/* VALADDR points to an integer of LEN bytes. Print it in hex on stream. */
257static void
258print_hex_chars (stream, valaddr, len)
259 FILE *stream;
260 unsigned char *valaddr;
261 unsigned len;
262{
263 unsigned char *p;
264
265 fprintf_filtered (stream, "0x");
266#if TARGET_BYTE_ORDER == BIG_ENDIAN
267 for (p = valaddr;
268 p < valaddr + len;
269 p++)
270#else /* Little endian. */
271 for (p = valaddr + len - 1;
272 p >= valaddr;
273 p--)
274#endif
275 {
276 fprintf_filtered (stream, "%02x", *p);
277 }
278}
279\f
280/* Print the value VAL in C-ish syntax on stream STREAM.
281 FORMAT is a format-letter, or 0 for print in natural format of data type.
282 If the object printed is a string pointer, returns
283 the number of string bytes printed. */
284
285int
286value_print (val, stream, format, pretty)
287 value val;
288 FILE *stream;
289 char format;
290 enum val_prettyprint pretty;
291{
292 register unsigned int i, n, typelen;
293
294 if (val == 0)
295 {
296 printf_filtered ("<address of value unknown>");
297 return 0;
298 }
299 if (VALUE_OPTIMIZED_OUT (val))
300 {
301 printf_filtered ("<value optimized out>");
302 return 0;
303 }
aec4cb91 304
bd5635a1
RP
305 /* A "repeated" value really contains several values in a row.
306 They are made by the @ operator.
307 Print such values as if they were arrays. */
308
309 else if (VALUE_REPEATED (val))
310 {
311 n = VALUE_REPETITIONS (val);
312 typelen = TYPE_LENGTH (VALUE_TYPE (val));
313 fprintf_filtered (stream, "{");
314 /* Print arrays of characters using string syntax. */
315 if (typelen == 1 && TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_INT
316 && format == 0)
317 print_string (stream, VALUE_CONTENTS (val), n, 0);
318 else
319 {
320 unsigned int things_printed = 0;
321
322 for (i = 0; i < n && things_printed < print_max; i++)
323 {
324 /* Position of the array element we are examining to see
325 whether it is repeated. */
326 unsigned int rep1;
327 /* Number of repetitions we have detected so far. */
328 unsigned int reps;
329
330 if (i != 0)
331 fprintf_filtered (stream, ", ");
332 wrap_here ("");
333
334 rep1 = i + 1;
335 reps = 1;
336 while (rep1 < n
337 && !bcmp (VALUE_CONTENTS (val) + typelen * i,
338 VALUE_CONTENTS (val) + typelen * rep1, typelen))
339 {
340 ++reps;
341 ++rep1;
342 }
343
344 if (reps > REPEAT_COUNT_THRESHOLD)
345 {
346 val_print (VALUE_TYPE (val),
347 VALUE_CONTENTS (val) + typelen * i,
348 VALUE_ADDRESS (val) + typelen * i,
349 stream, format, 1, 0, pretty);
350 fprintf (stream, " <repeats %u times>", reps);
351 i = rep1 - 1;
352 things_printed += REPEAT_COUNT_THRESHOLD;
353 }
354 else
355 {
356 val_print (VALUE_TYPE (val),
357 VALUE_CONTENTS (val) + typelen * i,
358 VALUE_ADDRESS (val) + typelen * i,
359 stream, format, 1, 0, pretty);
360 things_printed++;
361 }
362 }
363 if (i < n)
364 fprintf_filtered (stream, "...");
365 }
366 fprintf_filtered (stream, "}");
367 return n * typelen;
368 }
369 else
370 {
0dce3774
JK
371 struct type *type = VALUE_TYPE (val);
372
bd5635a1
RP
373 /* If it is a pointer, indicate what it points to.
374
375 Print type also if it is a reference.
376
377 C++: if it is a member pointer, we will take care
378 of that when we print it. */
0dce3774
JK
379 if (TYPE_CODE (type) == TYPE_CODE_PTR
380 || TYPE_CODE (type) == TYPE_CODE_REF)
bd5635a1
RP
381 {
382 /* Hack: remove (char *) for char strings. Their
383 type is indicated by the quoted string anyway. */
0dce3774
JK
384 if (TYPE_CODE (type) == TYPE_CODE_PTR
385 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) == sizeof(char)
386 && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_INT
387 && !TYPE_UNSIGNED (TYPE_TARGET_TYPE (type)))
bd5635a1
RP
388 {
389 /* Print nothing */
390 }
391 else
392 {
393 fprintf_filtered (stream, "(");
0dce3774 394 type_print (type, "", stream, -1);
bd5635a1
RP
395 fprintf_filtered (stream, ") ");
396 }
397 }
0dce3774 398 return val_print (type, VALUE_CONTENTS (val),
bd5635a1
RP
399 VALUE_ADDRESS (val), stream, format, 1, 0, pretty);
400 }
401}
402
403/* Return truth value for assertion that TYPE is of the type
404 "pointer to virtual function". */
405static int
406is_vtbl_ptr_type(type)
407 struct type *type;
408{
409 char *typename = TYPE_NAME(type);
410 static const char vtbl_ptr_name[] =
411 { CPLUS_MARKER,'v','t','b','l','_','p','t','r','_','t','y','p','e' };
412
413 return (typename != NULL && !strcmp(typename, vtbl_ptr_name));
414}
415
416/* Return truth value for the assertion that TYPE is of the type
417 "pointer to virtual function table". */
418static int
419is_vtbl_member(type)
420 struct type *type;
421{
0dce3774
JK
422 if (TYPE_CODE (type) == TYPE_CODE_PTR)
423 type = TYPE_TARGET_TYPE (type);
424 else
425 return 0;
426
427 if (TYPE_CODE (type) == TYPE_CODE_ARRAY
428 && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT)
bd5635a1 429 /* Virtual functions tables are full of pointers to virtual functions. */
0dce3774 430 return is_vtbl_ptr_type (TYPE_TARGET_TYPE (type));
bd5635a1
RP
431 return 0;
432}
433\f
bd5635a1
RP
434/* Mutually recursive subroutines of cplus_val_print and val_print to print out
435 a structure's fields: val_print_fields and cplus_val_print.
436
437 TYPE, VALADDR, STREAM, RECURSE, and PRETTY have the
438 same meanings as in cplus_val_print and val_print.
439
440 DONT_PRINT is an array of baseclass types that we
441 should not print, or zero if called from top level. */
442static void
443val_print_fields (type, valaddr, stream, format, recurse, pretty, dont_print)
444 struct type *type;
445 char *valaddr;
446 FILE *stream;
447 char format;
448 int recurse;
449 enum val_prettyprint pretty;
450 struct type **dont_print;
451{
452 int i, len, n_baseclasses;
453
454 fprintf_filtered (stream, "{");
455 len = TYPE_NFIELDS (type);
456 n_baseclasses = TYPE_N_BASECLASSES (type);
457
458 /* Print out baseclasses such that we don't print
459 duplicates of virtual baseclasses. */
460 if (n_baseclasses > 0)
461 cplus_val_print (type, valaddr, stream, format, recurse+1, pretty, dont_print);
462
463 if (!len && n_baseclasses == 1)
464 fprintf_filtered (stream, "<No data fields>");
465 else
466 {
467 extern int inspect_it;
468 int fields_seen = 0;
469
470 for (i = n_baseclasses; i < len; i++)
471 {
472 /* Check if static field */
473 if (TYPE_FIELD_STATIC (type, i))
474 continue;
475 if (fields_seen)
476 fprintf_filtered (stream, ", ");
477 else if (n_baseclasses > 0)
478 {
479 fprintf_filtered (stream, "\n");
480 print_spaces_filtered (2 + 2 * recurse, stream);
481 fputs_filtered ("members of ", stream);
482 fputs_filtered (type_name_no_tag (type), stream);
483 fputs_filtered (": ", stream);
484 }
485 fields_seen = 1;
486
487 if (pretty)
488 {
489 fprintf_filtered (stream, "\n");
490 print_spaces_filtered (2 + 2 * recurse, stream);
491 }
492 else
493 {
494 wrap_here (n_spaces (2 + 2 * recurse));
495 }
496 if (inspect_it)
497 {
498 if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
499 fputs_filtered ("\"( ptr \"", stream);
500 else
501 fputs_filtered ("\"( nodef \"", stream);
502 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
503 fputs_filtered ("\" \"", stream);
504 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
505 fputs_filtered ("\") \"", stream);
506 }
507 else
508 {
509 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
510 fputs_filtered (" = ", stream);
511 }
512 if (TYPE_FIELD_PACKED (type, i))
513 {
f266e564 514 value v;
bd5635a1 515
f266e564
JK
516 /* Bitfields require special handling, especially due to byte
517 order problems. */
518 v = value_from_long (TYPE_FIELD_TYPE (type, i),
519 unpack_field_as_long (type, valaddr, i));
bd5635a1 520
f266e564 521 val_print (TYPE_FIELD_TYPE (type, i), VALUE_CONTENTS (v), 0,
bd5635a1
RP
522 stream, format, 0, recurse + 1, pretty);
523 }
524 else
525 {
526 val_print (TYPE_FIELD_TYPE (type, i),
527 valaddr + TYPE_FIELD_BITPOS (type, i) / 8,
528 0, stream, format, 0, recurse + 1, pretty);
529 }
530 }
531 if (pretty)
532 {
533 fprintf_filtered (stream, "\n");
534 print_spaces_filtered (2 * recurse, stream);
535 }
536 }
537 fprintf_filtered (stream, "}");
538}
539
540/* Special val_print routine to avoid printing multiple copies of virtual
541 baseclasses. */
542
543static void
544cplus_val_print (type, valaddr, stream, format, recurse, pretty, dont_print)
545 struct type *type;
546 char *valaddr;
547 FILE *stream;
548 char format;
549 int recurse;
550 enum val_prettyprint pretty;
551 struct type **dont_print;
552{
553 struct obstack tmp_obstack;
554 struct type **last_dont_print
555 = (struct type **)obstack_next_free (&dont_print_obstack);
556 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
557
558 if (dont_print == 0)
559 {
560 /* If we're at top level, carve out a completely fresh
561 chunk of the obstack and use that until this particular
562 invocation returns. */
563 tmp_obstack = dont_print_obstack;
564 /* Bump up the high-water mark. Now alpha is omega. */
565 obstack_finish (&dont_print_obstack);
566 }
567
568 for (i = 0; i < n_baseclasses; i++)
569 {
570 char *baddr;
0dce3774 571 int err;
bd5635a1
RP
572
573 if (BASETYPE_VIA_VIRTUAL (type, i))
574 {
575 struct type **first_dont_print
576 = (struct type **)obstack_base (&dont_print_obstack);
577
578 int j = (struct type **)obstack_next_free (&dont_print_obstack)
579 - first_dont_print;
580
581 while (--j >= 0)
582 if (TYPE_BASECLASS (type, i) == first_dont_print[j])
583 goto flush_it;
584
585 obstack_ptr_grow (&dont_print_obstack, TYPE_BASECLASS (type, i));
586 }
587
0dce3774
JK
588 baddr = baseclass_addr (type, i, valaddr, 0, &err);
589 if (err == 0 && baddr == 0)
bd5635a1
RP
590 error ("could not find virtual baseclass `%s'\n",
591 type_name_no_tag (TYPE_BASECLASS (type, i)));
592
593 fprintf_filtered (stream, "\n");
594 if (pretty)
595 print_spaces_filtered (2 + 2 * recurse, stream);
596 fputs_filtered ("<", stream);
597 fputs_filtered (type_name_no_tag (TYPE_BASECLASS (type, i)), stream);
598 fputs_filtered ("> = ", stream);
0dce3774
JK
599 if (err != 0)
600 fprintf_filtered (stream, "<invalid address 0x%x>", baddr);
601 else
602 val_print_fields (TYPE_BASECLASS (type, i), baddr, stream, format,
603 recurse, pretty,
604 (struct type **)obstack_base (&dont_print_obstack));
bd5635a1
RP
605 flush_it:
606 ;
607 }
608
609 if (dont_print == 0)
610 {
611 /* Free the space used to deal with the printing
612 of this type from top level. */
613 obstack_free (&dont_print_obstack, last_dont_print);
614 /* Reset watermark so that we can continue protecting
615 ourselves from whatever we were protecting ourselves. */
616 dont_print_obstack = tmp_obstack;
617 }
618}
619
620/* Print data of type TYPE located at VALADDR (within GDB),
621 which came from the inferior at address ADDRESS,
622 onto stdio stream STREAM according to FORMAT
623 (a letter or 0 for natural format). The data at VALADDR
624 is in target byte order.
625
626 If the data are a string pointer, returns the number of
627 sting characters printed.
628
629 if DEREF_REF is nonzero, then dereference references,
630 otherwise just print them like pointers.
631
632 The PRETTY parameter controls prettyprinting. */
633
634int
635val_print (type, valaddr, address, stream, format,
636 deref_ref, recurse, pretty)
637 struct type *type;
638 char *valaddr;
639 CORE_ADDR address;
640 FILE *stream;
641 char format;
642 int deref_ref;
643 int recurse;
644 enum val_prettyprint pretty;
645{
646 register unsigned int i;
647 unsigned len;
648 struct type *elttype;
649 unsigned eltlen;
650 LONGEST val;
651 unsigned char c;
652
653 if (pretty == Val_pretty_default)
654 {
655 pretty = prettyprint ? Val_prettyprint : Val_no_prettyprint;
656 }
657
658 QUIT;
659
660 check_stub_type (type);
661
662 if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
663 {
664 fprintf_filtered (stream, "<unknown struct>");
665 fflush (stream);
666 return 0;
667 }
668
669 switch (TYPE_CODE (type))
670 {
671 case TYPE_CODE_ARRAY:
e1ce8aa5
JK
672 /* FIXME: TYPE_LENGTH (type) is unsigned and therefore always
673 0. Is "> 0" meant? I'm not sure what an "array of
674 unspecified length" (mentioned in the comment for the else-part
675 of this if) is. */
bd5635a1
RP
676 if (TYPE_LENGTH (type) >= 0
677 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0)
678 {
679 elttype = TYPE_TARGET_TYPE (type);
680 eltlen = TYPE_LENGTH (elttype);
681 len = TYPE_LENGTH (type) / eltlen;
682 if (arrayprint)
683 print_spaces_filtered (2 + 2 * recurse, stream);
684 fprintf_filtered (stream, "{");
685 /* For an array of chars, print with string syntax. */
686 if (eltlen == 1 && TYPE_CODE (elttype) == TYPE_CODE_INT
687 && (format == 0 || format == 's') )
688 print_string (stream, valaddr, len, 0);
689 else
690 {
691 unsigned int things_printed = 0;
692
0dce3774
JK
693 /* If this is a virtual function table, print the 0th
694 entry specially, and the rest of the members normally. */
695 if (is_vtbl_ptr_type (elttype))
696 {
697 fprintf_filtered (stream, "%d vtable entries", len-1);
698 i = 1;
699 }
700 else
701 i = 0;
702
703 for (; i < len && things_printed < print_max; i++)
bd5635a1
RP
704 {
705 /* Position of the array element we are examining to see
706 whether it is repeated. */
707 unsigned int rep1;
708 /* Number of repetitions we have detected so far. */
709 unsigned int reps;
710
711 if (i != 0)
712 if (arrayprint)
713 {
714 fprintf_filtered (stream, ",\n");
715 print_spaces_filtered (2 + 2 * recurse, stream);
716 }
717 else
718 fprintf_filtered (stream, ", ");
719 wrap_here (n_spaces (2 + 2 * recurse));
720
721 rep1 = i + 1;
722 reps = 1;
723 while (rep1 < len
724 && !bcmp (valaddr + i * eltlen,
725 valaddr + rep1 * eltlen, eltlen))
726 {
727 ++reps;
728 ++rep1;
729 }
730
731 if (reps > REPEAT_COUNT_THRESHOLD)
732 {
733 val_print (elttype, valaddr + i * eltlen,
734 0, stream, format, deref_ref,
735 recurse + 1, pretty);
736 fprintf_filtered (stream, " <repeats %u times>", reps);
737 i = rep1 - 1;
738 things_printed += REPEAT_COUNT_THRESHOLD;
739 }
740 else
741 {
742 val_print (elttype, valaddr + i * eltlen,
743 0, stream, format, deref_ref,
744 recurse + 1, pretty);
745 things_printed++;
746 }
747 }
748 if (i < len)
749 fprintf_filtered (stream, "...");
750 }
751 fprintf_filtered (stream, "}");
752 break;
753 }
754 /* Array of unspecified length: treat like pointer to first elt. */
755 valaddr = (char *) &address;
756
757 case TYPE_CODE_PTR:
758 if (format && format != 's')
759 {
760 print_scalar_formatted (valaddr, type, format, 0, stream);
761 break;
762 }
763 if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD)
764 {
765 struct type *domain = TYPE_DOMAIN_TYPE (TYPE_TARGET_TYPE (type));
766 struct fn_field *f;
767 int j, len2;
768 char *kind = "";
e1ce8aa5 769 CORE_ADDR addr;
bd5635a1 770
e1ce8aa5
JK
771 addr = unpack_pointer (lookup_pointer_type (builtin_type_void),
772 valaddr);
773 if (addr < 128)
bd5635a1
RP
774 {
775 len = TYPE_NFN_FIELDS (domain);
776 for (i = 0; i < len; i++)
777 {
778 f = TYPE_FN_FIELDLIST1 (domain, i);
779 len2 = TYPE_FN_FIELDLIST_LENGTH (domain, i);
780
781 for (j = 0; j < len2; j++)
782 {
783 QUIT;
e1ce8aa5 784 if (TYPE_FN_FIELD_VOFFSET (f, j) == addr)
bd5635a1
RP
785 {
786 kind = "virtual";
787 goto common;
788 }
789 }
790 }
791 }
792 else
793 {
e1ce8aa5 794 struct symbol *sym = find_pc_function (addr);
bd5635a1
RP
795 if (sym == 0)
796 error ("invalid pointer to member function");
797 len = TYPE_NFN_FIELDS (domain);
798 for (i = 0; i < len; i++)
799 {
800 f = TYPE_FN_FIELDLIST1 (domain, i);
801 len2 = TYPE_FN_FIELDLIST_LENGTH (domain, i);
802
803 for (j = 0; j < len2; j++)
804 {
805 QUIT;
806 if (!strcmp (SYMBOL_NAME (sym), TYPE_FN_FIELD_PHYSNAME (f, j)))
807 goto common;
808 }
809 }
810 }
811 common:
812 if (i < len)
813 {
814 fprintf_filtered (stream, "&");
815 type_print_varspec_prefix (TYPE_FN_FIELD_TYPE (f, j), stream, 0, 0);
816 fprintf (stream, kind);
817 if (TYPE_FN_FIELD_PHYSNAME (f, j)[0] == '_'
818 && TYPE_FN_FIELD_PHYSNAME (f, j)[1] == CPLUS_MARKER)
819 type_print_method_args
820 (TYPE_FN_FIELD_ARGS (f, j) + 1, "~",
821 TYPE_FN_FIELDLIST_NAME (domain, i), 0, stream);
822 else
823 type_print_method_args
824 (TYPE_FN_FIELD_ARGS (f, j), "",
825 TYPE_FN_FIELDLIST_NAME (domain, i), 0, stream);
826 break;
827 }
828 fprintf_filtered (stream, "(");
829 type_print (type, "", stream, -1);
e1ce8aa5 830 fprintf_filtered (stream, ") %d", (int) addr >> 3);
bd5635a1
RP
831 }
832 else if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_MEMBER)
833 {
834 struct type *domain = TYPE_DOMAIN_TYPE (TYPE_TARGET_TYPE (type));
835
836 /* VAL is a byte offset into the structure type DOMAIN.
837 Find the name of the field for that offset and
838 print it. */
839 int extra = 0;
840 int bits = 0;
841 len = TYPE_NFIELDS (domain);
842 /* @@ Make VAL into bit offset */
843 val = unpack_long (builtin_type_int, valaddr) << 3;
844 for (i = TYPE_N_BASECLASSES (domain); i < len; i++)
845 {
846 int bitpos = TYPE_FIELD_BITPOS (domain, i);
847 QUIT;
848 if (val == bitpos)
849 break;
850 if (val < bitpos && i != 0)
851 {
852 /* Somehow pointing into a field. */
853 i -= 1;
854 extra = (val - TYPE_FIELD_BITPOS (domain, i));
855 if (extra & 0x3)
856 bits = 1;
857 else
858 extra >>= 3;
859 break;
860 }
861 }
862 if (i < len)
863 {
864 fprintf_filtered (stream, "&");
865 type_print_base (domain, stream, 0, 0);
866 fprintf_filtered (stream, "::");
867 fputs_filtered (TYPE_FIELD_NAME (domain, i), stream);
868 if (extra)
869 fprintf_filtered (stream, " + %d bytes", extra);
870 if (bits)
871 fprintf_filtered (stream, " (offset in bits)");
872 break;
873 }
874 fprintf_filtered (stream, "%d", val >> 3);
875 }
876 else
877 {
e1ce8aa5 878 CORE_ADDR addr = unpack_pointer (type, valaddr);
bd5635a1
RP
879 elttype = TYPE_TARGET_TYPE (type);
880
881 if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
882 {
883 /* Try to print what function it points to. */
884 print_address_demangle (addr, stream, demangle);
885 /* Return value is irrelevant except for string pointers. */
886 return 0;
887 }
888
889 if (addressprint && format != 's')
890 fprintf_filtered (stream, "0x%x", addr);
891
892 /* For a pointer to char or unsigned char,
893 also print the string pointed to, unless pointer is null. */
894 i = 0; /* Number of characters printed. */
895 if (TYPE_LENGTH (elttype) == 1
896 && TYPE_CODE (elttype) == TYPE_CODE_INT
897 && (format == 0 || format == 's')
898 && addr != 0
899 /* If print_max is UINT_MAX, the alloca below will fail.
900 In that case don't try to print the string. */
901 && print_max < UINT_MAX)
902 {
903 int first_addr_err = 0;
904 int errcode = 0;
905
906 /* Get first character. */
907 errcode = target_read_memory (addr, (char *)&c, 1);
908 if (errcode != 0)
909 {
910 /* First address out of bounds. */
911 first_addr_err = 1;
912 }
913 else
914 {
915 /* A real string. */
916 char *string = (char *) alloca (print_max);
917
918 /* If the loop ends by us hitting print_max characters,
919 we need to have elipses at the end. */
920 int force_ellipses = 1;
921
922 /* This loop always fetches print_max characters, even
923 though print_string might want to print more or fewer
924 (with repeated characters). This is so that
925 we don't spend forever fetching if we print
926 a long string consisting of the same character
927 repeated. Also so we can do it all in one memory
928 operation, which is faster. However, this will be
929 slower if print_max is set high, e.g. if you set
930 print_max to 1000, not only will it take a long
931 time to fetch short strings, but if you are near
932 the end of the address space, it might not work.
933 FIXME. */
934 QUIT;
935 errcode = target_read_memory (addr, string, print_max);
936 if (errcode != 0)
937 force_ellipses = 0;
938 else
939 for (i = 0; i < print_max; i++)
940 if (string[i] == '\0')
941 {
942 force_ellipses = 0;
943 break;
944 }
945 QUIT;
946
947 if (addressprint)
948 fputs_filtered (" ", stream);
949 print_string (stream, string, i, force_ellipses);
950 }
951
952 if (errcode != 0)
953 {
954 if (errcode == EIO)
955 {
956 fprintf_filtered (stream,
957 (" <Address 0x%x out of bounds>"
958 + first_addr_err),
959 addr + i);
960 }
961 else
962 {
963 if (errcode >= sys_nerr || errcode < 0)
964 error ("Error reading memory address 0x%x: unknown error (%d).",
965 addr + i, errcode);
966 else
967 error ("Error reading memory address 0x%x: %s.",
968 addr + i, sys_errlist[errcode]);
969 }
970 }
971
972 fflush (stream);
973 }
974 else /* print vtbl's nicely */
975 if (is_vtbl_member(type))
976 {
e1ce8aa5 977 CORE_ADDR vt_address = unpack_pointer (type, valaddr);
bd5635a1
RP
978
979 int vt_index = find_pc_misc_function (vt_address);
980 if (vt_index >= 0
981 && vt_address == misc_function_vector[vt_index].address)
982 {
983 fputs_filtered (" <", stream);
984 fputs_demangled (misc_function_vector[vt_index].name,
985 stream, 1);
986 fputs_filtered (">", stream);
987 }
988 if (vtblprint)
989 {
e1ce8aa5 990 value vt_val;
bd5635a1 991
e1ce8aa5
JK
992 vt_val = value_at (TYPE_TARGET_TYPE (type), vt_address);
993 val_print (VALUE_TYPE (vt_val), VALUE_CONTENTS (vt_val),
994 VALUE_ADDRESS (vt_val), stream, format,
bd5635a1
RP
995 deref_ref, recurse + 1, pretty);
996 if (pretty)
997 {
998 fprintf_filtered (stream, "\n");
999 print_spaces_filtered (2 + 2 * recurse, stream);
1000 }
1001 }
1002 }
1003
1004 /* Return number of characters printed, plus one for the
1005 terminating null if we have "reached the end". */
1006 return i + (print_max && i != print_max);
1007 }
1008 break;
1009
1010 case TYPE_CODE_MEMBER:
1011 error ("not implemented: member type in val_print");
1012 break;
1013
1014 case TYPE_CODE_REF:
1015 if (addressprint)
1016 {
1017 fprintf_filtered (stream, "@0x%lx",
1018 unpack_long (builtin_type_int, valaddr));
1019 if (deref_ref)
1020 fputs_filtered (": ", stream);
1021 }
1022 /* De-reference the reference. */
1023 if (deref_ref)
1024 {
1025 if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_UNDEF)
1026 {
e1ce8aa5
JK
1027 value deref_val =
1028 value_at
1029 (TYPE_TARGET_TYPE (type),
1030 unpack_pointer (lookup_pointer_type (builtin_type_void),
1031 valaddr));
1032 val_print (VALUE_TYPE (deref_val), VALUE_CONTENTS (deref_val),
1033 VALUE_ADDRESS (deref_val), stream, format,
bd5635a1
RP
1034 deref_ref, recurse + 1, pretty);
1035 }
1036 else
1037 fputs_filtered ("???", stream);
1038 }
1039 break;
1040
1041 case TYPE_CODE_UNION:
1042 if (recurse && !unionprint)
1043 {
1044 fprintf_filtered (stream, "{...}");
1045 break;
1046 }
1047 /* Fall through. */
1048 case TYPE_CODE_STRUCT:
1049 if (vtblprint && is_vtbl_ptr_type(type))
1050 {
1051 /* Print the unmangled name if desired. */
1052 print_address_demangle(*((int *) (valaddr + /* FIXME bytesex */
1053 TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8)),
1054 stream, demangle);
1055 break;
1056 }
1057 val_print_fields (type, valaddr, stream, format, recurse, pretty, 0);
1058 break;
1059
1060 case TYPE_CODE_ENUM:
1061 if (format)
1062 {
1063 print_scalar_formatted (valaddr, type, format, 0, stream);
1064 break;
1065 }
1066 len = TYPE_NFIELDS (type);
1067 val = unpack_long (builtin_type_int, valaddr);
1068 for (i = 0; i < len; i++)
1069 {
1070 QUIT;
1071 if (val == TYPE_FIELD_BITPOS (type, i))
1072 break;
1073 }
1074 if (i < len)
1075 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
1076 else
e1ce8aa5
JK
1077#ifdef LONG_LONG
1078 fprintf_filtered (stream, "%lld", val);
1079#else
1080 fprintf_filtered (stream, "%ld", val);
1081#endif
bd5635a1
RP
1082 break;
1083
1084 case TYPE_CODE_FUNC:
1085 if (format)
1086 {
1087 print_scalar_formatted (valaddr, type, format, 0, stream);
1088 break;
1089 }
36b9d39c
JG
1090 /* FIXME, we should consider, at least for ANSI C language, eliminating
1091 the distinction made between FUNCs and POINTERs to FUNCs. */
bd5635a1
RP
1092 fprintf_filtered (stream, "{");
1093 type_print (type, "", stream, -1);
1094 fprintf_filtered (stream, "} ");
36b9d39c
JG
1095 /* Try to print what function it points to, and its address. */
1096 print_address_demangle (address, stream, demangle);
bd5635a1
RP
1097 break;
1098
1099 case TYPE_CODE_INT:
1100 if (format || output_format)
1101 {
1102 print_scalar_formatted (valaddr, type,
1103 format? format: output_format,
1104 0, stream);
1105 break;
1106 }
1107 if (TYPE_LENGTH (type) > sizeof (LONGEST))
1108 {
1109 if (TYPE_UNSIGNED (type))
1110 {
1111 /* First figure out whether the number in fact has zeros
1112 in all its bytes more significant than least significant
1113 sizeof (LONGEST) ones. */
1114 char *p;
1115 /* Pointer to first (i.e. lowest address) nonzero character. */
1116 char *first_addr;
e1ce8aa5 1117 len = TYPE_LENGTH (type);
bd5635a1
RP
1118
1119#if TARGET_BYTE_ORDER == BIG_ENDIAN
1120 for (p = valaddr;
1121 len > sizeof (LONGEST)
1122 && p < valaddr + TYPE_LENGTH (type);
1123 p++)
1124#else /* Little endian. */
1125 first_addr = valaddr;
1126 for (p = valaddr + TYPE_LENGTH (type);
1127 len > sizeof (LONGEST) && p >= valaddr;
1128 p--)
1129#endif /* Little endian. */
1130 {
1131 if (*p == 0)
1132 len--;
1133 else
1134 break;
1135 }
1136#if TARGET_BYTE_ORDER == BIG_ENDIAN
1137 first_addr = p;
1138#endif
1139
1140 if (len <= sizeof (LONGEST))
1141 {
1142 /* We can print it in decimal. */
1143 fprintf_filtered
1144 (stream,
1145#if defined (LONG_LONG)
1146 "%llu",
1147#else
1148 "%lu",
1149#endif
1150 unpack_long (BUILTIN_TYPE_LONGEST, first_addr));
1151 }
1152 else
1153 {
1154 /* It is big, so print it in hex. */
1155 print_hex_chars (stream, (unsigned char *)first_addr, len);
1156 }
1157 }
1158 else
1159 {
1160 /* Signed. One could assume two's complement (a reasonable
1161 assumption, I think) and do better than this. */
1162 print_hex_chars (stream, (unsigned char *)valaddr,
1163 TYPE_LENGTH (type));
1164 }
1165 break;
1166 }
1167#ifdef PRINT_TYPELESS_INTEGER
1168 PRINT_TYPELESS_INTEGER (stream, type, unpack_long (type, valaddr));
1169#else
1170#ifndef LONG_LONG
1171 fprintf_filtered (stream,
1172 TYPE_UNSIGNED (type) ? "%u" : "%d",
1173 unpack_long (type, valaddr));
1174#else
1175 fprintf_filtered (stream,
1176 TYPE_UNSIGNED (type) ? "%llu" : "%lld",
1177 unpack_long (type, valaddr));
1178#endif
1179#endif
1180
1181 if (TYPE_LENGTH (type) == 1)
1182 {
1183 fprintf_filtered (stream, " '");
1184 printchar ((unsigned char) unpack_long (type, valaddr),
1185 stream, '\'');
1186 fprintf_filtered (stream, "'");
1187 }
1188 break;
1189
1190 case TYPE_CODE_FLT:
1191 if (format)
1192 print_scalar_formatted (valaddr, type, format, 0, stream);
1193 else
1194 print_floating (valaddr, type, stream);
1195 break;
1196
1197 case TYPE_CODE_VOID:
1198 fprintf_filtered (stream, "void");
1199 break;
1200
1201 case TYPE_CODE_UNDEF:
1202 /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
1203 dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
1204 and no complete type for struct foo in that file. */
1205 fprintf_filtered (stream, "<unknown struct>");
1206 break;
1207
1208 case TYPE_CODE_ERROR:
1209 fprintf_filtered (stream, "?");
1210 break;
1211
1212 default:
1213 error ("Invalid type code in symbol table.");
1214 }
1215 fflush (stream);
1216 return 0;
1217}
1218\f
1219/* Print a description of a type TYPE
1220 in the form of a declaration of a variable named VARSTRING.
1221 (VARSTRING is demangled if necessary.)
1222 Output goes to STREAM (via stdio).
1223 If SHOW is positive, we show the contents of the outermost level
1224 of structure even if there is a type name that could be used instead.
1225 If SHOW is negative, we never show the details of elements' types. */
1226
1227void
1228type_print (type, varstring, stream, show)
1229 struct type *type;
1230 char *varstring;
1231 FILE *stream;
1232 int show;
1233{
1234 type_print_1 (type, varstring, stream, show, 0);
1235}
1236
1237/* LEVEL is the depth to indent lines by. */
1238
1239void
1240type_print_1 (type, varstring, stream, show, level)
1241 struct type *type;
1242 char *varstring;
1243 FILE *stream;
1244 int show;
1245 int level;
1246{
1247 register enum type_code code;
1248 type_print_base (type, stream, show, level);
1249 code = TYPE_CODE (type);
1250 if ((varstring && *varstring)
1251 ||
1252 /* Need a space if going to print stars or brackets;
1253 but not if we will print just a type name. */
1254 ((show > 0 || TYPE_NAME (type) == 0)
1255 &&
1256 (code == TYPE_CODE_PTR || code == TYPE_CODE_FUNC
1257 || code == TYPE_CODE_METHOD
1258 || code == TYPE_CODE_ARRAY
1259 || code == TYPE_CODE_MEMBER
1260 || code == TYPE_CODE_REF)))
1261 fprintf_filtered (stream, " ");
1262 type_print_varspec_prefix (type, stream, show, 0);
1263 fputs_demangled (varstring, stream, -1); /* Print demangled name
1264 without arguments */
1265 type_print_varspec_suffix (type, stream, show, 0);
1266}
1267
1268/* Print the method arguments ARGS to the file STREAM. */
1269static void
1270type_print_method_args (args, prefix, varstring, staticp, stream)
1271 struct type **args;
1272 char *prefix, *varstring;
1273 int staticp;
1274 FILE *stream;
1275{
1276 int i;
1277
1278 fputs_filtered (" ", stream);
1279 fputs_demangled (prefix, stream, 1);
1280 fputs_demangled (varstring, stream, 1);
1281 fputs_filtered (" (", stream);
1282 if (args && args[!staticp] && args[!staticp]->code != TYPE_CODE_VOID)
1283 {
1284 i = !staticp; /* skip the class variable */
1285 while (1)
1286 {
1287 type_print (args[i++], "", stream, 0);
1288 if (!args[i])
1289 {
1290 fprintf_filtered (stream, " ...");
1291 break;
1292 }
1293 else if (args[i]->code != TYPE_CODE_VOID)
1294 {
1295 fprintf_filtered (stream, ", ");
1296 }
1297 else break;
1298 }
1299 }
1300 fprintf_filtered (stream, ")");
1301}
1302
1303/* If TYPE is a derived type, then print out derivation
1304 information. Print out all layers of the type heirarchy
1305 until we encounter one with multiple inheritance.
1306 At that point, print out that ply, and return. */
1307static void
1308type_print_derivation_info (stream, type)
1309 FILE *stream;
1310 struct type *type;
1311{
1312 char *name;
1313 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
1314 struct type *basetype = 0;
1315
1316 while (type && n_baseclasses > 0)
1317 {
1318 /* Not actually sure about this one -- Bryan. */
1319 check_stub_type (type);
1320
1321 fprintf_filtered (stream, ": ");
1322 for (i = 0; ;)
1323 {
1324 basetype = TYPE_BASECLASS (type, i);
1325 if (name = type_name_no_tag (basetype))
1326 {
1327 fprintf_filtered (stream, "%s%s ",
1328 BASETYPE_VIA_PUBLIC(type, i) ? "public" : "private",
1329 BASETYPE_VIA_VIRTUAL(type, i) ? " virtual" : "");
1330 fputs_filtered (name, stream);
1331 }
1332 i++;
1333 if (i >= n_baseclasses)
1334 break;
1335 fprintf_filtered (stream, ", ");
1336 }
1337
1338 fprintf_filtered (stream, " ");
1339 if (n_baseclasses != 1)
1340 break;
1341 n_baseclasses = TYPE_N_BASECLASSES (basetype);
1342 type = basetype;
1343 }
1344}
1345
1346/* Print any asterisks or open-parentheses needed before the
1347 variable name (to describe its type).
1348
1349 On outermost call, pass 0 for PASSED_A_PTR.
1350 On outermost call, SHOW > 0 means should ignore
1351 any typename for TYPE and show its details.
1352 SHOW is always zero on recursive calls. */
1353
1354static void
1355type_print_varspec_prefix (type, stream, show, passed_a_ptr)
1356 struct type *type;
1357 FILE *stream;
1358 int show;
1359 int passed_a_ptr;
1360{
1361 if (type == 0)
1362 return;
1363
1364 if (TYPE_NAME (type) && show <= 0)
1365 return;
1366
1367 QUIT;
1368
1369 switch (TYPE_CODE (type))
1370 {
1371 case TYPE_CODE_PTR:
1372 type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1);
1373 fprintf_filtered (stream, "*");
1374 break;
1375
1376 case TYPE_CODE_MEMBER:
1377 if (passed_a_ptr)
1378 fprintf_filtered (stream, "(");
1379 type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0,
1380 0);
1381 fprintf_filtered (stream, " ");
1382 type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0,
1383 passed_a_ptr);
1384 fprintf_filtered (stream, "::");
1385 break;
1386
1387 case TYPE_CODE_METHOD:
1388 if (passed_a_ptr)
1389 fprintf (stream, "(");
1390 type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0,
1391 0);
0dce3774
JK
1392 if (passed_a_ptr)
1393 {
1394 fprintf_filtered (stream, " ");
1395 type_print_base (TYPE_DOMAIN_TYPE (type), stream, 0,
1396 passed_a_ptr);
1397 fprintf_filtered (stream, "::");
1398 }
bd5635a1
RP
1399 break;
1400
1401 case TYPE_CODE_REF:
1402 type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1);
1403 fprintf_filtered (stream, "&");
1404 break;
1405
1406 case TYPE_CODE_FUNC:
1407 type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0,
1408 0);
1409 if (passed_a_ptr)
1410 fprintf_filtered (stream, "(");
1411 break;
1412
1413 case TYPE_CODE_ARRAY:
1414 type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0,
1415 0);
1416 if (passed_a_ptr)
1417 fprintf_filtered (stream, "(");
1418
1419 case TYPE_CODE_UNDEF:
1420 case TYPE_CODE_STRUCT:
1421 case TYPE_CODE_UNION:
1422 case TYPE_CODE_ENUM:
1423 case TYPE_CODE_INT:
1424 case TYPE_CODE_FLT:
1425 case TYPE_CODE_VOID:
1426 case TYPE_CODE_ERROR:
1427 /* These types need no prefix. They are listed here so that
1428 gcc -Wall will reveal any types that haven't been handled. */
1429 break;
1430 }
1431}
1432
1433/* Print any array sizes, function arguments or close parentheses
1434 needed after the variable name (to describe its type).
1435 Args work like type_print_varspec_prefix. */
1436
1437static void
1438type_print_varspec_suffix (type, stream, show, passed_a_ptr)
1439 struct type *type;
1440 FILE *stream;
1441 int show;
1442 int passed_a_ptr;
1443{
1444 if (type == 0)
1445 return;
1446
1447 if (TYPE_NAME (type) && show <= 0)
1448 return;
1449
1450 QUIT;
1451
1452 switch (TYPE_CODE (type))
1453 {
1454 case TYPE_CODE_ARRAY:
1455 if (passed_a_ptr)
1456 fprintf_filtered (stream, ")");
1457
1458 fprintf_filtered (stream, "[");
e1ce8aa5
JK
1459 if (/* always true */ /* TYPE_LENGTH (type) >= 0
1460 && */ TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0)
bd5635a1
RP
1461 fprintf_filtered (stream, "%d",
1462 (TYPE_LENGTH (type)
1463 / TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
1464 fprintf_filtered (stream, "]");
1465
1466 type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
1467 0);
1468 break;
1469
1470 case TYPE_CODE_MEMBER:
1471 if (passed_a_ptr)
1472 fprintf_filtered (stream, ")");
1473 type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0);
1474 break;
1475
1476 case TYPE_CODE_METHOD:
1477 if (passed_a_ptr)
1478 fprintf_filtered (stream, ")");
1479 type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0);
1480 if (passed_a_ptr)
1481 {
1482 int i;
1483 struct type **args = TYPE_ARG_TYPES (type);
1484
1485 fprintf_filtered (stream, "(");
1486 if (args[1] == 0)
1487 fprintf_filtered (stream, "...");
1488 else for (i = 1; args[i] != 0 && args[i]->code != TYPE_CODE_VOID; i++)
1489 {
1490 type_print_1 (args[i], "", stream, -1, 0);
1491 if (args[i+1] == 0)
1492 fprintf_filtered (stream, "...");
8ffd75c8 1493 else if (args[i+1]->code != TYPE_CODE_VOID) {
bd5635a1 1494 fprintf_filtered (stream, ",");
8ffd75c8
JG
1495 wrap_here (" ");
1496 }
bd5635a1
RP
1497 }
1498 fprintf_filtered (stream, ")");
1499 }
1500 break;
1501
1502 case TYPE_CODE_PTR:
1503 case TYPE_CODE_REF:
1504 type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1);
1505 break;
1506
1507 case TYPE_CODE_FUNC:
1508 type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
1509 passed_a_ptr);
1510 if (passed_a_ptr)
1511 fprintf_filtered (stream, ")");
1512 fprintf_filtered (stream, "()");
1513 break;
1514
1515 case TYPE_CODE_UNDEF:
1516 case TYPE_CODE_STRUCT:
1517 case TYPE_CODE_UNION:
1518 case TYPE_CODE_ENUM:
1519 case TYPE_CODE_INT:
1520 case TYPE_CODE_FLT:
1521 case TYPE_CODE_VOID:
1522 case TYPE_CODE_ERROR:
1523 /* These types do not need a suffix. They are listed so that
1524 gcc -Wall will report types that may not have been considered. */
1525 break;
1526 }
1527}
1528
1529/* Print the name of the type (or the ultimate pointer target,
1530 function value or array element), or the description of a
1531 structure or union.
1532
1533 SHOW nonzero means don't print this type as just its name;
1534 show its real definition even if it has a name.
1535 SHOW zero means print just typename or struct tag if there is one
1536 SHOW negative means abbreviate structure elements.
1537 SHOW is decremented for printing of structure elements.
1538
1539 LEVEL is the depth to indent by.
1540 We increase it for some recursive calls. */
1541
1542static void
1543type_print_base (type, stream, show, level)
1544 struct type *type;
1545 FILE *stream;
1546 int show;
1547 int level;
1548{
1549 char *name;
1550 register int i;
1551 register int len;
1552 register int lastval;
1553
1554 QUIT;
1555
8ffd75c8 1556 wrap_here (" ");
bd5635a1
RP
1557 if (type == 0)
1558 {
1559 fprintf_filtered (stream, "type unknown");
1560 return;
1561 }
1562
1563 if (TYPE_NAME (type) && show <= 0)
1564 {
1565 fputs_filtered (TYPE_NAME (type), stream);
1566 return;
1567 }
1568
1569 switch (TYPE_CODE (type))
1570 {
1571 case TYPE_CODE_ARRAY:
1572 case TYPE_CODE_PTR:
1573 case TYPE_CODE_MEMBER:
1574 case TYPE_CODE_REF:
1575 case TYPE_CODE_FUNC:
1576 case TYPE_CODE_METHOD:
1577 type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
1578 break;
1579
1580 case TYPE_CODE_STRUCT:
1581 fprintf_filtered (stream, "struct ");
1582 goto struct_union;
1583
1584 case TYPE_CODE_UNION:
1585 fprintf_filtered (stream, "union ");
1586 struct_union:
1587 if (name = type_name_no_tag (type))
1588 {
1589 fputs_filtered (name, stream);
1590 fputs_filtered (" ", stream);
8ffd75c8 1591 wrap_here (" ");
bd5635a1
RP
1592 }
1593 if (show < 0)
1594 fprintf_filtered (stream, "{...}");
1595 else
1596 {
1597 check_stub_type (type);
1598
1599 type_print_derivation_info (stream, type);
1600
1601 fprintf_filtered (stream, "{");
1602 len = TYPE_NFIELDS (type);
1603 if (len)
1604 fprintf_filtered (stream, "\n");
1605 else
1606 {
1607 if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
1608 fprintf_filtered (stream, "<incomplete type>\n");
1609 else
1610 fprintf_filtered (stream, "<no data fields>\n");
1611 }
1612
1613 /* If there is a base class for this type,
1614 do not print the field that it occupies. */
1615 for (i = TYPE_N_BASECLASSES (type); i < len; i++)
1616 {
1617 QUIT;
1618 /* Don't print out virtual function table. */
1619 if ((TYPE_FIELD_NAME (type, i))[5] == CPLUS_MARKER &&
1620 !strncmp (TYPE_FIELD_NAME (type, i), "_vptr", 5))
1621 continue;
1622
1623 print_spaces_filtered (level + 4, stream);
1624 if (TYPE_FIELD_STATIC (type, i))
1625 {
1626 fprintf_filtered (stream, "static ");
1627 }
1628 type_print_1 (TYPE_FIELD_TYPE (type, i),
1629 TYPE_FIELD_NAME (type, i),
1630 stream, show - 1, level + 4);
1631 if (!TYPE_FIELD_STATIC (type, i)
1632 && TYPE_FIELD_PACKED (type, i))
1633 {
1634 /* It is a bitfield. This code does not attempt
1635 to look at the bitpos and reconstruct filler,
1636 unnamed fields. This would lead to misleading
1637 results if the compiler does not put out fields
1638 for such things (I don't know what it does). */
1639 fprintf_filtered (stream, " : %d",
1640 TYPE_FIELD_BITSIZE (type, i));
1641 }
1642 fprintf_filtered (stream, ";\n");
1643 }
1644
1645 /* C++: print out the methods */
1646 len = TYPE_NFN_FIELDS (type);
1647 if (len) fprintf_filtered (stream, "\n");
1648 for (i = 0; i < len; i++)
1649 {
1650 struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
1651 int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
1652
1653 for (j = 0; j < len2; j++)
1654 {
1655 QUIT;
1656 print_spaces_filtered (level + 4, stream);
1657 if (TYPE_FN_FIELD_VIRTUAL_P (f, j))
1658 fprintf_filtered (stream, "virtual ");
1659 else if (TYPE_FN_FIELD_STATIC_P (f, j))
1660 fprintf_filtered (stream, "static ");
aec4cb91
MT
1661 if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
1662 {
1663 /* Keep GDB from crashing here. */
1664 fprintf (stream, "<undefined type> %s;\n",
1665 TYPE_FN_FIELD_PHYSNAME (f, j));
1666 break;
1667 }
1668 else
1669 type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)), "", stream, 0);
bd5635a1
RP
1670 if (TYPE_FLAGS (TYPE_FN_FIELD_TYPE (f, j)) & TYPE_FLAG_STUB)
1671 {
1672 /* Build something we can demangle. */
1673 char *strchr (), *gdb_mangle_typename ();
1674 char *inner_name = gdb_mangle_typename (type);
1675 char *mangled_name
1676 = (char *)xmalloc (strlen (TYPE_FN_FIELDLIST_NAME (type, i))
1677 + strlen (inner_name)
1678 + strlen (TYPE_FN_FIELD_PHYSNAME (f, j))
1679 + 1);
1680 char *demangled_name, *cplus_demangle ();
1681 strcpy (mangled_name, TYPE_FN_FIELDLIST_NAME (type, i));
1682 strcat (mangled_name, inner_name);
1683 strcat (mangled_name, TYPE_FN_FIELD_PHYSNAME (f, j));
1684 demangled_name = cplus_demangle (mangled_name, 1);
1685 if (demangled_name == 0)
1686 fprintf_filtered (stream, " <badly mangled name %s>",
1687 mangled_name);
1688 else
1689 {
1690 fprintf_filtered (stream, " %s",
1691 strchr (demangled_name, ':') + 2);
1692 free (demangled_name);
1693 }
1694 free (mangled_name);
1695 }
1696 else if (TYPE_FN_FIELD_PHYSNAME (f, j)[0] == '_'
1697 && TYPE_FN_FIELD_PHYSNAME (f, j)[1] == CPLUS_MARKER)
1698 type_print_method_args
1699 (TYPE_FN_FIELD_ARGS (f, j) + 1, "~",
1700 TYPE_FN_FIELDLIST_NAME (type, i), 0, stream);
1701 else
1702 type_print_method_args
1703 (TYPE_FN_FIELD_ARGS (f, j), "",
1704 TYPE_FN_FIELDLIST_NAME (type, i),
1705 TYPE_FN_FIELD_STATIC_P (f, j), stream);
1706
1707 fprintf_filtered (stream, ";\n");
1708 }
1709 }
1710
1711 print_spaces_filtered (level, stream);
1712 fprintf_filtered (stream, "}");
1713 }
1714 break;
1715
1716 case TYPE_CODE_ENUM:
1717 fprintf_filtered (stream, "enum ");
1718 if (name = type_name_no_tag (type))
1719 {
1720 fputs_filtered (name, stream);
1721 fputs_filtered (" ", stream);
1722 }
8ffd75c8 1723 wrap_here (" ");
bd5635a1
RP
1724 if (show < 0)
1725 fprintf_filtered (stream, "{...}");
1726 else
1727 {
1728 fprintf_filtered (stream, "{");
1729 len = TYPE_NFIELDS (type);
1730 lastval = 0;
1731 for (i = 0; i < len; i++)
1732 {
1733 QUIT;
1734 if (i) fprintf_filtered (stream, ", ");
8ffd75c8 1735 wrap_here (" ");
bd5635a1
RP
1736 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
1737 if (lastval != TYPE_FIELD_BITPOS (type, i))
1738 {
1739 fprintf_filtered (stream, " = %d", TYPE_FIELD_BITPOS (type, i));
1740 lastval = TYPE_FIELD_BITPOS (type, i);
1741 }
1742 lastval++;
1743 }
1744 fprintf_filtered (stream, "}");
1745 }
1746 break;
1747
1748 case TYPE_CODE_INT:
1749 if (TYPE_LENGTH (type) > sizeof (LONGEST))
1750 {
1751 fprintf_filtered (stream, "<%d bit integer>",
1752 TYPE_LENGTH (type) * TARGET_CHAR_BIT);
1753 }
1754 else
1755 {
1756 if (TYPE_UNSIGNED (type))
1757 name = unsigned_type_table[TYPE_LENGTH (type)];
1758 else
1759 name = signed_type_table[TYPE_LENGTH (type)];
1760 }
1761 fputs_filtered (name, stream);
1762 break;
1763
1764 case TYPE_CODE_FLT:
1765 name = float_type_table[TYPE_LENGTH (type)];
1766 fputs_filtered (name, stream);
1767 break;
1768
1769 case TYPE_CODE_VOID:
1770 fprintf_filtered (stream, "void");
1771 break;
1772
1773 case 0:
1774 fprintf_filtered (stream, "struct unknown");
1775 break;
1776
1777 case TYPE_CODE_ERROR:
1778 fprintf_filtered (stream, "<unknown type>");
1779 break;
1780
1781 default:
1782 error ("Invalid type code in symbol table.");
1783 }
1784}
1785\f
e1ce8aa5 1786#if 0
bd5635a1
RP
1787/* Validate an input or output radix setting, and make sure the user
1788 knows what they really did here. Radix setting is confusing, e.g.
1789 setting the input radix to "10" never changes it! */
1790
e1ce8aa5 1791/* ARGSUSED */
bd5635a1
RP
1792static void
1793set_input_radix (args, from_tty, c)
1794 char *args;
1795 int from_tty;
1796 struct cmd_list_element *c;
1797{
1798 unsigned radix = *(unsigned *)c->var;
1799
1800 if (from_tty)
1801 printf_filtered ("Input radix set to decimal %d, hex %x, octal %o\n",
1802 radix, radix, radix);
1803}
e1ce8aa5 1804#endif
bd5635a1 1805
e1ce8aa5 1806/* ARGSUSED */
bd5635a1
RP
1807static void
1808set_output_radix (args, from_tty, c)
1809 char *args;
1810 int from_tty;
1811 struct cmd_list_element *c;
1812{
1813 unsigned radix = *(unsigned *)c->var;
1814
1815 if (from_tty)
1816 printf_filtered ("Output radix set to decimal %d, hex %x, octal %o\n",
1817 radix, radix, radix);
1818
1819 /* FIXME, we really should be able to validate the setting BEFORE
1820 it takes effect. */
1821 switch (radix)
1822 {
1823 case 16:
1824 output_format = 'x';
1825 break;
1826 case 10:
1827 output_format = 0;
1828 break;
1829 case 8:
1830 output_format = 'o'; /* octal */
1831 break;
1832 default:
1833 output_format = 0;
1834 error ("Unsupported radix ``decimal %d''; using decimal output",
1835 radix);
1836 }
1837}
1838
1839/* Both at once */
1840static void
1841set_radix (arg, from_tty, c)
1842 char *arg;
1843 int from_tty;
1844 struct cmd_list_element *c;
1845{
1846 unsigned radix = *(unsigned *)c->var;
1847
1848 if (from_tty)
1849 printf_filtered ("Radix set to decimal %d, hex %x, octal %o\n",
1850 radix, radix, radix);
1851
1852 input_radix = radix;
1853 output_radix = radix;
1854
1855 set_output_radix (arg, 0, c);
1856}
1857\f
f266e564
JK
1858struct cmd_list_element *setprintlist = NULL;
1859struct cmd_list_element *showprintlist = NULL;
1860
1861/*ARGSUSED*/
1862static void
1863set_print (arg, from_tty)
1864 char *arg;
1865 int from_tty;
1866{
1867 printf (
1868"\"set print\" must be followed by the name of a print subcommand.\n");
1869 help_list (setprintlist, "set print ", -1, stdout);
1870}
1871
1872/*ARGSUSED*/
1873static void
1874show_print (args, from_tty)
1875 char *args;
1876 int from_tty;
1877{
1878 cmd_show_list (showprintlist, from_tty, "");
1879}
1880\f
bd5635a1
RP
1881void
1882_initialize_valprint ()
1883{
1884 struct cmd_list_element *c;
1885
f266e564
JK
1886 add_prefix_cmd ("print", no_class, set_print,
1887 "Generic command for setting how things print.",
1888 &setprintlist, "set print ", 0, &setlist);
36b9d39c
JG
1889 add_alias_cmd ("p", "print", no_class, 1, &setlist);
1890 add_alias_cmd ("pr", "print", no_class, 1, &setlist); /* prefer set print
1891 to set prompt */
f266e564
JK
1892 add_prefix_cmd ("print", no_class, show_print,
1893 "Generic command for showing print settings.",
1894 &showprintlist, "show print ", 0, &showlist);
36b9d39c
JG
1895 add_alias_cmd ("p", "print", no_class, 1, &showlist);
1896 add_alias_cmd ("pr", "print", no_class, 1, &showlist);
f266e564 1897
bd5635a1 1898 add_show_from_set
f266e564 1899 (add_set_cmd ("elements", no_class, var_uinteger, (char *)&print_max,
bd5635a1 1900 "Set limit on string chars or array elements to print.\n\
f266e564
JK
1901\"set print elements 0\" causes there to be no limit.",
1902 &setprintlist),
1903 &showprintlist);
bd5635a1
RP
1904
1905 add_show_from_set
f266e564 1906 (add_set_cmd ("pretty", class_support, var_boolean, (char *)&prettyprint,
bd5635a1 1907 "Set prettyprinting of structures.",
f266e564
JK
1908 &setprintlist),
1909 &showprintlist);
bd5635a1
RP
1910
1911 add_show_from_set
f266e564 1912 (add_set_cmd ("union", class_support, var_boolean, (char *)&unionprint,
bd5635a1 1913 "Set printing of unions interior to structures.",
f266e564
JK
1914 &setprintlist),
1915 &showprintlist);
bd5635a1
RP
1916
1917 add_show_from_set
f266e564 1918 (add_set_cmd ("vtbl", class_support, var_boolean, (char *)&vtblprint,
bd5635a1 1919 "Set printing of C++ virtual function tables.",
f266e564
JK
1920 &setprintlist),
1921 &showprintlist);
bd5635a1
RP
1922
1923 add_show_from_set
f266e564 1924 (add_set_cmd ("array", class_support, var_boolean, (char *)&arrayprint,
bd5635a1 1925 "Set prettyprinting of arrays.",
f266e564
JK
1926 &setprintlist),
1927 &showprintlist);
bd5635a1 1928
0dce3774
JK
1929 add_show_from_set
1930 (add_set_cmd ("object", class_support, var_boolean, (char *)&objectprint,
1931 "Set printing of object's derived type based on vtable info.",
1932 &setprintlist),
1933 &showprintlist);
1934
bd5635a1 1935 add_show_from_set
f266e564 1936 (add_set_cmd ("address", class_support, var_boolean, (char *)&addressprint,
bd5635a1 1937 "Set printing of addresses.",
f266e564
JK
1938 &setprintlist),
1939 &showprintlist);
bd5635a1
RP
1940
1941#if 0
1942 /* The "show radix" cmd isn't good enough to show two separate values.
1943 The rest of the code works, but the show part is confusing, so don't
1944 let them be set separately 'til we work out "show". */
1945 c = add_set_cmd ("input-radix", class_support, var_uinteger,
1946 (char *)&input_radix,
1947 "Set default input radix for entering numbers.",
1948 &setlist);
1949 add_show_from_set (c, &showlist);
1950 c->function = set_input_radix;
1951
1952 c = add_set_cmd ("output-radix", class_support, var_uinteger,
1953 (char *)&output_radix,
1954 "Set default output radix for printing of values.",
1955 &setlist);
1956 add_show_from_set (c, &showlist);
1957 c->function = set_output_radix;
1958#endif
1959
1960 c = add_set_cmd ("radix", class_support, var_uinteger,
1961 (char *)&output_radix,
1962 "Set default input and output number radix.",
1963 &setlist);
1964 add_show_from_set (c, &showlist);
1965 c->function = set_radix;
1966
1967 /* Give people the defaults which they are used to. */
1968 prettyprint = 0;
1969 unionprint = 1;
1970 vtblprint = 0;
1971 arrayprint = 0;
1972 addressprint = 1;
0dce3774 1973 objectprint = 0;
bd5635a1
RP
1974
1975 print_max = 200;
1976
1977 unsigned_type_table
1978 = (char **) xmalloc ((1 + sizeof (unsigned LONGEST)) * sizeof (char *));
1979 bzero (unsigned_type_table, (1 + sizeof (unsigned LONGEST)));
1980 unsigned_type_table[sizeof (unsigned char)] = "unsigned char";
1981 unsigned_type_table[sizeof (unsigned short)] = "unsigned short";
1982 unsigned_type_table[sizeof (unsigned long)] = "unsigned long";
1983 unsigned_type_table[sizeof (unsigned int)] = "unsigned int";
1984#ifdef LONG_LONG
1985 unsigned_type_table[sizeof (unsigned long long)] = "unsigned long long";
1986#endif
1987
1988 signed_type_table
1989 = (char **) xmalloc ((1 + sizeof (LONGEST)) * sizeof (char *));
1990 bzero (signed_type_table, (1 + sizeof (LONGEST)));
1991 signed_type_table[sizeof (char)] = "char";
1992 signed_type_table[sizeof (short)] = "short";
1993 signed_type_table[sizeof (long)] = "long";
1994 signed_type_table[sizeof (int)] = "int";
1995#ifdef LONG_LONG
1996 signed_type_table[sizeof (long long)] = "long long";
1997#endif
1998
1999 float_type_table
2000 = (char **) xmalloc ((1 + sizeof (double)) * sizeof (char *));
2001 bzero (float_type_table, (1 + sizeof (double)));
2002 float_type_table[sizeof (float)] = "float";
2003 float_type_table[sizeof (double)] = "double";
2004 obstack_begin (&dont_print_obstack, 32 * sizeof (struct type *));
2005}
This page took 0.221804 seconds and 4 git commands to generate.