]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/typeprint.c
Constify add_setshow_*
[thirdparty/binutils-gdb.git] / gdb / typeprint.c
1 /* Language independent support for printing types for GDB, the GNU debugger.
2
3 Copyright (C) 1986-2017 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "gdb_obstack.h"
22 #include "bfd.h" /* Binary File Description */
23 #include "symtab.h"
24 #include "gdbtypes.h"
25 #include "expression.h"
26 #include "value.h"
27 #include "gdbcore.h"
28 #include "command.h"
29 #include "gdbcmd.h"
30 #include "target.h"
31 #include "language.h"
32 #include "cp-abi.h"
33 #include "typeprint.h"
34 #include "valprint.h"
35 #include <ctype.h>
36 #include "cli/cli-utils.h"
37 #include "extension.h"
38 #include "completer.h"
39
40 const struct type_print_options type_print_raw_options =
41 {
42 1, /* raw */
43 1, /* print_methods */
44 1, /* print_typedefs */
45 NULL, /* local_typedefs */
46 NULL, /* global_table */
47 NULL /* global_printers */
48 };
49
50 /* The default flags for 'ptype' and 'whatis'. */
51
52 static struct type_print_options default_ptype_flags =
53 {
54 0, /* raw */
55 1, /* print_methods */
56 1, /* print_typedefs */
57 NULL, /* local_typedefs */
58 NULL, /* global_table */
59 NULL /* global_printers */
60 };
61
62 \f
63
64 /* A hash table holding typedef_field objects. This is more
65 complicated than an ordinary hash because it must also track the
66 lifetime of some -- but not all -- of the contained objects. */
67
68 struct typedef_hash_table
69 {
70 /* The actual hash table. */
71 htab_t table;
72
73 /* Storage for typedef_field objects that must be synthesized. */
74 struct obstack storage;
75 };
76
77 /* A hash function for a typedef_field. */
78
79 static hashval_t
80 hash_typedef_field (const void *p)
81 {
82 const struct typedef_field *tf = (const struct typedef_field *) p;
83 struct type *t = check_typedef (tf->type);
84
85 return htab_hash_string (TYPE_SAFE_NAME (t));
86 }
87
88 /* An equality function for a typedef field. */
89
90 static int
91 eq_typedef_field (const void *a, const void *b)
92 {
93 const struct typedef_field *tfa = (const struct typedef_field *) a;
94 const struct typedef_field *tfb = (const struct typedef_field *) b;
95
96 return types_equal (tfa->type, tfb->type);
97 }
98
99 /* Add typedefs from T to the hash table TABLE. */
100
101 void
102 recursively_update_typedef_hash (struct typedef_hash_table *table,
103 struct type *t)
104 {
105 int i;
106
107 if (table == NULL)
108 return;
109
110 for (i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (t); ++i)
111 {
112 struct typedef_field *tdef = &TYPE_TYPEDEF_FIELD (t, i);
113 void **slot;
114
115 slot = htab_find_slot (table->table, tdef, INSERT);
116 /* Only add a given typedef name once. Really this shouldn't
117 happen; but it is safe enough to do the updates breadth-first
118 and thus use the most specific typedef. */
119 if (*slot == NULL)
120 *slot = tdef;
121 }
122
123 /* Recurse into superclasses. */
124 for (i = 0; i < TYPE_N_BASECLASSES (t); ++i)
125 recursively_update_typedef_hash (table, TYPE_BASECLASS (t, i));
126 }
127
128 /* Add template parameters from T to the typedef hash TABLE. */
129
130 void
131 add_template_parameters (struct typedef_hash_table *table, struct type *t)
132 {
133 int i;
134
135 if (table == NULL)
136 return;
137
138 for (i = 0; i < TYPE_N_TEMPLATE_ARGUMENTS (t); ++i)
139 {
140 struct typedef_field *tf;
141 void **slot;
142
143 /* We only want type-valued template parameters in the hash. */
144 if (SYMBOL_CLASS (TYPE_TEMPLATE_ARGUMENT (t, i)) != LOC_TYPEDEF)
145 continue;
146
147 tf = XOBNEW (&table->storage, struct typedef_field);
148 tf->name = SYMBOL_LINKAGE_NAME (TYPE_TEMPLATE_ARGUMENT (t, i));
149 tf->type = SYMBOL_TYPE (TYPE_TEMPLATE_ARGUMENT (t, i));
150
151 slot = htab_find_slot (table->table, tf, INSERT);
152 if (*slot == NULL)
153 *slot = tf;
154 }
155 }
156
157 /* Create a new typedef-lookup hash table. */
158
159 struct typedef_hash_table *
160 create_typedef_hash (void)
161 {
162 struct typedef_hash_table *result;
163
164 result = XNEW (struct typedef_hash_table);
165 result->table = htab_create_alloc (10, hash_typedef_field, eq_typedef_field,
166 NULL, xcalloc, xfree);
167 obstack_init (&result->storage);
168
169 return result;
170 }
171
172 /* Free a typedef field table. */
173
174 void
175 free_typedef_hash (struct typedef_hash_table *table)
176 {
177 if (table != NULL)
178 {
179 htab_delete (table->table);
180 obstack_free (&table->storage, NULL);
181 xfree (table);
182 }
183 }
184
185 /* A cleanup for freeing a typedef_hash_table. */
186
187 static void
188 do_free_typedef_hash (void *arg)
189 {
190 free_typedef_hash ((struct typedef_hash_table *) arg);
191 }
192
193 /* Return a new cleanup that frees TABLE. */
194
195 struct cleanup *
196 make_cleanup_free_typedef_hash (struct typedef_hash_table *table)
197 {
198 return make_cleanup (do_free_typedef_hash, table);
199 }
200
201 /* Helper function for copy_typedef_hash. */
202
203 static int
204 copy_typedef_hash_element (void **slot, void *nt)
205 {
206 htab_t new_table = (htab_t) nt;
207 void **new_slot;
208
209 new_slot = htab_find_slot (new_table, *slot, INSERT);
210 if (*new_slot == NULL)
211 *new_slot = *slot;
212
213 return 1;
214 }
215
216 /* Copy a typedef hash. */
217
218 struct typedef_hash_table *
219 copy_typedef_hash (struct typedef_hash_table *table)
220 {
221 struct typedef_hash_table *result;
222
223 if (table == NULL)
224 return NULL;
225
226 result = create_typedef_hash ();
227 htab_traverse_noresize (table->table, copy_typedef_hash_element,
228 result->table);
229 return result;
230 }
231
232 /* A cleanup to free the global typedef hash. */
233
234 static void
235 do_free_global_table (void *arg)
236 {
237 struct type_print_options *flags = (struct type_print_options *) arg;
238
239 free_typedef_hash (flags->global_typedefs);
240 free_ext_lang_type_printers (flags->global_printers);
241 }
242
243 /* Create the global typedef hash. */
244
245 static struct cleanup *
246 create_global_typedef_table (struct type_print_options *flags)
247 {
248 gdb_assert (flags->global_typedefs == NULL && flags->global_printers == NULL);
249 flags->global_typedefs = create_typedef_hash ();
250 flags->global_printers = start_ext_lang_type_printers ();
251 return make_cleanup (do_free_global_table, flags);
252 }
253
254 /* Look up the type T in the global typedef hash. If it is found,
255 return the typedef name. If it is not found, apply the
256 type-printers, if any, given by start_script_type_printers and return the
257 result. A NULL return means that the name was not found. */
258
259 static const char *
260 find_global_typedef (const struct type_print_options *flags,
261 struct type *t)
262 {
263 char *applied;
264 void **slot;
265 struct typedef_field tf, *new_tf;
266
267 if (flags->global_typedefs == NULL)
268 return NULL;
269
270 tf.name = NULL;
271 tf.type = t;
272
273 slot = htab_find_slot (flags->global_typedefs->table, &tf, INSERT);
274 if (*slot != NULL)
275 {
276 new_tf = (struct typedef_field *) *slot;
277 return new_tf->name;
278 }
279
280 /* Put an entry into the hash table now, in case
281 apply_ext_lang_type_printers recurses. */
282 new_tf = XOBNEW (&flags->global_typedefs->storage, struct typedef_field);
283 new_tf->name = NULL;
284 new_tf->type = t;
285
286 *slot = new_tf;
287
288 applied = apply_ext_lang_type_printers (flags->global_printers, t);
289
290 if (applied != NULL)
291 {
292 new_tf->name
293 = (const char *) obstack_copy0 (&flags->global_typedefs->storage,
294 applied, strlen (applied));
295 xfree (applied);
296 }
297
298 return new_tf->name;
299 }
300
301 /* Look up the type T in the typedef hash table in with FLAGS. If T
302 is in the table, return its short (class-relative) typedef name.
303 Otherwise return NULL. If the table is NULL, this always returns
304 NULL. */
305
306 const char *
307 find_typedef_in_hash (const struct type_print_options *flags, struct type *t)
308 {
309 if (flags->local_typedefs != NULL)
310 {
311 struct typedef_field tf, *found;
312
313 tf.name = NULL;
314 tf.type = t;
315 found = (struct typedef_field *) htab_find (flags->local_typedefs->table,
316 &tf);
317
318 if (found != NULL)
319 return found->name;
320 }
321
322 return find_global_typedef (flags, t);
323 }
324
325 \f
326
327 /* Print a description of a type in the format of a
328 typedef for the current language.
329 NEW is the new name for a type TYPE. */
330
331 void
332 typedef_print (struct type *type, struct symbol *newobj, struct ui_file *stream)
333 {
334 LA_PRINT_TYPEDEF (type, newobj, stream);
335 }
336
337 /* The default way to print a typedef. */
338
339 void
340 default_print_typedef (struct type *type, struct symbol *new_symbol,
341 struct ui_file *stream)
342 {
343 error (_("Language not supported."));
344 }
345
346 /* Print a description of a type TYPE in the form of a declaration of a
347 variable named VARSTRING. (VARSTRING is demangled if necessary.)
348 Output goes to STREAM (via stdio).
349 If SHOW is positive, we show the contents of the outermost level
350 of structure even if there is a type name that could be used instead.
351 If SHOW is negative, we never show the details of elements' types. */
352
353 void
354 type_print (struct type *type, const char *varstring, struct ui_file *stream,
355 int show)
356 {
357 LA_PRINT_TYPE (type, varstring, stream, show, 0, &default_ptype_flags);
358 }
359
360 /* Print TYPE to a string, returning it. The caller is responsible for
361 freeing the string. */
362
363 std::string
364 type_to_string (struct type *type)
365 {
366 TRY
367 {
368 string_file stb;
369
370 type_print (type, "", &stb, -1);
371 return std::move (stb.string ());
372 }
373 CATCH (except, RETURN_MASK_ALL)
374 {
375 }
376 END_CATCH
377
378 return {};
379 }
380
381 /* See typeprint.h. */
382
383 void
384 type_print_unknown_return_type (struct ui_file *stream)
385 {
386 fprintf_filtered (stream, _("<unknown return type>"));
387 }
388
389 /* See typeprint.h. */
390
391 void
392 error_unknown_type (const char *sym_print_name)
393 {
394 error (_("'%s' has unknown type; cast it to its declared type"),
395 sym_print_name);
396 }
397
398 /* Print type of EXP, or last thing in value history if EXP == NULL.
399 show is passed to type_print. */
400
401 static void
402 whatis_exp (const char *exp, int show)
403 {
404 struct value *val;
405 struct cleanup *old_chain;
406 struct type *real_type = NULL;
407 struct type *type;
408 int full = 0;
409 LONGEST top = -1;
410 int using_enc = 0;
411 struct value_print_options opts;
412 struct type_print_options flags = default_ptype_flags;
413
414 old_chain = make_cleanup (null_cleanup, NULL);
415
416 if (exp)
417 {
418 if (*exp == '/')
419 {
420 int seen_one = 0;
421
422 for (++exp; *exp && !isspace (*exp); ++exp)
423 {
424 switch (*exp)
425 {
426 case 'r':
427 flags.raw = 1;
428 break;
429 case 'm':
430 flags.print_methods = 0;
431 break;
432 case 'M':
433 flags.print_methods = 1;
434 break;
435 case 't':
436 flags.print_typedefs = 0;
437 break;
438 case 'T':
439 flags.print_typedefs = 1;
440 break;
441 default:
442 error (_("unrecognized flag '%c'"), *exp);
443 }
444 seen_one = 1;
445 }
446
447 if (!*exp && !seen_one)
448 error (_("flag expected"));
449 if (!isspace (*exp))
450 error (_("expected space after format"));
451 exp = skip_spaces (exp);
452 }
453
454 expression_up expr = parse_expression (exp);
455
456 /* The behavior of "whatis" depends on whether the user
457 expression names a type directly, or a language expression
458 (including variable names). If the former, then "whatis"
459 strips one level of typedefs, only. If an expression,
460 "whatis" prints the type of the expression without stripping
461 any typedef level. "ptype" always strips all levels of
462 typedefs. */
463 if (show == -1 && expr->elts[0].opcode == OP_TYPE)
464 {
465 /* The user expression names a type directly. */
466 type = expr->elts[1].type;
467
468 /* If this is a typedef, then find its immediate target.
469 Use check_typedef to resolve stubs, but ignore its result
470 because we do not want to dig past all typedefs. */
471 check_typedef (type);
472 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
473 type = TYPE_TARGET_TYPE (type);
474 }
475 else
476 {
477 /* The user expression names a type indirectly by naming an
478 object or expression of that type. Find that
479 indirectly-named type. */
480 val = evaluate_type (expr.get ());
481 type = value_type (val);
482 }
483 }
484 else
485 {
486 val = access_value_history (0);
487 type = value_type (val);
488 }
489
490 get_user_print_options (&opts);
491 if (opts.objectprint)
492 {
493 if (((TYPE_CODE (type) == TYPE_CODE_PTR) || TYPE_IS_REFERENCE (type))
494 && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT))
495 real_type = value_rtti_indirect_type (val, &full, &top, &using_enc);
496 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
497 real_type = value_rtti_type (val, &full, &top, &using_enc);
498 }
499
500 printf_filtered ("type = ");
501
502 if (!flags.raw)
503 create_global_typedef_table (&flags);
504
505 if (real_type)
506 {
507 printf_filtered ("/* real type = ");
508 type_print (real_type, "", gdb_stdout, -1);
509 if (! full)
510 printf_filtered (" (incomplete object)");
511 printf_filtered (" */\n");
512 }
513
514 LA_PRINT_TYPE (type, "", gdb_stdout, show, 0, &flags);
515 printf_filtered ("\n");
516
517 do_cleanups (old_chain);
518 }
519
520 static void
521 whatis_command (const char *exp, int from_tty)
522 {
523 /* Most of the time users do not want to see all the fields
524 in a structure. If they do they can use the "ptype" command.
525 Hence the "-1" below. */
526 whatis_exp (exp, -1);
527 }
528
529 /* TYPENAME is either the name of a type, or an expression. */
530
531 static void
532 ptype_command (const char *type_name, int from_tty)
533 {
534 whatis_exp (type_name, 1);
535 }
536
537 /* Print integral scalar data VAL, of type TYPE, onto stdio stream STREAM.
538 Used to print data from type structures in a specified type. For example,
539 array bounds may be characters or booleans in some languages, and this
540 allows the ranges to be printed in their "natural" form rather than as
541 decimal integer values.
542
543 FIXME: This is here simply because only the type printing routines
544 currently use it, and it wasn't clear if it really belonged somewhere
545 else (like printcmd.c). There are a lot of other gdb routines that do
546 something similar, but they are generally concerned with printing values
547 that come from the inferior in target byte order and target size. */
548
549 void
550 print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
551 {
552 unsigned int i;
553 unsigned len;
554
555 type = check_typedef (type);
556
557 switch (TYPE_CODE (type))
558 {
559
560 case TYPE_CODE_ENUM:
561 len = TYPE_NFIELDS (type);
562 for (i = 0; i < len; i++)
563 {
564 if (TYPE_FIELD_ENUMVAL (type, i) == val)
565 {
566 break;
567 }
568 }
569 if (i < len)
570 {
571 fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
572 }
573 else
574 {
575 print_longest (stream, 'd', 0, val);
576 }
577 break;
578
579 case TYPE_CODE_INT:
580 print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0, val);
581 break;
582
583 case TYPE_CODE_CHAR:
584 LA_PRINT_CHAR ((unsigned char) val, type, stream);
585 break;
586
587 case TYPE_CODE_BOOL:
588 fprintf_filtered (stream, val ? "TRUE" : "FALSE");
589 break;
590
591 case TYPE_CODE_RANGE:
592 print_type_scalar (TYPE_TARGET_TYPE (type), val, stream);
593 return;
594
595 case TYPE_CODE_UNDEF:
596 case TYPE_CODE_PTR:
597 case TYPE_CODE_ARRAY:
598 case TYPE_CODE_STRUCT:
599 case TYPE_CODE_UNION:
600 case TYPE_CODE_FUNC:
601 case TYPE_CODE_FLT:
602 case TYPE_CODE_VOID:
603 case TYPE_CODE_SET:
604 case TYPE_CODE_STRING:
605 case TYPE_CODE_ERROR:
606 case TYPE_CODE_MEMBERPTR:
607 case TYPE_CODE_METHODPTR:
608 case TYPE_CODE_METHOD:
609 case TYPE_CODE_REF:
610 case TYPE_CODE_RVALUE_REF:
611 case TYPE_CODE_NAMESPACE:
612 error (_("internal error: unhandled type in print_type_scalar"));
613 break;
614
615 default:
616 error (_("Invalid type code in symbol table."));
617 }
618 gdb_flush (stream);
619 }
620
621 /* Dump details of a type specified either directly or indirectly.
622 Uses the same sort of type lookup mechanism as ptype_command()
623 and whatis_command(). */
624
625 void
626 maintenance_print_type (const char *type_name, int from_tty)
627 {
628 struct value *val;
629 struct type *type;
630
631 if (type_name != NULL)
632 {
633 expression_up expr = parse_expression (type_name);
634 if (expr->elts[0].opcode == OP_TYPE)
635 {
636 /* The user expression names a type directly, just use that type. */
637 type = expr->elts[1].type;
638 }
639 else
640 {
641 /* The user expression may name a type indirectly by naming an
642 object of that type. Find that indirectly named type. */
643 val = evaluate_type (expr.get ());
644 type = value_type (val);
645 }
646 if (type != NULL)
647 {
648 recursive_dump_type (type, 0);
649 }
650 }
651 }
652 \f
653
654 struct cmd_list_element *setprinttypelist;
655
656 struct cmd_list_element *showprinttypelist;
657
658 static void
659 set_print_type (const char *arg, int from_tty)
660 {
661 printf_unfiltered (
662 "\"set print type\" must be followed by the name of a subcommand.\n");
663 help_list (setprintlist, "set print type ", all_commands, gdb_stdout);
664 }
665
666 static void
667 show_print_type (const char *args, int from_tty)
668 {
669 cmd_show_list (showprinttypelist, from_tty, "");
670 }
671
672 static int print_methods = 1;
673
674 static void
675 set_print_type_methods (const char *args,
676 int from_tty, struct cmd_list_element *c)
677 {
678 default_ptype_flags.print_methods = print_methods;
679 }
680
681 static void
682 show_print_type_methods (struct ui_file *file, int from_tty,
683 struct cmd_list_element *c, const char *value)
684 {
685 fprintf_filtered (file, _("Printing of methods defined in a class in %s\n"),
686 value);
687 }
688
689 static int print_typedefs = 1;
690
691 static void
692 set_print_type_typedefs (const char *args,
693 int from_tty, struct cmd_list_element *c)
694 {
695 default_ptype_flags.print_typedefs = print_typedefs;
696 }
697
698 static void
699 show_print_type_typedefs (struct ui_file *file, int from_tty,
700 struct cmd_list_element *c, const char *value)
701 {
702 fprintf_filtered (file, _("Printing of typedefs defined in a class in %s\n"),
703 value);
704 }
705
706 void
707 _initialize_typeprint (void)
708 {
709 struct cmd_list_element *c;
710
711 c = add_com ("ptype", class_vars, ptype_command, _("\
712 Print definition of type TYPE.\n\
713 Usage: ptype[/FLAGS] TYPE | EXPRESSION\n\
714 Argument may be any type (for example a type name defined by typedef,\n\
715 or \"struct STRUCT-TAG\" or \"class CLASS-NAME\" or \"union UNION-TAG\"\n\
716 or \"enum ENUM-TAG\") or an expression.\n\
717 The selected stack frame's lexical context is used to look up the name.\n\
718 Contrary to \"whatis\", \"ptype\" always unrolls any typedefs.\n\
719 \n\
720 Available FLAGS are:\n\
721 /r print in \"raw\" form; do not substitute typedefs\n\
722 /m do not print methods defined in a class\n\
723 /M print methods defined in a class\n\
724 /t do not print typedefs defined in a class\n\
725 /T print typedefs defined in a class"));
726 set_cmd_completer (c, expression_completer);
727
728 c = add_com ("whatis", class_vars, whatis_command,
729 _("Print data type of expression EXP.\n\
730 Only one level of typedefs is unrolled. See also \"ptype\"."));
731 set_cmd_completer (c, expression_completer);
732
733 add_prefix_cmd ("type", no_class, show_print_type,
734 _("Generic command for showing type-printing settings."),
735 &showprinttypelist, "show print type ", 0, &showprintlist);
736 add_prefix_cmd ("type", no_class, set_print_type,
737 _("Generic command for setting how types print."),
738 &setprinttypelist, "show print type ", 0, &setprintlist);
739
740 add_setshow_boolean_cmd ("methods", no_class, &print_methods,
741 _("\
742 Set printing of methods defined in classes."), _("\
743 Show printing of methods defined in classes."), NULL,
744 set_print_type_methods,
745 show_print_type_methods,
746 &setprinttypelist, &showprinttypelist);
747 add_setshow_boolean_cmd ("typedefs", no_class, &print_typedefs,
748 _("\
749 Set printing of typedefs defined in classes."), _("\
750 Show printing of typedefs defined in classes."), NULL,
751 set_print_type_typedefs,
752 show_print_type_typedefs,
753 &setprinttypelist, &showprinttypelist);
754 }
755
756 /* Print <not allocated> status to stream STREAM. */
757
758 void
759 val_print_not_allocated (struct ui_file *stream)
760 {
761 fprintf_filtered (stream, _("<not allocated>"));
762 }
763
764 /* Print <not associated> status to stream STREAM. */
765
766 void
767 val_print_not_associated (struct ui_file *stream)
768 {
769 fprintf_filtered (stream, _("<not associated>"));
770 }