X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Ftypeprint.c;h=3356bdde2e782bcf1551a39762b23625b1dcbbbd;hb=8c9ae6df3c244a7a738085ab461cb098df1d46f6;hp=eb47d9129f9bd6bddd1c5961d1f353a13ca20b88;hpb=fbb46296d7e0d09e792a7c9d7841cb26753cb3ce;p=binutils-gdb.git diff --git a/gdb/typeprint.c b/gdb/typeprint.c index eb47d9129f9..3356bdde2e7 100644 --- a/gdb/typeprint.c +++ b/gdb/typeprint.c @@ -1,6 +1,6 @@ /* Language independent support for printing types for GDB, the GNU debugger. - Copyright (C) 1986-2021 Free Software Foundation, Inc. + Copyright (C) 1986-2022 Free Software Foundation, Inc. This file is part of GDB. @@ -18,7 +18,7 @@ along with this program. If not, see . */ #include "defs.h" -#include "gdb_obstack.h" +#include "gdbsupport/gdb_obstack.h" #include "bfd.h" /* Binary File Description */ #include "symtab.h" #include "gdbtypes.h" @@ -104,12 +104,18 @@ print_offset_data::maybe_print_hole (struct ui_file *stream, unsigned int hole_bit = hole % TARGET_CHAR_BIT; if (hole_bit > 0) - fprintf_filtered (stream, "/* XXX %2u-bit %-7s */\n", hole_bit, - for_what); + { + fprintf_styled (stream, highlight_style.style (), + "/* XXX %2u-bit %-7s */", hole_bit, for_what); + gdb_puts ("\n", stream); + } if (hole_byte > 0) - fprintf_filtered (stream, "/* XXX %2u-byte %-7s */\n", hole_byte, - for_what); + { + fprintf_styled (stream, highlight_style.style (), + "/* XXX %2u-byte %-7s */", hole_byte, for_what); + gdb_puts ("\n", stream); + } } } @@ -121,7 +127,7 @@ print_offset_data::update (struct type *type, unsigned int field_idx, { if (field_is_static (&type->field (field_idx))) { - print_spaces_filtered (indentation, stream); + print_spaces (indentation, stream); return; } @@ -130,14 +136,14 @@ print_offset_data::update (struct type *type, unsigned int field_idx, { /* Since union fields don't have the concept of offsets, we just print their sizes. */ - fprintf_filtered (stream, "/* %6s */", - (print_in_hex ? - hex_string_custom (TYPE_LENGTH (ftype), 4) : - pulongest (TYPE_LENGTH (ftype)))); + gdb_printf (stream, "/* %6s */", + (print_in_hex ? + hex_string_custom (TYPE_LENGTH (ftype), 4) : + pulongest (TYPE_LENGTH (ftype)))); return; } - unsigned int bitpos = TYPE_FIELD_BITPOS (type, field_idx); + unsigned int bitpos = type->field (field_idx).loc_bitpos (); unsigned int fieldsize_byte = TYPE_LENGTH (ftype); unsigned int fieldsize_bit = fieldsize_byte * TARGET_CHAR_BIT; @@ -151,23 +157,23 @@ print_offset_data::update (struct type *type, unsigned int field_idx, unsigned real_bitpos = bitpos + offset_bitpos; - fprintf_filtered (stream, - (print_in_hex ? "/* 0x%04x: 0x%x" : "/* %6u:%2u "), - real_bitpos / TARGET_CHAR_BIT, - real_bitpos % TARGET_CHAR_BIT); + gdb_printf (stream, + (print_in_hex ? "/* 0x%04x: 0x%x" : "/* %6u:%2u "), + real_bitpos / TARGET_CHAR_BIT, + real_bitpos % TARGET_CHAR_BIT); } else { /* The position of the field, relative to the beginning of the struct. */ - fprintf_filtered (stream, (print_in_hex ? "/* 0x%04x" : "/* %6u"), - (bitpos + offset_bitpos) / TARGET_CHAR_BIT); + gdb_printf (stream, (print_in_hex ? "/* 0x%04x" : "/* %6u"), + (bitpos + offset_bitpos) / TARGET_CHAR_BIT); - fprintf_filtered (stream, " "); + gdb_printf (stream, " "); } - fprintf_filtered (stream, (print_in_hex ? " | 0x%04x */" : " | %6u */"), - fieldsize_byte); + gdb_printf (stream, (print_in_hex ? " | 0x%04x */" : " | %6u */"), + fieldsize_byte); end_bitpos = bitpos + fieldsize_bit; } @@ -181,10 +187,10 @@ print_offset_data::finish (struct type *type, int level, unsigned int bitpos = TYPE_LENGTH (type) * TARGET_CHAR_BIT; maybe_print_hole (stream, bitpos, "padding"); - fputs_filtered ("\n", stream); - print_spaces_filtered (level + 4 + print_offset_data::indentation, stream); - fprintf_filtered (stream, "/* total size (bytes): %4s */\n", - pulongest (TYPE_LENGTH (type))); + gdb_puts ("\n", stream); + print_spaces (level + 4 + print_offset_data::indentation, stream); + gdb_printf (stream, "/* total size (bytes): %4s */\n", + pulongest (TYPE_LENGTH (type))); } @@ -195,9 +201,8 @@ static hashval_t hash_typedef_field (const void *p) { const struct decl_field *tf = (const struct decl_field *) p; - struct type *t = check_typedef (tf->type); - return htab_hash_string (TYPE_SAFE_NAME (t)); + return htab_hash_string (TYPE_SAFE_NAME (tf->type)); } /* An equality function for a typedef field. */ @@ -249,12 +254,12 @@ typedef_hash_table::add_template_parameters (struct type *t) void **slot; /* We only want type-valued template parameters in the hash. */ - if (SYMBOL_CLASS (TYPE_TEMPLATE_ARGUMENT (t, i)) != LOC_TYPEDEF) + if (TYPE_TEMPLATE_ARGUMENT (t, i)->aclass () != LOC_TYPEDEF) continue; tf = XOBNEW (&m_storage, struct decl_field); tf->name = TYPE_TEMPLATE_ARGUMENT (t, i)->linkage_name (); - tf->type = SYMBOL_TYPE (TYPE_TEMPLATE_ARGUMENT (t, i)); + tf->type = TYPE_TEMPLATE_ARGUMENT (t, i)->type (); slot = htab_find_slot (m_table.get (), tf, INSERT); if (*slot == NULL) @@ -386,7 +391,8 @@ void type_print (struct type *type, const char *varstring, struct ui_file *stream, int show) { - LA_PRINT_TYPE (type, varstring, stream, show, 0, &default_ptype_flags); + current_language->print_type (type, varstring, stream, show, 0, + &default_ptype_flags); } /* Print TYPE to a string, returning it. The caller is responsible for @@ -400,7 +406,7 @@ type_to_string (struct type *type) string_file stb; type_print (type, "", &stb, -1); - return std::move (stb.string ()); + return stb.release (); } catch (const gdb_exception &except) { @@ -538,7 +544,7 @@ whatis_exp (const char *exp, int show) get_user_print_options (&opts); if (val != NULL && opts.objectprint) { - if (((type->code () == TYPE_CODE_PTR) || TYPE_IS_REFERENCE (type)) + if (type->is_pointer_or_reference () && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_STRUCT)) real_type = value_rtti_indirect_type (val, &full, &top, &using_enc); else if (type->code () == TYPE_CODE_STRUCT) @@ -548,9 +554,9 @@ whatis_exp (const char *exp, int show) if (flags.print_offsets && (type->code () == TYPE_CODE_STRUCT || type->code () == TYPE_CODE_UNION)) - fprintf_filtered (gdb_stdout, "/* offset | size */ "); + gdb_printf ("/* offset | size */ "); - printf_filtered ("type = "); + gdb_printf ("type = "); std::unique_ptr table_holder; std::unique_ptr printer_holder; @@ -565,15 +571,15 @@ whatis_exp (const char *exp, int show) if (real_type) { - printf_filtered ("/* real type = "); + gdb_printf ("/* real type = "); type_print (real_type, "", gdb_stdout, -1); if (! full) - printf_filtered (" (incomplete object)"); - printf_filtered (" */\n"); + gdb_printf (" (incomplete object)"); + gdb_printf (" */\n"); } - LA_PRINT_TYPE (type, "", gdb_stdout, show, 0, &flags); - printf_filtered ("\n"); + current_language->print_type (type, "", gdb_stdout, show, 0, &flags); + gdb_printf ("\n"); } static void @@ -620,14 +626,14 @@ print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream) len = type->num_fields (); for (i = 0; i < len; i++) { - if (TYPE_FIELD_ENUMVAL (type, i) == val) + if (type->field (i).loc_enumval () == val) { break; } } if (i < len) { - fputs_filtered (TYPE_FIELD_NAME (type, i), stream); + gdb_puts (type->field (i).name (), stream); } else { @@ -640,11 +646,11 @@ print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream) break; case TYPE_CODE_CHAR: - LA_PRINT_CHAR ((unsigned char) val, type, stream); + current_language->printchar ((unsigned char) val, type, stream); break; case TYPE_CODE_BOOL: - fprintf_filtered (stream, val ? "TRUE" : "FALSE"); + gdb_printf (stream, val ? "TRUE" : "FALSE"); break; case TYPE_CODE_RANGE: @@ -687,8 +693,8 @@ print_type_fixed_point (struct type *type, struct ui_file *stream) { std::string small_img = type->fixed_point_scaling_factor ().str (); - fprintf_filtered (stream, "%s-byte fixed point (small = %s)", - pulongest (TYPE_LENGTH (type)), small_img.c_str ()); + gdb_printf (stream, "%s-byte fixed point (small = %s)", + pulongest (TYPE_LENGTH (type)), small_img.c_str ()); } /* Dump details of a type specified either directly or indirectly. @@ -727,8 +733,8 @@ static void show_print_type_methods (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) { - fprintf_filtered (file, _("Printing of methods defined in a class in %s\n"), - value); + gdb_printf (file, _("Printing of methods defined in a class in %s\n"), + value); } static bool print_typedefs = true; @@ -744,8 +750,8 @@ static void show_print_type_typedefs (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) { - fprintf_filtered (file, _("Printing of typedefs defined in a class in %s\n"), - value); + gdb_printf (file, _("Printing of typedefs defined in a class in %s\n"), + value); } /* Limit on the number of nested type definitions to print or -1 to print @@ -772,14 +778,14 @@ show_print_type_nested_types (struct ui_file *file, int from_tty, { if (*value == '0') { - fprintf_filtered (file, - _("Will not print nested types defined in a class\n")); + gdb_printf (file, + _("Will not print nested types defined in a class\n")); } else { - fprintf_filtered (file, - _("Will print %s nested types defined in a class\n"), - value); + gdb_printf (file, + _("Will print %s nested types defined in a class\n"), + value); } } @@ -807,9 +813,9 @@ show_print_offsets_and_sizes_in_hex (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) { - fprintf_filtered (file, _("\ + gdb_printf (file, _("\ Display of struct members offsets and sizes in hexadecimal is %s\n"), - value); + value); } void _initialize_typeprint (); @@ -845,14 +851,11 @@ Available FLAGS are:\n\ Only one level of typedefs is unrolled. See also \"ptype\".")); set_cmd_completer (c, expression_completer); - add_show_prefix_cmd ("type", no_class, - _("Generic command for showing type-printing settings."), - &showprinttypelist, "show print type ", 0, - &showprintlist); - add_basic_prefix_cmd ("type", no_class, - _("Generic command for setting how types print."), - &setprinttypelist, "set print type ", 0, - &setprintlist); + add_setshow_prefix_cmd ("type", no_class, + _("Generic command for showing type-printing settings."), + _("Generic command for setting how types print."), + &setprinttypelist, &showprinttypelist, + &setprintlist, &showprintlist); add_setshow_boolean_cmd ("methods", no_class, &print_methods, _("\