X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fp-valprint.c;h=43c286d6472705cd3bfdda9c27a3daaa660faef2;hb=1d2eeb660f0885807320792ee18c033b34522225;hp=428b2efc656629472d2ea96731b7e5fc2771939e;hpb=dda83cd783075941aabe9b0292b004b11f00c831;p=binutils-gdb.git diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c index 428b2efc656..43c286d6472 100644 --- a/gdb/p-valprint.c +++ b/gdb/p-valprint.c @@ -1,6 +1,6 @@ /* Support for printing Pascal values for GDB, the GNU debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2022 Free Software Foundation, Inc. This file is part of GDB. @@ -20,7 +20,7 @@ /* This file is derived from c-valprint.c */ #include "defs.h" -#include "gdb_obstack.h" +#include "gdbsupport/gdb_obstack.h" #include "symtab.h" #include "gdbtypes.h" #include "expression.h" @@ -64,13 +64,13 @@ static const struct generic_val_print_decorations p_decorations = /* See p-lang.h. */ void -pascal_value_print_inner (struct value *val, struct ui_file *stream, - int recurse, - const struct value_print_options *options) +pascal_language::value_print_inner (struct value *val, + struct ui_file *stream, int recurse, + const struct value_print_options *options) const { struct type *type = check_typedef (value_type (val)); - struct gdbarch *gdbarch = get_type_arch (type); + struct gdbarch *gdbarch = type->arch (); enum bfd_endian byte_order = type_byte_order (type); unsigned int i = 0; /* Number of characters printed */ unsigned len; @@ -80,7 +80,7 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, struct type *char_type; CORE_ADDR addr; int want_space = 0; - const gdb_byte *valaddr = value_contents_for_printing (val); + const gdb_byte *valaddr = value_contents_for_printing (val).data (); switch (type->code ()) { @@ -116,26 +116,26 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, len = temp_len; } - LA_PRINT_STRING (stream, TYPE_TARGET_TYPE (type), - valaddr, len, NULL, 0, options); + printstr (stream, TYPE_TARGET_TYPE (type), valaddr, len, + NULL, 0, options); i = len; } else { - fprintf_filtered (stream, "{"); + gdb_printf (stream, "{"); /* If this is a virtual function table, print the 0th entry specially, and the rest of the members normally. */ if (pascal_object_is_vtbl_ptr_type (elttype)) { i = 1; - fprintf_filtered (stream, "%d vtable entries", len - 1); + gdb_printf (stream, "%d vtable entries", len - 1); } else { i = 0; } value_print_array_elements (val, stream, recurse, options, i); - fprintf_filtered (stream, "}"); + gdb_printf (stream, "}"); } break; } @@ -176,7 +176,7 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, if (options->addressprint && options->format != 's') { - fputs_filtered (paddress (gdbarch, addr), stream); + gdb_puts (paddress (gdbarch, addr), stream); want_space = 1; } @@ -191,7 +191,7 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, && addr != 0) { if (want_space) - fputs_filtered (" ", stream); + gdb_puts (" ", stream); /* No wide string yet. */ i = val_print_string (elttype, NULL, addr, -1, stream, options); } @@ -200,15 +200,15 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, as GDB does not recognize stabs pascal strings Pascal strings are mapped to records with lowercase names PM. */ - if (is_pascal_string_type (elttype, &length_pos, &length_size, - &string_pos, &char_type, NULL) + if (pascal_is_string_type (elttype, &length_pos, &length_size, + &string_pos, &char_type, NULL) > 0 && addr != 0) { ULONGEST string_length; gdb_byte *buffer; if (want_space) - fputs_filtered (" ", stream); + gdb_puts (" ", stream); buffer = (gdb_byte *) xmalloc (length_size); read_memory (addr + length_pos, buffer, length_size); string_length = extract_unsigned_integer (buffer, length_size, @@ -228,13 +228,13 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, /* If 'symbol_print' is set, we did the work above. */ if (!options->symbol_print && (msymbol.minsym != NULL) - && (vt_address == BMSYMBOL_VALUE_ADDRESS (msymbol))) + && (vt_address == msymbol.value_address ())) { if (want_space) - fputs_filtered (" ", stream); - fputs_filtered ("<", stream); - fputs_filtered (msymbol.minsym->print_name (), stream); - fputs_filtered (">", stream); + gdb_puts (" ", stream); + gdb_puts ("<", stream); + gdb_puts (msymbol.minsym->print_name (), stream); + gdb_puts (">", stream); want_space = 1; } if (vt_address && options->vtblprint) @@ -244,7 +244,7 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, struct type *wtype; if (want_space) - fputs_filtered (" ", stream); + gdb_puts (" ", stream); if (msymbol.minsym != NULL) { @@ -255,7 +255,7 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, if (wsym) { - wtype = SYMBOL_TYPE (wsym); + wtype = wsym->type (); } else { @@ -266,8 +266,8 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, current_language); if (options->prettyformat) { - fprintf_filtered (stream, "\n"); - print_spaces_filtered (2 + 2 * recurse, stream); + gdb_printf (stream, "\n"); + print_spaces (2 + 2 * recurse, stream); } } } @@ -292,7 +292,7 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, case TYPE_CODE_UNION: if (recurse && !options->unionprint) { - fprintf_filtered (stream, "{...}"); + gdb_printf (stream, "{...}"); break; } /* Fall through. */ @@ -306,20 +306,20 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, print_address_demangle (options, gdbarch, extract_unsigned_integer - (valaddr + TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8, + (valaddr + type->field (VTBL_FNADDR_OFFSET).loc_bitpos () / 8, TYPE_LENGTH (type->field (VTBL_FNADDR_OFFSET).type ()), byte_order), stream, demangle); } else { - if (is_pascal_string_type (type, &length_pos, &length_size, - &string_pos, &char_type, NULL)) + if (pascal_is_string_type (type, &length_pos, &length_size, + &string_pos, &char_type, NULL) > 0) { len = extract_unsigned_integer (valaddr + length_pos, length_size, byte_order); - LA_PRINT_STRING (stream, char_type, valaddr + string_pos, - len, NULL, 0, options); + printstr (stream, char_type, valaddr + string_pos, len, + NULL, 0, options); } else pascal_object_print_value_fields (val, stream, recurse, @@ -341,9 +341,10 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, LONGEST low_bound, high_bound; int need_comma = 0; - fputs_filtered ("[", stream); + gdb_puts ("[", stream); - int bound_info = get_discrete_bounds (range, &low_bound, &high_bound); + int bound_info = (get_discrete_bounds (range, &low_bound, &high_bound) + ? 0 : -1); if (low_bound == 0 && high_bound == -1 && TYPE_LENGTH (type) > 0) { /* If we know the size of the set type, we can figure out the @@ -371,7 +372,7 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, if (element) { if (need_comma) - fputs_filtered (", ", stream); + gdb_puts (", ", stream); print_type_scalar (range, i, stream); need_comma = 1; @@ -380,7 +381,7 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, { int j = i; - fputs_filtered ("..", stream); + gdb_puts ("..", stream); while (i + 1 <= high_bound && value_bit_index (type, valaddr, ++i)) j = i; @@ -389,7 +390,7 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, } } done: - fputs_filtered ("]", stream); + gdb_puts ("]", stream); } break; @@ -401,8 +402,8 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, void -pascal_value_print (struct value *val, struct ui_file *stream, - const struct value_print_options *options) +pascal_language::value_print (struct value *val, struct ui_file *stream, + const struct value_print_options *options) const { struct type *type = value_type (val); struct value_print_options opts = *options; @@ -429,9 +430,9 @@ pascal_value_print (struct value *val, struct ui_file *stream, } else { - fprintf_filtered (stream, "("); + gdb_printf (stream, "("); type_print (type, "", stream, -1); - fprintf_filtered (stream, ") "); + gdb_printf (stream, ") "); } } common_val_print (val, stream, 0, &opts, current_language); @@ -442,8 +443,8 @@ static void show_pascal_static_field_print (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) { - fprintf_filtered (file, _("Printing of pascal static members is %s.\n"), - value); + gdb_printf (file, _("Printing of pascal static members is %s.\n"), + value); } static struct obstack dont_print_vb_obstack; @@ -498,9 +499,7 @@ pascal_object_is_vtbl_member (struct type *type) return 0; } -/* Mutually recursive subroutines of pascal_object_print_value and - pascal_value_print to print out a structure's fields: - pascal_object_print_value_fields and pascal_object_print_value. +/* Helper function for print pascal objects. VAL, STREAM, RECURSE, and OPTIONS have the same meanings as in pascal_object_print_value and c_value_print. @@ -521,7 +520,7 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream, struct type *type = check_typedef (value_type (val)); - fprintf_filtered (stream, "{"); + gdb_printf (stream, "{"); len = type->num_fields (); n_baseclasses = TYPE_N_BASECLASSES (type); @@ -537,7 +536,7 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream, { struct obstack tmp_obstack = dont_print_statmem_obstack; int fields_seen = 0; - const gdb_byte *valaddr = value_contents_for_printing (val); + const gdb_byte *valaddr = value_contents_for_printing (val).data (); if (dont_print_statmem == 0) { @@ -554,45 +553,45 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream, && field_is_static (&type->field (i))) continue; if (fields_seen) - fprintf_filtered (stream, ", "); + gdb_printf (stream, ", "); else if (n_baseclasses > 0) { if (options->prettyformat) { - fprintf_filtered (stream, "\n"); - print_spaces_filtered (2 + 2 * recurse, stream); - fputs_filtered ("members of ", stream); - fputs_filtered (type->name (), stream); - fputs_filtered (": ", stream); + gdb_printf (stream, "\n"); + print_spaces (2 + 2 * recurse, stream); + gdb_puts ("members of ", stream); + gdb_puts (type->name (), stream); + gdb_puts (": ", stream); } } fields_seen = 1; if (options->prettyformat) { - fprintf_filtered (stream, "\n"); - print_spaces_filtered (2 + 2 * recurse, stream); + gdb_printf (stream, "\n"); + print_spaces (2 + 2 * recurse, stream); } else { - wrap_here (n_spaces (2 + 2 * recurse)); + stream->wrap_here (2 + 2 * recurse); } annotate_field_begin (type->field (i).type ()); if (field_is_static (&type->field (i))) { - fputs_filtered ("static ", stream); - fprintf_symbol_filtered (stream, - TYPE_FIELD_NAME (type, i), - current_language->la_language, - DMGL_PARAMS | DMGL_ANSI); + gdb_puts ("static ", stream); + fprintf_symbol (stream, + type->field (i).name (), + current_language->la_language, + DMGL_PARAMS | DMGL_ANSI); } else - fputs_styled (TYPE_FIELD_NAME (type, i), + fputs_styled (type->field (i).name (), variable_name_style.style (), stream); annotate_field_name_end (); - fputs_filtered (" = ", stream); + gdb_puts (" = ", stream); annotate_field_value (); if (!field_is_static (&type->field (i)) @@ -607,11 +606,9 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream, fputs_styled ("", metadata_style.style (), stream); } - else if (value_bits_synthetic_pointer (val, - TYPE_FIELD_BITPOS (type, - i), - TYPE_FIELD_BITSIZE (type, - i))) + else if (value_bits_synthetic_pointer + (val, type->field (i).loc_bitpos (), + TYPE_FIELD_BITSIZE (type, i))) { fputs_styled (_(""), metadata_style.style (), stream); @@ -673,11 +670,11 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream, if (options->prettyformat) { - fprintf_filtered (stream, "\n"); - print_spaces_filtered (2 * recurse, stream); + gdb_printf (stream, "\n"); + print_spaces (2 * recurse, stream); } } - fprintf_filtered (stream, "}"); + gdb_printf (stream, "}"); } /* Special val_print routine to avoid printing multiple copies of virtual @@ -764,15 +761,15 @@ pascal_object_print_value (struct value *val, struct ui_file *stream, if (options->prettyformat) { - fprintf_filtered (stream, "\n"); - print_spaces_filtered (2 * recurse, stream); + gdb_printf (stream, "\n"); + print_spaces (2 * recurse, stream); } - fputs_filtered ("<", stream); + gdb_puts ("<", stream); /* Not sure what the best notation is in the case where there is no baseclass name. */ - fputs_filtered (basename ? basename : "", stream); - fputs_filtered ("> = ", stream); + gdb_puts (basename ? basename : "", stream); + gdb_puts ("> = ", stream); if (skip < 0) val_print_unavailable (stream); @@ -783,7 +780,7 @@ pascal_object_print_value (struct value *val, struct ui_file *stream, (base_value, stream, recurse, options, (struct type **) obstack_base (&dont_print_vb_obstack), 0); - fputs_filtered (", ", stream); + gdb_puts (", ", stream); flush_it: ;