X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fp-valprint.c;h=8334ab9fe8443f1a2c7f18e69417ec5e8f0949e4;hb=e05523bd2411bac0277da73556f4d01f6c7448aa;hp=284dc85bf8c816434c241f44d2d259c164bd6b4b;hpb=1f704f761b34e145f5eabdc222301ce6e9ec9102;p=binutils-gdb.git diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c index 284dc85bf8c..8334ab9fe84 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,8 +116,8 @@ 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 @@ -184,9 +184,9 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, pointed to, unless pointer is null. */ if (((TYPE_LENGTH (elttype) == 1 && (elttype->code () == TYPE_CODE_INT - || elttype->code () == TYPE_CODE_CHAR)) - || ((TYPE_LENGTH (elttype) == 2 || TYPE_LENGTH (elttype) == 4) - && elttype->code () == TYPE_CODE_CHAR)) + || elttype->code () == TYPE_CODE_CHAR)) + || ((TYPE_LENGTH (elttype) == 2 || TYPE_LENGTH (elttype) == 4) + && elttype->code () == TYPE_CODE_CHAR)) && (options->format == 0 || options->format == 's') && addr != 0) { @@ -200,8 +200,8 @@ 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; @@ -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 { @@ -305,23 +305,21 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, /* Extract the address, assume that it is unsigned. */ print_address_demangle (options, gdbarch, - extract_unsigned_integer (valaddr - + TYPE_FIELD_BITPOS (type, - VTBL_FNADDR_OFFSET) / 8, - TYPE_LENGTH (TYPE_FIELD_TYPE (type, - VTBL_FNADDR_OFFSET)), - byte_order), + extract_unsigned_integer + (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, @@ -330,9 +328,9 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, break; case TYPE_CODE_SET: - elttype = TYPE_INDEX_TYPE (type); + elttype = type->index_type (); elttype = check_typedef (elttype); - if (TYPE_STUB (elttype)) + if (elttype->is_stub ()) { fprintf_styled (stream, metadata_style.style (), ""); break; @@ -345,14 +343,15 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, fputs_filtered ("[", 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 maximum value. */ bound_info = 0; high_bound = TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1; - TYPE_HIGH_BOUND (range) = high_bound; + range->bounds ()->high.set_const_val (high_bound); } maybe_bad_bstring: if (bound_info < 0) @@ -403,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; @@ -421,7 +420,7 @@ pascal_value_print (struct value *val, struct ui_file *stream, || type->code () == TYPE_CODE_REF) { /* Hack: remove (char *) for char strings. Their - type is indicated by the quoted string anyway. */ + type is indicated by the quoted string anyway. */ if (type->code () == TYPE_CODE_PTR && type->name () == NULL && TYPE_TARGET_TYPE (type)->name () != NULL @@ -492,7 +491,7 @@ pascal_object_is_vtbl_member (struct type *type) || type->code () == TYPE_CODE_PTR) /* If using thunks. */ { /* Virtual functions tables are full of pointers - to virtual functions. */ + to virtual functions. */ return pascal_object_is_vtbl_ptr_type (type); } } @@ -500,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. @@ -539,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) { @@ -553,7 +550,7 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream, { /* If requested, skip printing of static fields. */ if (!options->pascal_static_field_print - && field_is_static (&TYPE_FIELD (type, i))) + && field_is_static (&type->field (i))) continue; if (fields_seen) fprintf_filtered (stream, ", "); @@ -577,43 +574,41 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream, } else { - wrap_here (n_spaces (2 + 2 * recurse)); + stream->wrap_here (2 + 2 * recurse); } - annotate_field_begin (TYPE_FIELD_TYPE (type, i)); + annotate_field_begin (type->field (i).type ()); - if (field_is_static (&TYPE_FIELD (type, i))) + if (field_is_static (&type->field (i))) { fputs_filtered ("static ", stream); fprintf_symbol_filtered (stream, - TYPE_FIELD_NAME (type, i), + 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); annotate_field_value (); - if (!field_is_static (&TYPE_FIELD (type, i)) + if (!field_is_static (&type->field (i)) && TYPE_FIELD_PACKED (type, i)) { struct value *v; /* Bitfields require special handling, especially due to byte - order problems. */ + order problems. */ if (TYPE_FIELD_IGNORE (type, i)) { 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); @@ -636,7 +631,7 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream, fputs_styled ("", metadata_style.style (), stream); } - else if (field_is_static (&TYPE_FIELD (type, i))) + else if (field_is_static (&type->field (i))) { /* struct value *v = value_static_field (type, i); v4.17 specific. */ @@ -700,8 +695,8 @@ pascal_object_print_value (struct value *val, struct ui_file *stream, if (dont_print_vb == 0) { /* If we're at top level, carve out a completely fresh - chunk of the obstack and use that until this particular - invocation returns. */ + chunk of the obstack and use that until this particular + invocation returns. */ /* Bump up the high-water mark. Now alpha is omega. */ obstack_finish (&dont_print_vb_obstack); } @@ -771,7 +766,7 @@ pascal_object_print_value (struct value *val, struct ui_file *stream, } fputs_filtered ("<", stream); /* Not sure what the best notation is in the case where there is no - baseclass name. */ + baseclass name. */ fputs_filtered (basename ? basename : "", stream); fputs_filtered ("> = ", stream); @@ -794,10 +789,10 @@ pascal_object_print_value (struct value *val, struct ui_file *stream, if (dont_print_vb == 0) { /* Free the space used to deal with the printing - of this type from top level. */ + of this type from top level. */ obstack_free (&dont_print_vb_obstack, last_dont_print); /* Reset watermark so that we can continue protecting - ourselves from whatever we were protecting ourselves. */ + ourselves from whatever we were protecting ourselves. */ dont_print_vb_obstack = tmp_obstack; } }