X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fgo-valprint.c;h=1933e98ed29e3daca53082e9722ee44b4a865eed;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=edef92c7b1eab39e0235e7ac57af73b6d5866663;hpb=28e7fd62340426746f9c896cbc40c5d374ec47aa;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/go-valprint.c b/gdb/go-valprint.c index edef92c7b1..1933e98ed2 100644 --- a/gdb/go-valprint.c +++ b/gdb/go-valprint.c @@ -1,6 +1,6 @@ /* Support for printing Go values for GDB, the GNU debugger. - Copyright (C) 2012-2013 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -29,6 +29,7 @@ #include "go-lang.h" #include "c-lang.h" #include "valprint.h" +#include "cli/cli-style.h" /* Print a Go string. @@ -36,10 +37,10 @@ gdb_assert (go_classify_struct_type (type) == GO_TYPE_STRING). */ static void -print_go_string (struct type *type, const gdb_byte *valaddr, - int embedded_offset, CORE_ADDR address, +print_go_string (struct type *type, + LONGEST embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options) { struct gdbarch *gdbarch = get_type_arch (type); @@ -51,8 +52,8 @@ print_go_string (struct type *type, const gdb_byte *valaddr, unpack_value_field_as_pointer. Do this until we can get unpack_value_field_as_pointer. */ LONGEST addr; + const gdb_byte *valaddr = value_contents_for_printing (val); - gdb_assert (valaddr == value_contents_for_printing_const (val)); if (! unpack_value_field_as_long (type, valaddr, embedded_offset, 0, val, &addr)) @@ -71,9 +72,9 @@ print_go_string (struct type *type, const gdb_byte *valaddr, if (length < 0) { - fputs_filtered (_("", stream); + printf_filtered (_(""), + styled_string (metadata_style.style (), + plongest (addr))); return; } @@ -83,17 +84,15 @@ print_go_string (struct type *type, const gdb_byte *valaddr, val_print_string (elt_type, NULL, addr, length, stream, options); } -/* Implements the la_val_print routine for language Go. */ +/* See go-lang.h. */ void -go_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, - CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, - const struct value_print_options *options) +go_value_print_inner (struct value *val, struct ui_file *stream, + int recurse, const struct value_print_options *options) { - CHECK_TYPEDEF (type); + struct type *type = check_typedef (value_type (val)); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_STRUCT: { @@ -104,7 +103,8 @@ go_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, case GO_TYPE_STRING: if (! options->raw) { - print_go_string (type, valaddr, embedded_offset, address, + print_go_string (type, value_embedded_offset (val), + value_address (val), stream, recurse, val, options); return; } @@ -116,8 +116,7 @@ go_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, /* Fall through. */ default: - c_val_print (type, valaddr, embedded_offset, address, stream, - recurse, val, options); + c_value_print_inner (val, stream, recurse, options); break; } }