From patchwork Tue Nov 8 15:29:25 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 81350 Delivered-To: patch@linaro.org Received: by 10.140.97.165 with SMTP id m34csp1607541qge; Tue, 8 Nov 2016 07:29:59 -0800 (PST) X-Received: by 10.98.3.65 with SMTP id 62mr23980156pfd.98.1478618999389; Tue, 08 Nov 2016 07:29:59 -0800 (PST) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id xy7si31260465pac.183.2016.11.08.07.29.58 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 Nov 2016 07:29:59 -0800 (PST) Received-SPF: pass (google.com: domain of gdb-patches-return-134630-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org; spf=pass (google.com: domain of gdb-patches-return-134630-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gdb-patches-return-134630-patch=linaro.org@sourceware.org; dmarc=fail (p=NONE dis=NONE) header.from=gmail.com DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; q=dns; s=default; b=rjx9 dchsd1LJaW43Mkodo4kakHJr1wyHXTFBYuoMGrhfO+RcX5zIpmM8D6S7Ph0FQzGf /FwmdGjECb0ZXJJdHkqlsaDq9fqNasVzFnBMY91RewhGiUfONtLTBxHcgaMSj1Zr qCyt6Txk4cBVRfCVCX2rLa51h7P7i4Ce6/cVoJ8= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; s=default; bh=kLYPyK3lfa ci9xKLqRx6APQZ6eo=; b=GZ3D6CmeEBpyil8EtQ06PKqAvXWr1GB9PdxlIWqL0O Fsybuo/vGvdTwbQplSxudNduss3UqChS7AOG+m9SlaINknF2dAQNbCZ5UGMsL6D5 eR1zkammB0b4YKgiq+rhBigjf19SjFo8UlzYN7DpVrpnIdCOxEWk4cUWQ3L1mC8u Y= Received: (qmail 107430 invoked by alias); 8 Nov 2016 15:29:40 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 106829 invoked by uid 89); 8 Nov 2016 15:29:39 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, RCVD_IN_SORBS_SPAM, SPF_PASS, T_FILL_THIS_FORM_SHORT autolearn=ham version=3.3.2 spammy= X-HELO: mail-qk0-f170.google.com Received: from mail-qk0-f170.google.com (HELO mail-qk0-f170.google.com) (209.85.220.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 08 Nov 2016 15:29:28 +0000 Received: by mail-qk0-f170.google.com with SMTP id n21so109823669qka.3 for ; Tue, 08 Nov 2016 07:29:27 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=jNBHPBZ21Zv1b96wP9Ro0T0uiD4DVGrbVL/SWZqkIgE=; b=Ogcd5rnm/uyqCYpXdM5jUfmAYbr3suAJGEyY9Ip6uZXetVHbJK5RXV36KT/F6/8BwR TZUI0NRt1Bg0VEsw3QlNikCgq1GJAs+tI/Lk6UwSKwzUyE/hGJ+NgU36J+BqisowFFdU m2zgsA85CFLbGkDu66ZR5P8NUj4tw8aFVhqbNs1GwcDofplzseNT2tG+w2zhnzMxjr83 IQCLscjN8aVYCULOXz+J94G4jGksFoDu1BE2df6bSLNBr2JSnm3RTubIxE760Vhfv+zZ 2/BZ1NXkhNfMiNr/g3QszcfXBmFfwbvKUAam+/XDxCeql8R4Iv0lNVzqZsyH8/FnoW/d 9GiQ== X-Gm-Message-State: ABUngveLUFgtmZj5LPmN4IOdbbBlqu/TeQN5XhCKxEOkcAgQz2WDGC/VSenGhyGXM+DhsUvgy7CNgzWB9DniCg== X-Received: by 10.55.26.156 with SMTP id l28mr13597723qkh.164.1478618966365; Tue, 08 Nov 2016 07:29:26 -0800 (PST) MIME-Version: 1.0 Received: by 10.12.149.55 with HTTP; Tue, 8 Nov 2016 07:29:25 -0800 (PST) In-Reply-To: <20161108140122.DF34310B7A8@oc8523832656.ibm.com> References: <86wpge87zz.fsf@gmail.com> <20161108140122.DF34310B7A8@oc8523832656.ibm.com> From: Yao Qi Date: Tue, 8 Nov 2016 15:29:25 +0000 Message-ID: Subject: Re: [PATCH 2/2] Remove parameter valaddr from la_val_print To: Ulrich Weigand Cc: "gdb-patches@sourceware.org" X-IsSubscribed: yes On Tue, Nov 8, 2016 at 2:01 PM, Ulrich Weigand wrote: > Yao Qi wrote: > >> If we go to the direction you suggested, val_print routines shouldn't >> assume that VAL contents are already fetched. Before we do printing, >> optimized-out checking, or available checking, we should make sure VAL >> is not lazy. Nowadays, we can't fetch the value partially, because >> 'lazy' is a bool attribute, we either fetched all contents or haven't >> fetch all contents. > > Right. But if we ever went to actually create sub-value objects, then > we might be able to take advantage of only fetching the contents for > those sub-objects are actually printed. In any case, I still think > this new patch is preferable over calling value_fetch_lazy all the > time ... > >> How is the patch below? I don't write the ChangeLog entry yet. >> Regression tested on x86_64-linux. > > Looks good to me. Thanks, I'll push it in. > >> --- a/gdb/extension.c >> +++ b/gdb/extension.c >> @@ -478,9 +478,9 @@ free_ext_lang_type_printers (struct ext_lang_type_print= >> ers *printers) >> xfree (printers); >> } >> =0C >> -/* Try to pretty-print a value of type TYPE located at VALADDR >> - + EMBEDDED_OFFSET, which came from the inferior at address ADDRESS >> - + EMBEDDED_OFFSET, onto stdio stream STREAM according to OPTIONS. >> +/* Try to pretty-print a value of type TYPE located at VAL's contents >> + buffer + EMBEDDED_OFFSET, which came from the inferior at address >> + ADDRESS + EMBEDDED_OFFSET, onto stdio stream STREAM according to OPTION= >> S. >> VAL is the whole object that came from ADDRESS. VALADDR must point to >> the head of VAL's contents buffer. >> Returns non-zero if the value was successfully pretty-printed. > > This changes the comment but not the actual implementation, this seems > to be an oversight? > It is a mistake in patch splitting. It is removed from this patch. Patch attached is pushed in, with ChangeLog entry. -- Yao (齐尧) >From e6f70b5c128b5179e0841cbe662e0a57b4e94ad5 Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Tue, 8 Nov 2016 09:42:13 +0000 Subject: [PATCH] Remove parameter valaddr from la_val_print Nowadays, we pass both val and return value of value_contents_for_printing (val) to la_val_print. The latter is unnecessary. This patch removes the second parameter of la_val_print, and get valaddr in each language's implementation by calling value_contents_for_printing. Since value_contents_for_printing calls value_fetch_lazy, I also make VAL non-const. Note that - I don't clean up the valaddr usages in each language's routines, - I don't remove valaddr from apply_ext_lang_val_pretty_printer, and extension language ops apply_val_pretty_printer. They can be done in followup patches. gdb: 2016-11-08 Yao Qi * ada-lang.h (ada_val_print): Remove second parameter. Remove const from "struct value *". * ada-valprint.c (print_field_values): Remove const from "struct value *". (val_print_packed_array_elements): Likewise. (print_variant_part): Likewise. (ada_val_print_string): Likewise. (ada_val_print_gnat_array): Likewise. (ada_val_print_ptr): Likewise. (ada_val_print_num): Likewise. (ada_val_print_enum): Likewise. (ada_val_print_flt): Likewise. (ada_val_print_union): Likewise. (ada_val_print_struct_union): Likewise. (ada_val_print_ref): Likewise. (ada_val_print_1): Remove second parameter. Remove const from "struct value *". (ada_val_print): Likewise. * c-lang.h (c_val_print): Likewise. * c-valprint.c (c_val_print_array): Remove const from "struct value *". (c_val_print_ptr): Likewise. (c_val_print_struct): Likewise. (c_val_print_union): Likewise. (c_val_print_int): Likewise. (c_val_print_memberptr): Likewise. (c_val_print): Remove second parameter. Remove const from "struct value *". All callers updated. * cp-valprint.c (cp_print_value): Remove const from "struct value *". (cp_print_value_fields): Likewise. (c_val_print_value): Likewise. * d-lang.h (d_val_print): Remove second parameter. Remove const from "struct value *". * d-valprint.c (dynamic_array_type): Likewise. (d_val_print): Likewise. * f-lang.h (f_val_print): Likewise. * f-valprint.c (f_val_print): Likewise. * go-lang.h (go_val_print): Likewise. * go-valprint.c (print_go_string): Likewise. (go_val_print): Likewise. * language.c (unk_lang_val_print): Likewise. * language.h (struct language_defn) : Likewise. Update comments. (LA_VAL_PRINT): Remove. * m2-lang.h (m2_val_print): Remove const from "struct value *". * m2-valprint.c (m2_print_array_contents): Likewise. (m2_val_print): Likewise. * p-lang.h (pascal_val_print): Remove second parameter. Remove const from "struct value *". (pascal_object_print_value_fields): Likewise. * p-valprint.c (pascal_val_print): Likewise. (pascal_object_print_value_fields): Likewise. (pascal_object_print_value): Likewise. * rust-lang.c (rust_get_disr_info): Likewise. (val_print_struct): Likewise. (rust_val_print): Likewise. * valprint.c (generic_val_print_array): Likewise. (generic_val_print_ptr): Likewise. (generic_val_print_memberptr): Likewise. (generic_val_print_ref): Likewise. (generic_val_print_enum): Likewise. (generic_val_print_flags): Likewise. (generic_val_print_func): Likewise. (generic_val_print_bool): Likewise. (generic_val_print_int): Likewise. (generic_val_print_char): Likewise. (generic_val_print_float): Likewise. (generic_val_print_decfloat): Likewise. (generic_val_print_complex): Likewise. (generic_val_print): Likewise. (val_print): Likewise. (common_val_print): Likewise. (val_print_type_code_flags): Likewise. (val_print_scalar_formatted): Likewise. (val_print_array_elements): Likewise. * valprint.h (val_print_array_elements): Update declaration. (val_print_scalar_formatted): Likewise. (generic_val_print): Likewise. * value.h (val_print): Likewise. --- gdb/ChangeLog | 84 +++++++++++++++++++++++ gdb/ada-lang.h | 4 +- gdb/ada-valprint.c | 68 ++++++++++--------- gdb/c-lang.h | 8 +-- gdb/c-valprint.c | 33 +++++----- gdb/cp-valprint.c | 13 ++-- gdb/d-lang.h | 4 +- gdb/d-valprint.c | 14 ++-- gdb/f-lang.h | 4 +- gdb/f-valprint.c | 13 ++-- gdb/go-lang.h | 4 +- gdb/go-valprint.c | 14 ++-- gdb/infcmd.c | 3 - gdb/language.c | 4 +- gdb/language.h | 9 +-- gdb/m2-lang.h | 4 +- gdb/m2-valprint.c | 19 +++--- gdb/mi/mi-main.c | 1 - gdb/mips-tdep.c | 1 - gdb/mt-tdep.c | 1 - gdb/p-lang.h | 6 +- gdb/p-valprint.c | 19 +++--- gdb/printcmd.c | 1 - gdb/rust-lang.c | 28 ++++---- gdb/sh64-tdep.c | 4 +- gdb/valprint.c | 190 +++++++++++++++++++++++++++++++---------------------- gdb/valprint.h | 12 ++-- gdb/value.h | 4 +- 28 files changed, 334 insertions(+), 235 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index cc7f9a0..0fc518c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,89 @@ 2016-11-08 Yao Qi + * ada-lang.h (ada_val_print): Remove second parameter. Remove + const from "struct value *". + * ada-valprint.c (print_field_values): Remove const from + "struct value *". + (val_print_packed_array_elements): Likewise. + (print_variant_part): Likewise. + (ada_val_print_string): Likewise. + (ada_val_print_gnat_array): Likewise. + (ada_val_print_ptr): Likewise. + (ada_val_print_num): Likewise. + (ada_val_print_enum): Likewise. + (ada_val_print_flt): Likewise. + (ada_val_print_union): Likewise. + (ada_val_print_struct_union): Likewise. + (ada_val_print_ref): Likewise. + (ada_val_print_1): Remove second parameter. Remove const from + "struct value *". + (ada_val_print): Likewise. + * c-lang.h (c_val_print): Likewise. + * c-valprint.c (c_val_print_array): Remove const from + "struct value *". + (c_val_print_ptr): Likewise. + (c_val_print_struct): Likewise. + (c_val_print_union): Likewise. + (c_val_print_int): Likewise. + (c_val_print_memberptr): Likewise. + (c_val_print): Remove second parameter. Remove const from + "struct value *". All callers updated. + * cp-valprint.c (cp_print_value): Remove const from + "struct value *". + (cp_print_value_fields): Likewise. + (c_val_print_value): Likewise. + * d-lang.h (d_val_print): Remove second parameter. Remove const + from "struct value *". + * d-valprint.c (dynamic_array_type): Likewise. + (d_val_print): Likewise. + * f-lang.h (f_val_print): Likewise. + * f-valprint.c (f_val_print): Likewise. + * go-lang.h (go_val_print): Likewise. + * go-valprint.c (print_go_string): Likewise. + (go_val_print): Likewise. + * language.c (unk_lang_val_print): Likewise. + * language.h (struct language_defn) : Likewise. + Update comments. + (LA_VAL_PRINT): Remove. + * m2-lang.h (m2_val_print): Remove const from + "struct value *". + * m2-valprint.c (m2_print_array_contents): Likewise. + (m2_val_print): Likewise. + * p-lang.h (pascal_val_print): Remove second parameter. Remove + const from "struct value *". + (pascal_object_print_value_fields): Likewise. + * p-valprint.c (pascal_val_print): Likewise. + (pascal_object_print_value_fields): Likewise. + (pascal_object_print_value): Likewise. + * rust-lang.c (rust_get_disr_info): Likewise. + (val_print_struct): Likewise. + (rust_val_print): Likewise. + * valprint.c (generic_val_print_array): Likewise. + (generic_val_print_ptr): Likewise. + (generic_val_print_memberptr): Likewise. + (generic_val_print_ref): Likewise. + (generic_val_print_enum): Likewise. + (generic_val_print_flags): Likewise. + (generic_val_print_func): Likewise. + (generic_val_print_bool): Likewise. + (generic_val_print_int): Likewise. + (generic_val_print_char): Likewise. + (generic_val_print_float): Likewise. + (generic_val_print_decfloat): Likewise. + (generic_val_print_complex): Likewise. + (generic_val_print): Likewise. + (val_print): Likewise. + (common_val_print): Likewise. + (val_print_type_code_flags): Likewise. + (val_print_scalar_formatted): Likewise. + (val_print_array_elements): Likewise. + * valprint.h (val_print_array_elements): Update declaration. + (val_print_scalar_formatted): Likewise. + (generic_val_print): Likewise. + * value.h (val_print): Likewise. + +2016-11-08 Yao Qi + * aarch64-tdep.c (aarch64_software_single_step): Return VEC (CORE_ADDR) *. Return NULL instead of 0. Don't call insert_single_step_breakpoint. diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h index 7de71eb..daa59e5 100644 --- a/gdb/ada-lang.h +++ b/gdb/ada-lang.h @@ -168,9 +168,9 @@ extern void ada_print_type (struct type *, const char *, struct ui_file *, int, extern void ada_print_typedef (struct type *type, struct symbol *new_symbol, struct ui_file *stream); -extern void ada_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, +extern void ada_val_print (struct type *, int, CORE_ADDR, struct ui_file *, int, - const struct value *, + struct value *, const struct value_print_options *); extern void ada_value_print (struct value *, struct ui_file *, diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c index 6b4b6d4..b001d33 100644 --- a/gdb/ada-valprint.c +++ b/gdb/ada-valprint.c @@ -35,7 +35,7 @@ static int print_field_values (struct type *, const gdb_byte *, int, struct ui_file *, int, - const struct value *, + struct value *, const struct value_print_options *, int, struct type *, int, const struct language_defn *); @@ -122,7 +122,7 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr, int offset, int bitoffset, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options) { unsigned int i; @@ -196,7 +196,7 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr, struct value_print_options opts = *options; opts.deref_ref = 0; - val_print (elttype, value_contents_for_printing (v0), + val_print (elttype, value_embedded_offset (v0), 0, stream, recurse + 1, v0, &opts, current_language); annotate_elt_rep (i - i0); @@ -227,7 +227,7 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr, maybe_print_array_index (index_type, j + low, stream, options); } - val_print (elttype, value_contents_for_printing (v0), + val_print (elttype, value_embedded_offset (v0), 0, stream, recurse + 1, v0, &opts, current_language); annotate_elt (); @@ -533,7 +533,7 @@ static int print_variant_part (struct type *type, int field_num, const gdb_byte *valaddr, int offset, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options, int comma_needed, struct type *outer_type, int outer_offset, @@ -573,7 +573,7 @@ print_variant_part (struct type *type, int field_num, static int print_field_values (struct type *type, const gdb_byte *valaddr, int offset, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options, int comma_needed, struct type *outer_type, int outer_offset, @@ -633,8 +633,6 @@ print_field_values (struct type *type, const gdb_byte *valaddr, if (TYPE_FIELD_PACKED (type, i)) { - struct value *v; - /* Bitfields require special handling, especially due to byte order problems. */ if (HAVE_CPLUS_STRUCT (type) && TYPE_FIELD_IGNORE (type, i)) @@ -643,6 +641,7 @@ print_field_values (struct type *type, const gdb_byte *valaddr, } else { + struct value *v; int bit_pos = TYPE_FIELD_BITPOS (type, i); int bit_size = TYPE_FIELD_BITSIZE (type, i); struct value_print_options opts; @@ -656,7 +655,6 @@ print_field_values (struct type *type, const gdb_byte *valaddr, opts = *options; opts.deref_ref = 0; val_print (TYPE_FIELD_TYPE (type, i), - value_contents_for_printing (v), value_embedded_offset (v), 0, stream, recurse + 1, v, &opts, language); @@ -667,7 +665,7 @@ print_field_values (struct type *type, const gdb_byte *valaddr, struct value_print_options opts = *options; opts.deref_ref = 0; - val_print (TYPE_FIELD_TYPE (type, i), valaddr, + val_print (TYPE_FIELD_TYPE (type, i), (offset + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT), 0, stream, recurse + 1, val, &opts, language); } @@ -684,7 +682,7 @@ static void ada_val_print_string (struct type *type, const gdb_byte *valaddr, int offset, int offset_aligned, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type)); @@ -732,7 +730,7 @@ static void ada_val_print_gnat_array (struct type *type, const gdb_byte *valaddr, int offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options, const struct language_defn *language) { @@ -754,7 +752,7 @@ ada_val_print_gnat_array (struct type *type, const gdb_byte *valaddr, fprintf_filtered (stream, "0x0"); } else - val_print (value_type (val), value_contents_for_printing (val), + val_print (value_type (val), value_embedded_offset (val), value_address (val), stream, recurse, val, options, language); value_free_to_mark (mark); @@ -767,11 +765,11 @@ static void ada_val_print_ptr (struct type *type, const gdb_byte *valaddr, int offset, int offset_aligned, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options, const struct language_defn *language) { - val_print (type, valaddr, offset, address, stream, recurse, + val_print (type, offset, address, stream, recurse, original_value, options, language_def (language_c)); if (ada_is_tag_type (type)) @@ -794,7 +792,7 @@ static void ada_val_print_num (struct type *type, const gdb_byte *valaddr, int offset, int offset_aligned, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options, const struct language_defn *language) { @@ -820,12 +818,12 @@ ada_val_print_num (struct type *type, const gdb_byte *valaddr, = value_from_contents_and_address (type, valaddr + offset, 0); struct value *v = value_cast (target_type, v1); - val_print (target_type, value_contents_for_printing (v), + val_print (target_type, value_embedded_offset (v), 0, stream, recurse + 1, v, options, language); } else - val_print (TYPE_TARGET_TYPE (type), valaddr, offset, + val_print (TYPE_TARGET_TYPE (type), offset, address, stream, recurse, original_value, options, language); return; @@ -840,7 +838,7 @@ ada_val_print_num (struct type *type, const gdb_byte *valaddr, struct value_print_options opts = *options; opts.format = format; - val_print_scalar_formatted (type, valaddr, offset_aligned, + val_print_scalar_formatted (type, offset_aligned, original_value, &opts, 0, stream); } else if (ada_is_system_address_type (type)) @@ -884,7 +882,7 @@ static void ada_val_print_enum (struct type *type, const gdb_byte *valaddr, int offset, int offset_aligned, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options, const struct language_defn *language) { @@ -894,7 +892,7 @@ ada_val_print_enum (struct type *type, const gdb_byte *valaddr, if (options->format) { - val_print_scalar_formatted (type, valaddr, offset_aligned, + val_print_scalar_formatted (type, offset_aligned, original_value, options, 0, stream); return; } @@ -928,13 +926,13 @@ static void ada_val_print_flt (struct type *type, const gdb_byte *valaddr, int offset, int offset_aligned, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options, const struct language_defn *language) { if (options->format) { - val_print (type, valaddr, offset, address, stream, recurse, + val_print (type, offset, address, stream, recurse, original_value, options, language_def (language_c)); return; } @@ -949,7 +947,7 @@ static void ada_val_print_struct_union (struct type *type, const gdb_byte *valaddr, int offset, int offset_aligned, CORE_ADDR address, struct ui_file *stream, - int recurse, const struct value *original_value, + int recurse, struct value *original_value, const struct value_print_options *options, const struct language_defn *language) { @@ -980,7 +978,7 @@ static void ada_val_print_array (struct type *type, const gdb_byte *valaddr, int offset, int offset_aligned, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { /* For an array of characters, print with string syntax. */ @@ -1000,7 +998,7 @@ ada_val_print_array (struct type *type, const gdb_byte *valaddr, 0, stream, recurse, original_value, options); else - val_print_array_elements (type, valaddr, offset_aligned, address, + val_print_array_elements (type, offset_aligned, address, stream, recurse, original_value, options, 0); fprintf_filtered (stream, ")"); @@ -1013,7 +1011,7 @@ static void ada_val_print_ref (struct type *type, const gdb_byte *valaddr, int offset, int offset_aligned, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options, const struct language_defn *language) { @@ -1063,7 +1061,6 @@ ada_val_print_ref (struct type *type, const gdb_byte *valaddr, ada_ensure_varsize_limit (value_type (deref_val)); val_print (value_type (deref_val), - value_contents_for_printing (deref_val), value_embedded_offset (deref_val), value_address (deref_val), stream, recurse + 1, deref_val, options, language); @@ -1073,14 +1070,15 @@ ada_val_print_ref (struct type *type, const gdb_byte *valaddr, does not catch evaluation errors (leaving that to ada_val_print). */ static void -ada_val_print_1 (struct type *type, const gdb_byte *valaddr, +ada_val_print_1 (struct type *type, int offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options, const struct language_defn *language) { int offset_aligned; + const gdb_byte *valaddr = value_contents_for_printing (original_value); type = ada_check_typedef (type); @@ -1102,7 +1100,7 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr, switch (TYPE_CODE (type)) { default: - val_print (type, valaddr, offset, address, stream, recurse, + val_print (type, offset, address, stream, recurse, original_value, options, language_def (language_c)); break; @@ -1156,17 +1154,17 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr, function; they are identical. */ void -ada_val_print (struct type *type, const gdb_byte *valaddr, +ada_val_print (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options) { /* XXX: this catches QUIT/ctrl-c as well. Isn't that busted? */ TRY { - ada_val_print_1 (type, valaddr, embedded_offset, address, + ada_val_print_1 (type, embedded_offset, address, stream, recurse, val, options, current_language); } @@ -1221,7 +1219,7 @@ ada_value_print (struct value *val0, struct ui_file *stream, opts = *options; opts.deref_ref = 1; - val_print (type, value_contents_for_printing (val), + val_print (type, value_embedded_offset (val), address, stream, 0, val, &opts, current_language); } diff --git a/gdb/c-lang.h b/gdb/c-lang.h index 12be8bf..79f8580 100644 --- a/gdb/c-lang.h +++ b/gdb/c-lang.h @@ -76,10 +76,10 @@ extern void c_print_typedef (struct type *, struct symbol *, struct ui_file *); -extern void c_val_print (struct type *, const gdb_byte *, +extern void c_val_print (struct type *, int, CORE_ADDR, struct ui_file *, int, - const struct value *, + struct value *, const struct value_print_options *); extern void c_value_print (struct value *, struct ui_file *, @@ -125,14 +125,14 @@ extern void cp_print_class_member (const gdb_byte *, struct type *, extern void cp_print_value_fields (struct type *, struct type *, const gdb_byte *, LONGEST, CORE_ADDR, struct ui_file *, int, - const struct value *, + struct value *, const struct value_print_options *, struct type **, int); extern void cp_print_value_fields_rtti (struct type *, const gdb_byte *, LONGEST, CORE_ADDR, struct ui_file *, int, - const struct value *, + struct value *, const struct value_print_options *, struct type **, int); diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c index 2cb418d..a90da88 100644 --- a/gdb/c-valprint.c +++ b/gdb/c-valprint.c @@ -233,7 +233,7 @@ static void c_val_print_array (struct type *type, const gdb_byte *valaddr, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { struct type *unresolved_elttype = TYPE_TARGET_TYPE (type); @@ -325,7 +325,7 @@ c_val_print_array (struct type *type, const gdb_byte *valaddr, { i = 0; } - val_print_array_elements (type, valaddr, embedded_offset, + val_print_array_elements (type, embedded_offset, address, stream, recurse, original_value, options, i); fprintf_filtered (stream, "}"); @@ -345,7 +345,7 @@ c_val_print_array (struct type *type, const gdb_byte *valaddr, static void c_val_print_ptr (struct type *type, const gdb_byte *valaddr, int embedded_offset, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { struct gdbarch *arch = get_type_arch (type); @@ -353,7 +353,7 @@ c_val_print_ptr (struct type *type, const gdb_byte *valaddr, if (options->format && options->format != 's') { - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, options, 0, stream); } else if (options->vtblprint && cp_is_vtbl_ptr_type (type)) @@ -386,7 +386,7 @@ static void c_val_print_struct (struct type *type, const gdb_byte *valaddr, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { if (options->vtblprint && cp_is_vtbl_ptr_type (type)) @@ -418,7 +418,7 @@ static void c_val_print_union (struct type *type, const gdb_byte *valaddr, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { if (recurse && !options->unionprint) @@ -437,7 +437,7 @@ c_val_print_union (struct type *type, const gdb_byte *valaddr, static void c_val_print_int (struct type *type, struct type *unresolved_type, const gdb_byte *valaddr, int embedded_offset, - struct ui_file *stream, const struct value *original_value, + struct ui_file *stream, struct value *original_value, const struct value_print_options *options) { struct gdbarch *arch = get_type_arch (type); @@ -449,7 +449,7 @@ c_val_print_int (struct type *type, struct type *unresolved_type, opts.format = (options->format ? options->format : options->output_format); - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, &opts, 0, stream); } else @@ -476,7 +476,7 @@ static void c_val_print_memberptr (struct type *type, const gdb_byte *valaddr, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { if (!options->format) @@ -485,7 +485,7 @@ c_val_print_memberptr (struct type *type, const gdb_byte *valaddr, } else { - generic_val_print (type, valaddr, embedded_offset, address, stream, + generic_val_print (type, embedded_offset, address, stream, recurse, original_value, options, &c_decorations); } } @@ -494,13 +494,14 @@ c_val_print_memberptr (struct type *type, const gdb_byte *valaddr, function; they are identical. */ void -c_val_print (struct type *type, const gdb_byte *valaddr, +c_val_print (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { struct type *unresolved_type = type; + const gdb_byte *valaddr = value_contents_for_printing (original_value); type = check_typedef (type); switch (TYPE_CODE (type)) @@ -554,7 +555,7 @@ c_val_print (struct type *type, const gdb_byte *valaddr, case TYPE_CODE_COMPLEX: case TYPE_CODE_CHAR: default: - generic_val_print (type, valaddr, embedded_offset, address, + generic_val_print (type, embedded_offset, address, stream, recurse, original_value, options, &c_decorations); break; @@ -669,7 +670,7 @@ c_value_print (struct value *val, struct ui_file *stream, /* Print out object: enclosing type is same as real_type if full. */ val_print (value_enclosing_type (val), - value_contents_for_printing (val), 0, + 0, value_address (val), stream, 0, val, &opts, current_language); return; @@ -682,7 +683,7 @@ c_value_print (struct value *val, struct ui_file *stream, fprintf_filtered (stream, "(%s ?) ", TYPE_NAME (value_enclosing_type (val))); val_print (value_enclosing_type (val), - value_contents_for_printing (val), 0, + 0, value_address (val), stream, 0, val, &opts, current_language); return; @@ -690,7 +691,7 @@ c_value_print (struct value *val, struct ui_file *stream, /* Otherwise, we end up at the return outside this "if". */ } - val_print (val_type, value_contents_for_printing (val), + val_print (val_type, value_embedded_offset (val), value_address (val), stream, 0, diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c index 5fb2561..82e505a 100644 --- a/gdb/cp-valprint.c +++ b/gdb/cp-valprint.c @@ -82,7 +82,7 @@ static void cp_print_static_field (struct type *, struct value *, static void cp_print_value (struct type *, struct type *, const gdb_byte *, LONGEST, CORE_ADDR, struct ui_file *, - int, const struct value *, + int, struct value *, const struct value_print_options *, struct type **); @@ -156,7 +156,7 @@ void cp_print_value_fields (struct type *type, struct type *real_type, const gdb_byte *valaddr, LONGEST offset, CORE_ADDR address, struct ui_file *stream, - int recurse, const struct value *val, + int recurse, struct value *val, const struct value_print_options *options, struct type **dont_print_vb, int dont_print_statmem) @@ -353,7 +353,6 @@ cp_print_value_fields (struct type *type, struct type *real_type, opts.deref_ref = 0; val_print (TYPE_FIELD_TYPE (type, i), - valaddr, offset + TYPE_FIELD_BITPOS (type, i) / 8, address, stream, recurse + 1, val, &opts, @@ -420,7 +419,7 @@ cp_print_value_fields_rtti (struct type *type, const gdb_byte *valaddr, LONGEST offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options, struct type **dont_print_vb, int dont_print_statmem) @@ -462,7 +461,7 @@ static void cp_print_value (struct type *type, struct type *real_type, const gdb_byte *valaddr, LONGEST offset, CORE_ADDR address, struct ui_file *stream, - int recurse, const struct value *val, + int recurse, struct value *val, const struct value_print_options *options, struct type **dont_print_vb) { @@ -489,7 +488,7 @@ cp_print_value (struct type *type, struct type *real_type, struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i)); const char *basename = TYPE_NAME (baseclass); const gdb_byte *base_valaddr = NULL; - const struct value *base_val = NULL; + struct value *base_val = NULL; if (BASETYPE_VIA_VIRTUAL (type, i)) { @@ -708,7 +707,7 @@ cp_print_static_field (struct type *type, opts = *options; opts.deref_ref = 0; - val_print (type, value_contents_for_printing (val), + val_print (type, value_embedded_offset (val), value_address (val), stream, recurse, val, diff --git a/gdb/d-lang.h b/gdb/d-lang.h index 74be7a5..52f4e6a 100644 --- a/gdb/d-lang.h +++ b/gdb/d-lang.h @@ -80,10 +80,10 @@ extern struct block_symbol d_lookup_nested_symbol (struct type *, const char *, /* Defined in d-valprint.c */ -extern void d_val_print (struct type *type, const gdb_byte *valaddr, +extern void d_val_print (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options); #endif /* !defined (D_LANG_H) */ diff --git a/gdb/d-valprint.c b/gdb/d-valprint.c index 620688b..109b54f 100644 --- a/gdb/d-valprint.c +++ b/gdb/d-valprint.c @@ -28,10 +28,10 @@ TYPE is a dynamic array, non-zero otherwise. */ static int -dynamic_array_type (struct type *type, const gdb_byte *valaddr, +dynamic_array_type (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) { if (TYPE_NFIELDS (type) == 2 @@ -48,6 +48,7 @@ dynamic_array_type (struct type *type, const gdb_byte *valaddr, struct type *ptr_type; struct value *ival; int length; + const gdb_byte *valaddr = value_contents_for_printing (val); length = unpack_field_as_long (type, valaddr + embedded_offset, 0); @@ -63,7 +64,6 @@ dynamic_array_type (struct type *type, const gdb_byte *valaddr, true_type = value_type (ival); d_val_print (true_type, - value_contents_for_printing (ival), value_embedded_offset (ival), addr, stream, recurse + 1, ival, options); return 0; @@ -73,9 +73,9 @@ dynamic_array_type (struct type *type, const gdb_byte *valaddr, /* Implements the la_val_print routine for language D. */ void -d_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, +d_val_print (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options) { int ret; @@ -84,12 +84,12 @@ d_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, switch (TYPE_CODE (type)) { case TYPE_CODE_STRUCT: - ret = dynamic_array_type (type, valaddr, embedded_offset, address, + ret = dynamic_array_type (type, embedded_offset, address, stream, recurse, val, options); if (ret == 0) break; default: - c_val_print (type, valaddr, embedded_offset, address, stream, + c_val_print (type, embedded_offset, address, stream, recurse, val, options); } } diff --git a/gdb/f-lang.h b/gdb/f-lang.h index 827785a..a086105 100644 --- a/gdb/f-lang.h +++ b/gdb/f-lang.h @@ -30,9 +30,9 @@ extern void f_yyerror (char *); /* Defined in f-exp.y */ extern void f_print_type (struct type *, const char *, struct ui_file *, int, int, const struct type_print_options *); -extern void f_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, +extern void f_val_print (struct type *, int, CORE_ADDR, struct ui_file *, int, - const struct value *, + struct value *, const struct value_print_options *); /* Language-specific data structures */ diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c index e1a677e..a39c801 100644 --- a/gdb/f-valprint.c +++ b/gdb/f-valprint.c @@ -152,7 +152,6 @@ f77_print_array_1 (int nss, int ndimensions, struct type *type, struct value *elt = value_subscript ((struct value *)val, i); val_print (value_type (elt), - value_contents_for_printing (elt), value_embedded_offset (elt), value_address (elt), stream, recurse, elt, options, current_language); @@ -211,9 +210,9 @@ static const struct generic_val_print_decorations f_decorations = function; they are identical. */ void -f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, +f_val_print (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { struct gdbarch *gdbarch = get_type_arch (type); @@ -222,6 +221,7 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, struct type *elttype; CORE_ADDR addr; int index; + const gdb_byte *valaddr =value_contents_for_printing (original_value); type = check_typedef (type); switch (TYPE_CODE (type)) @@ -256,7 +256,7 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, case TYPE_CODE_PTR: if (options->format && options->format != 's') { - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, options, 0, stream); break; } @@ -306,7 +306,7 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, opts.format = (options->format ? options->format : options->output_format); - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, &opts, 0, stream); } else @@ -355,7 +355,6 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, } val_print (value_type (field), - value_contents_for_printing (field), value_embedded_offset (field), value_address (field), stream, recurse + 1, field, options, current_language); @@ -378,7 +377,7 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, case TYPE_CODE_BOOL: case TYPE_CODE_CHAR: default: - generic_val_print (type, valaddr, embedded_offset, address, + generic_val_print (type, embedded_offset, address, stream, recurse, original_value, options, &f_decorations); break; diff --git a/gdb/go-lang.h b/gdb/go-lang.h index 5eb298e..fa96f53 100644 --- a/gdb/go-lang.h +++ b/gdb/go-lang.h @@ -84,10 +84,10 @@ extern void go_print_type (struct type *type, const char *varstring, /* Defined in go-valprint.c. */ -extern void go_val_print (struct type *type, const gdb_byte *valaddr, +extern void go_val_print (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options); #endif /* !defined (GO_LANG_H) */ diff --git a/gdb/go-valprint.c b/gdb/go-valprint.c index 34ed8e0..ad954c1 100644 --- a/gdb/go-valprint.c +++ b/gdb/go-valprint.c @@ -36,10 +36,10 @@ gdb_assert (go_classify_struct_type (type) == GO_TYPE_STRING). */ static void -print_go_string (struct type *type, const gdb_byte *valaddr, +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 +51,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)) @@ -86,9 +86,9 @@ print_go_string (struct type *type, const gdb_byte *valaddr, /* Implements the la_val_print routine for language Go. */ void -go_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, +go_val_print (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options) { type = check_typedef (type); @@ -104,7 +104,7 @@ 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, embedded_offset, address, stream, recurse, val, options); return; } @@ -116,7 +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, + c_val_print (type, embedded_offset, address, stream, recurse, val, options); break; } diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 8e34b7e..05eb89e 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -2320,7 +2320,6 @@ default_print_one_register_info (struct ui_file *file, opts.deref_ref = 1; val_print (regtype, - value_contents_for_printing (val), value_embedded_offset (val), 0, file, 0, val, &opts, current_language); @@ -2339,7 +2338,6 @@ default_print_one_register_info (struct ui_file *file, get_formatted_print_options (&opts, 'x'); opts.deref_ref = 1; val_print (regtype, - value_contents_for_printing (val), value_embedded_offset (val), 0, file, 0, val, &opts, current_language); /* If not a vector register, print it also according to its @@ -2350,7 +2348,6 @@ default_print_one_register_info (struct ui_file *file, opts.deref_ref = 1; fprintf_filtered (file, "\t"); val_print (regtype, - value_contents_for_printing (val), value_embedded_offset (val), 0, file, 0, val, &opts, current_language); } diff --git a/gdb/language.c b/gdb/language.c index 39faecc..0e13abe 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -783,10 +783,10 @@ unk_lang_print_type (struct type *type, const char *varstring, } static void -unk_lang_val_print (struct type *type, const gdb_byte *valaddr, +unk_lang_val_print (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options) { error (_("internal error - unimplemented " diff --git a/gdb/language.h b/gdb/language.h index d6f932e..046664b 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -219,9 +219,6 @@ struct language_defn TYPE is the type of the sub-object to be printed. - CONTENTS holds the bits of the value. This holds the entire - enclosing object. - EMBEDDED_OFFSET is the offset into the outermost object of the sub-object represented by TYPE. This is the object which this call should print. Note that the enclosing type is not @@ -237,10 +234,9 @@ struct language_defn printing. */ void (*la_val_print) (struct type *type, - const gdb_byte *contents, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options); /* Print a top-level value using syntax appropriate for this language. */ @@ -515,9 +511,6 @@ extern enum language set_language (enum language); #define LA_PRINT_TYPEDEF(type,new_symbol,stream) \ (current_language->la_print_typedef(type,new_symbol,stream)) -#define LA_VAL_PRINT(type,valaddr,offset,addr,stream,val,recurse,options) \ - (current_language->la_val_print(type,valaddr,offset,addr,stream, \ - val,recurse,options)) #define LA_VALUE_PRINT(val,stream,options) \ (current_language->la_value_print(val,stream,options)) diff --git a/gdb/m2-lang.h b/gdb/m2-lang.h index b749b21..b35a0ca 100644 --- a/gdb/m2-lang.h +++ b/gdb/m2-lang.h @@ -34,9 +34,9 @@ extern void m2_print_typedef (struct type *, struct symbol *, extern int m2_is_long_set (struct type *type); extern int m2_is_unbounded_array (struct type *type); -extern void m2_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, +extern void m2_val_print (struct type *, int, CORE_ADDR, struct ui_file *, int, - const struct value *, + struct value *, const struct value_print_options *); extern int get_long_set_bounds (struct type *type, LONGEST *low, diff --git a/gdb/m2-valprint.c b/gdb/m2-valprint.c index a53aa84..f43a2d2 100644 --- a/gdb/m2-valprint.c +++ b/gdb/m2-valprint.c @@ -37,7 +37,7 @@ static void m2_print_array_contents (struct type *type, const gdb_byte *valaddr, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options, int len); @@ -262,7 +262,7 @@ static void m2_print_array_contents (struct type *type, const gdb_byte *valaddr, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options, int len) { @@ -282,7 +282,7 @@ m2_print_array_contents (struct type *type, const gdb_byte *valaddr, else { fprintf_filtered (stream, "{"); - val_print_array_elements (type, valaddr, embedded_offset, + val_print_array_elements (type, embedded_offset, address, stream, recurse, val, options, 0); fprintf_filtered (stream, "}"); @@ -308,15 +308,16 @@ static const struct generic_val_print_decorations m2_decorations = function; they are identical. */ void -m2_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, +m2_val_print (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { struct gdbarch *gdbarch = get_type_arch (type); unsigned len; struct type *elttype; CORE_ADDR addr; + const gdb_byte *valaddr = value_contents_for_printing (original_value); type = check_typedef (type); switch (TYPE_CODE (type)) @@ -356,7 +357,7 @@ m2_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, else { fprintf_filtered (stream, "{"); - val_print_array_elements (type, valaddr, embedded_offset, + val_print_array_elements (type, embedded_offset, address, stream, recurse, original_value, options, 0); @@ -373,7 +374,7 @@ m2_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, print_variable_at_address (type, valaddr + embedded_offset, stream, recurse, options); else if (options->format && options->format != 's') - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, options, 0, stream); else { @@ -469,7 +470,7 @@ m2_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, case TYPE_CODE_RANGE: if (TYPE_LENGTH (type) == TYPE_LENGTH (TYPE_TARGET_TYPE (type))) { - m2_val_print (TYPE_TARGET_TYPE (type), valaddr, embedded_offset, + m2_val_print (TYPE_TARGET_TYPE (type), embedded_offset, address, stream, recurse, original_value, options); break; } @@ -494,7 +495,7 @@ m2_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, case TYPE_CODE_BOOL: case TYPE_CODE_CHAR: default: - generic_val_print (type, valaddr, embedded_offset, address, + generic_val_print (type, embedded_offset, address, stream, recurse, original_value, options, &m2_decorations); break; diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 3b071af..3901203 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -1290,7 +1290,6 @@ output_register (struct frame_info *frame, int regnum, int format, get_formatted_print_options (&opts, format); opts.deref_ref = 1; val_print (value_type (val), - value_contents_for_printing (val), value_embedded_offset (val), 0, stb, 0, val, &opts, current_language); ui_out_field_stream (uiout, "value", stb); diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index c2c88a6..c0c6442 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -6356,7 +6356,6 @@ mips_print_register (struct ui_file *file, struct frame_info *frame, get_formatted_print_options (&opts, 'x'); val_print_scalar_formatted (value_type (val), - value_contents_for_printing (val), value_embedded_offset (val), val, &opts, 0, file); diff --git a/gdb/mt-tdep.c b/gdb/mt-tdep.c index c08e805..e958cc4 100644 --- a/gdb/mt-tdep.c +++ b/gdb/mt-tdep.c @@ -726,7 +726,6 @@ mt_registers_info (struct gdbarch *gdbarch, get_no_prettyformat_print_options (&opts); opts.deref_ref = 1; val_print (register_type (gdbarch, regnum), - value_contents_for_printing (val), 0, 0, file, 0, val, &opts, current_language); fputs_filtered ("\n", file); diff --git a/gdb/p-lang.h b/gdb/p-lang.h index 287c0f4..5d3a685 100644 --- a/gdb/p-lang.h +++ b/gdb/p-lang.h @@ -36,9 +36,9 @@ extern void pascal_print_type (struct type *, const char *, struct ui_file *, extern void pascal_print_typedef (struct type *, struct symbol *, struct ui_file *); -extern void pascal_val_print (struct type *, const gdb_byte *, int, +extern void pascal_val_print (struct type *, int, CORE_ADDR, struct ui_file *, int, - const struct value *, + struct value *, const struct value_print_options *); extern void pascal_value_print (struct value *, struct ui_file *, @@ -75,7 +75,7 @@ extern void pascal_object_print_value_fields (struct type *, const gdb_byte *, LONGEST, CORE_ADDR, struct ui_file *, int, - const struct value *, + struct value *, const struct value_print_options *, struct type **, int); diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c index f639e29..82abe60 100644 --- a/gdb/p-valprint.c +++ b/gdb/p-valprint.c @@ -58,10 +58,10 @@ static const struct generic_val_print_decorations p_decorations = function; they are identical. */ void -pascal_val_print (struct type *type, const gdb_byte *valaddr, +pascal_val_print (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { struct gdbarch *gdbarch = get_type_arch (type); @@ -75,6 +75,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, struct type *char_type; CORE_ADDR addr; int want_space = 0; + const gdb_byte *valaddr = value_contents_for_printing (original_value); type = check_typedef (type); switch (TYPE_CODE (type)) @@ -132,7 +133,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, { i = 0; } - val_print_array_elements (type, valaddr, embedded_offset, + val_print_array_elements (type, embedded_offset, address, stream, recurse, original_value, options, i); fprintf_filtered (stream, "}"); @@ -146,7 +147,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, case TYPE_CODE_PTR: if (options->format && options->format != 's') { - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, options, 0, stream); break; } @@ -287,7 +288,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr, case TYPE_CODE_UNDEF: case TYPE_CODE_BOOL: case TYPE_CODE_CHAR: - generic_val_print (type, valaddr, embedded_offset, address, + generic_val_print (type, embedded_offset, address, stream, recurse, original_value, options, &p_decorations); break; @@ -471,7 +472,7 @@ static void pascal_object_print_static_field (struct value *, static void pascal_object_print_value (struct type *, const gdb_byte *, LONGEST, CORE_ADDR, struct ui_file *, int, - const struct value *, + struct value *, const struct value_print_options *, struct type **); @@ -531,7 +532,7 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr, LONGEST offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options, struct type **dont_print_vb, int dont_print_statmem) @@ -670,7 +671,7 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr, address + TYPE_FIELD_BITPOS (type, i) / 8, 0, stream, format, 0, recurse + 1, pretty); */ val_print (TYPE_FIELD_TYPE (type, i), - valaddr, offset + TYPE_FIELD_BITPOS (type, i) / 8, + offset + TYPE_FIELD_BITPOS (type, i) / 8, address, stream, recurse + 1, val, &opts, current_language); } @@ -703,7 +704,7 @@ pascal_object_print_value (struct type *type, const gdb_byte *valaddr, LONGEST offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options, struct type **dont_print_vb) { diff --git a/gdb/printcmd.c b/gdb/printcmd.c index ea36009..db45299 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -322,7 +322,6 @@ print_formatted (struct value *val, int size, /* User specified format, so don't look to the type to tell us what to do. */ val_print_scalar_formatted (type, - value_contents_for_printing (val), value_embedded_offset (val), val, options, size, stream); diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index 0a49696..3d0b141 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -120,7 +120,7 @@ rust_union_is_untagged (struct type *type) static struct disr_info rust_get_disr_info (struct type *type, const gdb_byte *valaddr, int embedded_offset, CORE_ADDR address, - const struct value *val) + struct value *val) { int i; struct disr_info ret; @@ -236,7 +236,7 @@ rust_get_disr_info (struct type *type, const gdb_byte *valaddr, cleanup = make_cleanup_ui_file_delete (temp_file); /* The first value of the first field (or any field) is the discriminant value. */ - c_val_print (TYPE_FIELD_TYPE (disr_type, 0), valaddr, + c_val_print (TYPE_FIELD_TYPE (disr_type, 0), (embedded_offset + TYPE_FIELD_BITPOS (type, 0) / 8 + TYPE_FIELD_BITPOS (disr_type, 0) / 8), address, temp_file, @@ -481,9 +481,9 @@ rust_printstr (struct ui_file *stream, struct type *type, /* rust_print_type branch for structs and untagged unions. */ static void -val_print_struct (struct type *type, const gdb_byte *valaddr, - int embedded_offset, CORE_ADDR address, struct ui_file *stream, - int recurse, const struct value *val, +val_print_struct (struct type *type, int embedded_offset, + CORE_ADDR address, struct ui_file *stream, + int recurse, struct value *val, const struct value_print_options *options) { int i; @@ -538,7 +538,6 @@ val_print_struct (struct type *type, const gdb_byte *valaddr, } val_print (TYPE_FIELD_TYPE (type, i), - valaddr, embedded_offset + TYPE_FIELD_BITPOS (type, i) / 8, address, stream, recurse + 1, val, &opts, @@ -574,11 +573,13 @@ static const struct generic_val_print_decorations rust_decorations = /* la_val_print implementation for Rust. */ static void -rust_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, +rust_val_print (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *val, + struct value *val, const struct value_print_options *options) { + const gdb_byte *valaddr = value_contents_for_printing (val); + type = check_typedef (type); switch (TYPE_CODE (type)) { @@ -615,7 +616,7 @@ rust_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, case TYPE_CODE_METHODPTR: case TYPE_CODE_MEMBERPTR: - c_val_print (type, valaddr, embedded_offset, address, stream, + c_val_print (type, embedded_offset, address, stream, recurse, val, options); break; @@ -675,7 +676,7 @@ rust_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, fields. */ if (rust_union_is_untagged (type)) { - val_print_struct (type, valaddr, embedded_offset, address, stream, + val_print_struct (type, embedded_offset, address, stream, recurse, val, options); break; } @@ -732,7 +733,6 @@ rust_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, TYPE_FIELD_NAME (variant_type, j)); val_print (TYPE_FIELD_TYPE (variant_type, j), - valaddr, (embedded_offset + TYPE_FIELD_BITPOS (type, disr.field_no) / 8 + TYPE_FIELD_BITPOS (variant_type, j) / 8), @@ -752,14 +752,14 @@ rust_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset, break; case TYPE_CODE_STRUCT: - val_print_struct (type, valaddr, embedded_offset, address, stream, - recurse, val, options); + val_print_struct (type, embedded_offset, address, stream, + recurse, val, options); break; default: generic_print: /* Nothing special yet. */ - generic_val_print (type, valaddr, embedded_offset, address, stream, + generic_val_print (type, embedded_offset, address, stream, recurse, val, options, &rust_decorations); } } diff --git a/gdb/sh64-tdep.c b/gdb/sh64-tdep.c index 9054e20..bd2d4f7 100644 --- a/gdb/sh64-tdep.c +++ b/gdb/sh64-tdep.c @@ -2048,13 +2048,13 @@ sh64_do_register (struct gdbarch *gdbarch, struct ui_file *file, get_formatted_print_options (&opts, 'x'); opts.deref_ref = 1; val_print (register_type (gdbarch, regnum), - value_contents_for_printing (val), 0, 0, + 0, 0, file, 0, val, &opts, current_language); fprintf_filtered (file, "\t"); get_formatted_print_options (&opts, 0); opts.deref_ref = 1; val_print (register_type (gdbarch, regnum), - value_contents_for_printing (val), 0, 0, + 0, 0, file, 0, val, &opts, current_language); fprintf_filtered (file, "\n"); } diff --git a/gdb/valprint.c b/gdb/valprint.c index ca30a7f..b18ece3 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -421,10 +421,10 @@ print_unpacked_pointer (struct type *type, struct type *elttype, /* generic_val_print helper for TYPE_CODE_ARRAY. */ static void -generic_val_print_array (struct type *type, const gdb_byte *valaddr, +generic_val_print_array (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options, const struct generic_val_print_decorations *decorations) @@ -445,7 +445,7 @@ generic_val_print_array (struct type *type, const gdb_byte *valaddr, } fputs_filtered (decorations->array_start, stream); - val_print_array_elements (type, valaddr, embedded_offset, + val_print_array_elements (type, embedded_offset, address, stream, recurse, original_value, options, 0); fputs_filtered (decorations->array_end, stream); @@ -462,9 +462,9 @@ generic_val_print_array (struct type *type, const gdb_byte *valaddr, /* generic_val_print helper for TYPE_CODE_PTR. */ static void -generic_val_print_ptr (struct type *type, const gdb_byte *valaddr, +generic_val_print_ptr (struct type *type, int embedded_offset, struct ui_file *stream, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { struct gdbarch *gdbarch = get_type_arch (type); @@ -472,13 +472,14 @@ generic_val_print_ptr (struct type *type, const gdb_byte *valaddr, if (options->format && options->format != 's') { - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, options, 0, stream); } else { struct type *unresolved_elttype = TYPE_TARGET_TYPE(type); struct type *elttype = check_typedef (unresolved_elttype); + const gdb_byte *valaddr = value_contents_for_printing (original_value); CORE_ADDR addr = unpack_pointer (type, valaddr + embedded_offset * unit_size); @@ -490,12 +491,12 @@ generic_val_print_ptr (struct type *type, const gdb_byte *valaddr, /* generic_val_print helper for TYPE_CODE_MEMBERPTR. */ static void -generic_val_print_memberptr (struct type *type, const gdb_byte *valaddr, +generic_val_print_memberptr (struct type *type, int embedded_offset, struct ui_file *stream, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, options, 0, stream); } @@ -538,9 +539,9 @@ get_value_addr_contents (struct value *deref_val) /* generic_val_print helper for TYPE_CODE_REF. */ static void -generic_val_print_ref (struct type *type, const gdb_byte *valaddr, +generic_val_print_ref (struct type *type, int embedded_offset, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { struct type *elttype = check_typedef (TYPE_TARGET_TYPE (type)); @@ -552,6 +553,7 @@ generic_val_print_ref (struct type *type, const gdb_byte *valaddr, const int must_coerce_ref = ((options->addressprint && value_is_synthetic) || options->deref_ref); const int type_is_defined = TYPE_CODE (elttype) != TYPE_CODE_UNDEF; + const gdb_byte *valaddr = value_contents_for_printing (original_value); if (must_coerce_ref && type_is_defined) { @@ -663,9 +665,9 @@ generic_val_print_enum_1 (struct type *type, LONGEST val, /* generic_val_print helper for TYPE_CODE_ENUM. */ static void -generic_val_print_enum (struct type *type, const gdb_byte *valaddr, +generic_val_print_enum (struct type *type, int embedded_offset, struct ui_file *stream, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { LONGEST val; @@ -674,45 +676,53 @@ generic_val_print_enum (struct type *type, const gdb_byte *valaddr, if (options->format) { - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, options, 0, stream); - return; } - val = unpack_long (type, valaddr + embedded_offset * unit_size); + else + { + const gdb_byte *valaddr = value_contents_for_printing (original_value); + + val = unpack_long (type, valaddr + embedded_offset * unit_size); - generic_val_print_enum_1 (type, val, stream); + generic_val_print_enum_1 (type, val, stream); + } } /* generic_val_print helper for TYPE_CODE_FLAGS. */ static void -generic_val_print_flags (struct type *type, const gdb_byte *valaddr, +generic_val_print_flags (struct type *type, int embedded_offset, struct ui_file *stream, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { if (options->format) - val_print_scalar_formatted (type, valaddr, embedded_offset, original_value, + val_print_scalar_formatted (type, embedded_offset, original_value, options, 0, stream); else - val_print_type_code_flags (type, valaddr + embedded_offset, stream); + { + const gdb_byte *valaddr = value_contents_for_printing (original_value); + + val_print_type_code_flags (type, valaddr + embedded_offset, stream); + } } /* generic_val_print helper for TYPE_CODE_FUNC and TYPE_CODE_METHOD. */ static void -generic_val_print_func (struct type *type, const gdb_byte *valaddr, +generic_val_print_func (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { struct gdbarch *gdbarch = get_type_arch (type); if (options->format) { - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, options, 0, stream); } else @@ -731,9 +741,9 @@ generic_val_print_func (struct type *type, const gdb_byte *valaddr, /* generic_val_print helper for TYPE_CODE_BOOL. */ static void -generic_val_print_bool (struct type *type, const gdb_byte *valaddr, +generic_val_print_bool (struct type *type, int embedded_offset, struct ui_file *stream, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options, const struct generic_val_print_decorations *decorations) { @@ -746,11 +756,13 @@ generic_val_print_bool (struct type *type, const gdb_byte *valaddr, struct value_print_options opts = *options; opts.format = (options->format ? options->format : options->output_format); - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, &opts, 0, stream); } else { + const gdb_byte *valaddr = value_contents_for_printing (original_value); + val = unpack_long (type, valaddr + embedded_offset * unit_size); if (val == 0) fputs_filtered (decorations->false_name, stream); @@ -764,9 +776,9 @@ generic_val_print_bool (struct type *type, const gdb_byte *valaddr, /* generic_val_print helper for TYPE_CODE_INT. */ static void -generic_val_print_int (struct type *type, const gdb_byte *valaddr, +generic_val_print_int (struct type *type, int embedded_offset, struct ui_file *stream, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { struct gdbarch *gdbarch = get_type_arch (type); @@ -778,21 +790,25 @@ generic_val_print_int (struct type *type, const gdb_byte *valaddr, opts.format = (options->format ? options->format : options->output_format); - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, &opts, 0, stream); } else - val_print_type_code_int (type, valaddr + embedded_offset * unit_size, - stream); + { + const gdb_byte *valaddr = value_contents_for_printing (original_value); + + val_print_type_code_int (type, valaddr + embedded_offset * unit_size, + stream); + } } /* generic_val_print helper for TYPE_CODE_CHAR. */ static void generic_val_print_char (struct type *type, struct type *unresolved_type, - const gdb_byte *valaddr, int embedded_offset, + int embedded_offset, struct ui_file *stream, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { LONGEST val; @@ -805,11 +821,13 @@ generic_val_print_char (struct type *type, struct type *unresolved_type, opts.format = (options->format ? options->format : options->output_format); - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, &opts, 0, stream); } else { + const gdb_byte *valaddr = value_contents_for_printing (original_value); + val = unpack_long (type, valaddr + embedded_offset * unit_size); if (TYPE_UNSIGNED (type)) fprintf_filtered (stream, "%u", (unsigned int) val); @@ -823,9 +841,9 @@ generic_val_print_char (struct type *type, struct type *unresolved_type, /* generic_val_print helper for TYPE_CODE_FLT. */ static void -generic_val_print_float (struct type *type, const gdb_byte *valaddr, +generic_val_print_float (struct type *type, int embedded_offset, struct ui_file *stream, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { struct gdbarch *gdbarch = get_type_arch (type); @@ -833,11 +851,13 @@ generic_val_print_float (struct type *type, const gdb_byte *valaddr, if (options->format) { - val_print_scalar_formatted (type, valaddr, embedded_offset, + val_print_scalar_formatted (type, embedded_offset, original_value, options, 0, stream); } else { + const gdb_byte *valaddr = value_contents_for_printing (original_value); + print_floating (valaddr + embedded_offset * unit_size, type, stream); } } @@ -845,38 +865,43 @@ generic_val_print_float (struct type *type, const gdb_byte *valaddr, /* generic_val_print helper for TYPE_CODE_DECFLOAT. */ static void -generic_val_print_decfloat (struct type *type, const gdb_byte *valaddr, +generic_val_print_decfloat (struct type *type, int embedded_offset, struct ui_file *stream, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options) { struct gdbarch *gdbarch = get_type_arch (type); int unit_size = gdbarch_addressable_memory_unit_size (gdbarch); if (options->format) - val_print_scalar_formatted (type, valaddr, embedded_offset, original_value, + val_print_scalar_formatted (type, embedded_offset, original_value, options, 0, stream); else - print_decimal_floating (valaddr + embedded_offset * unit_size, type, - stream); + { + const gdb_byte *valaddr = value_contents_for_printing (original_value); + + print_decimal_floating (valaddr + embedded_offset * unit_size, type, + stream); + } } /* generic_val_print helper for TYPE_CODE_COMPLEX. */ static void -generic_val_print_complex (struct type *type, const gdb_byte *valaddr, +generic_val_print_complex (struct type *type, int embedded_offset, struct ui_file *stream, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options, const struct generic_val_print_decorations *decorations) { struct gdbarch *gdbarch = get_type_arch (type); int unit_size = gdbarch_addressable_memory_unit_size (gdbarch); + const gdb_byte *valaddr = value_contents_for_printing (original_value); fprintf_filtered (stream, "%s", decorations->complex_prefix); if (options->format) - val_print_scalar_formatted (TYPE_TARGET_TYPE (type), valaddr, + val_print_scalar_formatted (TYPE_TARGET_TYPE (type), embedded_offset, original_value, options, 0, stream); else @@ -884,7 +909,7 @@ generic_val_print_complex (struct type *type, const gdb_byte *valaddr, TYPE_TARGET_TYPE (type), stream); fprintf_filtered (stream, "%s", decorations->complex_infix); if (options->format) - val_print_scalar_formatted (TYPE_TARGET_TYPE (type), valaddr, + val_print_scalar_formatted (TYPE_TARGET_TYPE (type), embedded_offset + type_length_units (TYPE_TARGET_TYPE (type)), original_value, options, 0, stream); @@ -907,10 +932,10 @@ generic_val_print_complex (struct type *type, const gdb_byte *valaddr, output in some small, language-specific ways. */ void -generic_val_print (struct type *type, const gdb_byte *valaddr, +generic_val_print (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options, const struct generic_val_print_decorations *decorations) { @@ -920,43 +945,43 @@ generic_val_print (struct type *type, const gdb_byte *valaddr, switch (TYPE_CODE (type)) { case TYPE_CODE_ARRAY: - generic_val_print_array (type, valaddr, embedded_offset, address, stream, + generic_val_print_array (type, embedded_offset, address, stream, recurse, original_value, options, decorations); break; case TYPE_CODE_MEMBERPTR: - generic_val_print_memberptr (type, valaddr, embedded_offset, stream, + generic_val_print_memberptr (type, embedded_offset, stream, original_value, options); break; case TYPE_CODE_PTR: - generic_val_print_ptr (type, valaddr, embedded_offset, stream, + generic_val_print_ptr (type, embedded_offset, stream, original_value, options); break; case TYPE_CODE_REF: - generic_val_print_ref (type, valaddr, embedded_offset, stream, recurse, + generic_val_print_ref (type, embedded_offset, stream, recurse, original_value, options); break; case TYPE_CODE_ENUM: - generic_val_print_enum (type, valaddr, embedded_offset, stream, + generic_val_print_enum (type, embedded_offset, stream, original_value, options); break; case TYPE_CODE_FLAGS: - generic_val_print_flags (type, valaddr, embedded_offset, stream, + generic_val_print_flags (type, embedded_offset, stream, original_value, options); break; case TYPE_CODE_FUNC: case TYPE_CODE_METHOD: - generic_val_print_func (type, valaddr, embedded_offset, address, stream, + generic_val_print_func (type, embedded_offset, address, stream, original_value, options); break; case TYPE_CODE_BOOL: - generic_val_print_bool (type, valaddr, embedded_offset, stream, + generic_val_print_bool (type, embedded_offset, stream, original_value, options, decorations); break; @@ -972,22 +997,22 @@ generic_val_print (struct type *type, const gdb_byte *valaddr, /* FALLTHROUGH */ case TYPE_CODE_INT: - generic_val_print_int (type, valaddr, embedded_offset, stream, + generic_val_print_int (type, embedded_offset, stream, original_value, options); break; case TYPE_CODE_CHAR: - generic_val_print_char (type, unresolved_type, valaddr, embedded_offset, + generic_val_print_char (type, unresolved_type, embedded_offset, stream, original_value, options); break; case TYPE_CODE_FLT: - generic_val_print_float (type, valaddr, embedded_offset, stream, + generic_val_print_float (type, embedded_offset, stream, original_value, options); break; case TYPE_CODE_DECFLOAT: - generic_val_print_decfloat (type, valaddr, embedded_offset, stream, + generic_val_print_decfloat (type, embedded_offset, stream, original_value, options); break; @@ -1007,7 +1032,7 @@ generic_val_print (struct type *type, const gdb_byte *valaddr, break; case TYPE_CODE_COMPLEX: - generic_val_print_complex (type, valaddr, embedded_offset, stream, + generic_val_print_complex (type, embedded_offset, stream, original_value, options, decorations); break; @@ -1022,15 +1047,14 @@ generic_val_print (struct type *type, const gdb_byte *valaddr, } /* Print using the given LANGUAGE the data of type TYPE located at - VALADDR + EMBEDDED_OFFSET (within GDB), which came from the - inferior at address ADDRESS + EMBEDDED_OFFSET, onto stdio stream - STREAM according to OPTIONS. VAL is the whole object that came - from ADDRESS. VALADDR must point to the head of VAL's contents - buffer. + VAL's contents buffer + EMBEDDED_OFFSET (within GDB), which came + from the inferior at address ADDRESS + EMBEDDED_OFFSET, onto + stdio stream STREAM according to OPTIONS. VAL is the whole object + that came from ADDRESS. The language printers will pass down an adjusted EMBEDDED_OFFSET to further helper subroutines as subfields of TYPE are printed. In - such cases, VALADDR is passed down unadjusted, as well as VAL, so + such cases, VAL is passed down unadjusted, so that VAL can be queried for metadata about the contents data being printed, using EMBEDDED_OFFSET as an offset into VAL's contents buffer. For example: "has this field been optimized out", or "I'm @@ -1042,9 +1066,9 @@ generic_val_print (struct type *type, const gdb_byte *valaddr, RECURSE. */ void -val_print (struct type *type, const gdb_byte *valaddr, LONGEST embedded_offset, +val_print (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, const struct language_defn *language) { @@ -1074,6 +1098,8 @@ val_print (struct type *type, const gdb_byte *valaddr, LONGEST embedded_offset, if (!options->raw) { + const gdb_byte *valaddr = value_contents_for_printing (val); + ret = apply_ext_lang_val_pretty_printer (type, valaddr, embedded_offset, address, stream, recurse, val, options, language); @@ -1091,7 +1117,7 @@ val_print (struct type *type, const gdb_byte *valaddr, LONGEST embedded_offset, TRY { - language->la_val_print (type, valaddr, embedded_offset, address, + language->la_val_print (type, embedded_offset, address, stream, recurse, val, &local_opts); } @@ -1177,7 +1203,7 @@ common_val_print (struct value *val, struct ui_file *stream, int recurse, get a fixed representation of our value. */ val = ada_to_fixed_value (val); - val_print (value_type (val), value_contents_for_printing (val), + val_print (value_type (val), value_embedded_offset (val), value_address (val), stream, recurse, val, options, language); @@ -1303,8 +1329,8 @@ val_print_type_code_flags (struct type *type, const gdb_byte *valaddr, void val_print_scalar_formatted (struct type *type, - const gdb_byte *valaddr, LONGEST embedded_offset, - const struct value *val, + LONGEST embedded_offset, + struct value *val, const struct value_print_options *options, int size, struct ui_file *stream) @@ -1313,7 +1339,6 @@ val_print_scalar_formatted (struct type *type, int unit_size = gdbarch_addressable_memory_unit_size (arch); gdb_assert (val != NULL); - gdb_assert (valaddr == value_contents_for_printing_const (val)); /* If we get here with a string format, try again without it. Go all the way back to the language printers, which may call us @@ -1323,11 +1348,16 @@ val_print_scalar_formatted (struct type *type, struct value_print_options opts = *options; opts.format = 0; opts.deref_ref = 0; - val_print (type, valaddr, embedded_offset, 0, stream, 0, val, &opts, + val_print (type, embedded_offset, 0, stream, 0, val, &opts, current_language); return; } + /* value_contents_for_printing fetches all VAL's contents. They are + needed to check whether VAL is optimized-out or unavailable + below. */ + const gdb_byte *valaddr = value_contents_for_printing (val); + /* A scalar object that does not have all bits available can't be printed, because all bits contribute to its representation. */ if (value_bits_any_optimized_out (val, @@ -1965,10 +1995,10 @@ maybe_print_array_index (struct type *index_type, LONGEST index, void val_print_array_elements (struct type *type, - const gdb_byte *valaddr, LONGEST embedded_offset, + 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, unsigned int i) { @@ -2066,7 +2096,7 @@ val_print_array_elements (struct type *type, if (reps > options->repeat_count_threshold) { - val_print (elttype, valaddr, embedded_offset + i * eltlen, + val_print (elttype, embedded_offset + i * eltlen, address, stream, recurse + 1, val, options, current_language); annotate_elt_rep (reps); @@ -2078,7 +2108,7 @@ val_print_array_elements (struct type *type, } else { - val_print (elttype, valaddr, embedded_offset + i * eltlen, + val_print (elttype, embedded_offset + i * eltlen, address, stream, recurse + 1, val, options, current_language); annotate_elt (); diff --git a/gdb/valprint.h b/gdb/valprint.h index a0f7391..8b640f9 100644 --- a/gdb/valprint.h +++ b/gdb/valprint.h @@ -115,9 +115,9 @@ extern void maybe_print_array_index (struct type *index_type, LONGEST index, struct ui_file *stream, const struct value_print_options *); -extern void val_print_array_elements (struct type *, const gdb_byte *, LONGEST, +extern void val_print_array_elements (struct type *, LONGEST, CORE_ADDR, struct ui_file *, int, - const struct value *, + struct value *, const struct value_print_options *, unsigned int); @@ -125,8 +125,8 @@ extern void val_print_type_code_int (struct type *, const gdb_byte *, struct ui_file *); extern void val_print_scalar_formatted (struct type *, - const gdb_byte *, LONGEST, - const struct value *, + LONGEST, + struct value *, const struct value_print_options *, int, struct ui_file *); @@ -193,10 +193,10 @@ struct generic_val_print_decorations }; -extern void generic_val_print (struct type *type, const gdb_byte *valaddr, +extern void generic_val_print (struct type *type, int embedded_offset, CORE_ADDR address, struct ui_file *stream, int recurse, - const struct value *original_value, + struct value *original_value, const struct value_print_options *options, const struct generic_val_print_decorations *); diff --git a/gdb/value.h b/gdb/value.h index 3299e87..5805736 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -1016,10 +1016,10 @@ extern void value_print_array_elements (struct value *val, extern struct value *value_release_to_mark (const struct value *mark); -extern void val_print (struct type *type, const gdb_byte *valaddr, +extern void val_print (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, const struct language_defn *language); -- 1.9.1