From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 106135 invoked by alias); 17 Feb 2020 12:08:14 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 106127 invoked by uid 89); 17 Feb 2020 12:08:13 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-21.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_NUMSUBJECT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mail-qt1-f196.google.com Received: from mail-qt1-f196.google.com (HELO mail-qt1-f196.google.com) (209.85.160.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 17 Feb 2020 12:08:12 +0000 Received: by mail-qt1-f196.google.com with SMTP id d9so11793235qte.12 for ; Mon, 17 Feb 2020 04:08:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=wJ0j9lNVLv0TsNFyhKbKJR78+ghxlLvQ3ng6ax8mPZM=; b=Utsdk1LyUcO0AI2Pf48MqvmGnZ+4zVAz1B4cQkFnmhGlQNCrn4GJ0z84U5pkx8fg4p vieEhmvwTyycdlIcN3RMBGEoRUVKCt4/eN4erzxo5xlzCtmCMhoAKjRsqweZEeQmVsOS IeOuWo2MnGsY/DJOrBHfkpYjpFP3X45nu3h0X5XQAuquQks1CoyfT+SevVjHraWBESdK eoIZA/4gldI3ft6jDTUU4eEEOfQC/yVGRxbzKEqzUKUAYh534hE5DPzy0m1Pgn/NrfKx FdGHnjcB+jSSsCEOOm0kIIW5KNKPg0oBYkKV0fos4BCc5IxsMgiiLhIPHeMNN5+B0Eaf thVQ== Return-Path: Received: from [192.168.0.185] ([191.34.156.101]) by smtp.gmail.com with ESMTPSA id r37sm71337qtj.44.2020.02.17.04.08.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 17 Feb 2020 04:08:09 -0800 (PST) Subject: Re: [PATCH 5/5] gdb: change print format of flag enums with value 0 To: Simon Marchi , gdb-patches@sourceware.org References: <20200213203035.30157-1-simon.marchi@efficios.com> <20200213203035.30157-5-simon.marchi@efficios.com> From: Luis Machado Message-ID: Date: Mon, 17 Feb 2020 12:08:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: <20200213203035.30157-5-simon.marchi@efficios.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2020-02/txt/msg00613.txt.bz2 On 2/13/20 5:30 PM, Simon Marchi wrote: > If a flag enum has value 0 and the enumeration type does not have an > enumerator with value 0, we currently print: > > $1 = (unknown: 0x0) > > I don't like the display of "unknown" here, since for flags, 0 is a > an expected value. It just means that no flags are set. This patch > makes it so that we print it as a simple 0 in this situation: Should we print "no flags set" alongside the 0 for this case then? > > $1 = 0 > > If there is an enumerator with value 0, it is still printed using that > enumerator, for example (from the test): > > $1 = FE_NONE > > gdb/ChangeLog: > > * valprint.c (generic_val_print_enum_1): When printing a flag > enum with value 0 and there is no enumerator with value 0, print > just "0" instead of "(unknown: 0x0)". > > gdb/testsuite/ChangeLog: > > * gdb.base/printcmds.exp (test_print_enums): Update expected > output. > --- > gdb/testsuite/gdb.base/printcmds.exp | 2 +- > gdb/valprint.c | 31 +++++++++++++++++++++------- > 2 files changed, 25 insertions(+), 8 deletions(-) > > diff --git a/gdb/testsuite/gdb.base/printcmds.exp b/gdb/testsuite/gdb.base/printcmds.exp > index d6f5c75650bf..bd2afc8696f0 100644 > --- a/gdb/testsuite/gdb.base/printcmds.exp > +++ b/gdb/testsuite/gdb.base/printcmds.exp > @@ -743,7 +743,7 @@ proc test_print_enums {} { > gdb_test "print (enum flag_enum) 0x0" [string_to_regexp " = FE_NONE"] > > # Print a flag enum with value 0, where no enumerator has value 0. > - gdb_test "print flag_enum_without_zero" [string_to_regexp " = (unknown: 0x0)"] > + gdb_test "print flag_enum_without_zero" [string_to_regexp " = 0"] > > # Print a flag enum with unknown bits set. > gdb_test "print (enum flag_enum) 0xf1" [string_to_regexp " = (FE_ONE | unknown: 0xf0)"] > diff --git a/gdb/valprint.c b/gdb/valprint.c > index bd21be69e1bf..6e62d420c0f4 100644 > --- a/gdb/valprint.c > +++ b/gdb/valprint.c > @@ -634,7 +634,6 @@ generic_val_print_enum_1 (struct type *type, LONGEST val, > /* We have a "flag" enum, so we try to decompose it into > pieces as appropriate. A flag enum has disjoint > constants by definition. */ > - fputs_filtered ("(", stream); > for (i = 0; i < len; ++i) > { > QUIT; > @@ -646,24 +645,42 @@ generic_val_print_enum_1 (struct type *type, LONGEST val, > > if ((val & enumval) != 0) > { > - if (!first) > + if (first) > + { > + fputs_filtered ("(", stream); > + first = 0; > + } > + else > fputs_filtered (" | ", stream); > - first = 0; > > val &= ~TYPE_FIELD_ENUMVAL (type, i); > fputs_filtered (TYPE_FIELD_NAME (type, i), stream); > } > } > > - if (first || val != 0) > + if (val != 0) > { > - if (!first) > + /* There are leftover bits, print them. */ > + if (first) > + fputs_filtered ("(", stream); > + else > fputs_filtered (" | ", stream); > + > fputs_filtered ("unknown: 0x", stream); > print_longest (stream, 'x', 0, val); > + fputs_filtered (")", stream); > + } > + else if (first) > + { > + /* Nothing has been printed and the value is 0, the enum value must > + have been 0. */ > + fputs_filtered ("0", stream); > + } > + else > + { > + /* Something has been printed, close the parenthesis. */ > + fputs_filtered (")", stream); > } > - > - fputs_filtered (")", stream); > } > else > print_longest (stream, 'd', 0, val); > Otherwise LGTM.