X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Ff-valprint.c;h=60611fef4948bb8f916ae7ba6de95967f11ffde3;hb=7697afb662b2ffd67d044209d6d807a8e21dfed9;hp=8eb8062496250efaefc101d24fec19bbc386d6e6;hpb=3d6e9d2336c9ffcedb10f89631981a23dd518e8e;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c index 8eb8062496..60611fef49 100644 --- a/gdb/f-valprint.c +++ b/gdb/f-valprint.c @@ -1,6 +1,6 @@ /* Support for printing Fortran values for GDB, the GNU debugger. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Contributed by Motorola. Adapted from the C definitions by Farooq Butt (fmbutt@engage.sps.mot.com), additionally worked over by Stan Shebs. @@ -33,6 +33,8 @@ #include "command.h" #include "block.h" #include "dictionary.h" +#include "cli/cli-style.h" +#include "gdbarch.h" static void f77_get_dynamic_length_of_aggregate (struct type *); @@ -119,7 +121,12 @@ f77_print_array_1 (int nss, int ndimensions, struct type *type, if (nss != ndimensions) { - size_t dim_size = TYPE_LENGTH (TYPE_TARGET_TYPE (type)); + struct gdbarch *gdbarch = get_type_arch (type); + size_t dim_size = type_length_units (TYPE_TARGET_TYPE (type)); + int unit_size = gdbarch_addressable_memory_unit_size (gdbarch); + size_t byte_stride = TYPE_ARRAY_BIT_STRIDE (type) / (unit_size * 8); + if (byte_stride == 0) + byte_stride = dim_size; size_t offs = 0; for (i = lowerbound; @@ -136,7 +143,7 @@ f77_print_array_1 (int nss, int ndimensions, struct type *type, value_embedded_offset (subarray), value_address (subarray), stream, recurse, subarray, options, elts); - offs += dim_size; + offs += byte_stride; fprintf_filtered (stream, ") "); } if (*elts >= options->print_max && i < upperbound) @@ -199,7 +206,7 @@ static const struct generic_val_print_decorations f_decorations = ")", ".TRUE.", ".FALSE.", - "VOID", + "void", "{", "}" }; @@ -386,17 +393,17 @@ info_common_command_for_block (const struct block *block, const char *comname, gdb_assert (SYMBOL_CLASS (sym) == LOC_COMMON_BLOCK); - if (comname && (!SYMBOL_LINKAGE_NAME (sym) - || strcmp (comname, SYMBOL_LINKAGE_NAME (sym)) != 0)) + if (comname && (!sym->linkage_name () + || strcmp (comname, sym->linkage_name ()) != 0)) continue; if (*any_printed) putchar_filtered ('\n'); else *any_printed = 1; - if (SYMBOL_PRINT_NAME (sym)) + if (sym->print_name ()) printf_filtered (_("Contents of F77 COMMON block '%s':\n"), - SYMBOL_PRINT_NAME (sym)); + sym->print_name ()); else printf_filtered (_("Contents of blank COMMON block:\n")); @@ -405,20 +412,20 @@ info_common_command_for_block (const struct block *block, const char *comname, struct value *val = NULL; printf_filtered ("%s = ", - SYMBOL_PRINT_NAME (common->contents[index])); + common->contents[index]->print_name ()); - TRY + try { val = value_of_variable (common->contents[index], block); value_print (val, gdb_stdout, &opts); } - CATCH (except, RETURN_MASK_ERROR) + catch (const gdb_exception_error &except) { - printf_filtered ("", - except.what ()); + fprintf_styled (gdb_stdout, metadata_style.style (), + "", + except.what ()); } - END_CATCH putchar_filtered ('\n'); }