From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 108430 invoked by alias); 24 Feb 2020 14:19:16 -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 108422 invoked by uid 89); 24 Feb 2020 14:19:16 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-22.7 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=H*RU:sk:host86-, HX-Spam-Relays-External:sk:host86-, H*r:sk:host86- X-HELO: mail-wm1-f48.google.com Received: from mail-wm1-f48.google.com (HELO mail-wm1-f48.google.com) (209.85.128.48) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 24 Feb 2020 14:19:05 +0000 Received: by mail-wm1-f48.google.com with SMTP id a9so9585126wmj.3 for ; Mon, 24 Feb 2020 06:19:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=b7c/ltgSXkoXKAzHVRp2RNJtX9XVsCpvvthULNCXWEw=; b=g0xp5gsG8Hi5p7t9y5SgjRb9DlFAscnHLUw9g4s7I0DOfjcsvrhMCyeHXEugR7NxPb +u/3+6g2F5WeZ9JtUdxHlaLAdBZITyvv19L0XSTT+0rYjzExDWSlzbeYLRR8Oz11wjm8 KF8D7VaUakXczCsxMZHTZsoWC0bqbIWij/+M79j9nLmvsarqYs2WJqMaAn1prstnQGhb Bh2ba1AzAmvEUL2JvDT/G6M46v0/9M+kVgJlKHqMs/bxbAe2Mh0a2RmM8n9cEZqxuoLb pgAc1WxRVPLsR+odjjwoAuZJ3eLBy6XTmLkpihDdYiVV5eXq+lhzmWz7oQAFyvsOf6aC Fbhw== Return-Path: Received: from localhost (host86-186-80-160.range86-186.btcentralplus.com. [86.186.80.160]) by smtp.gmail.com with ESMTPSA id z1sm18226382wmf.42.2020.02.24.06.19.02 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 24 Feb 2020 06:19:03 -0800 (PST) Date: Mon, 24 Feb 2020 14:19:00 -0000 From: Andrew Burgess To: Tom de Vries Cc: gdb-patches@sourceware.org Subject: Re: [PATCH][gdb] Ensure listing of unused static var in info locals Message-ID: <20200224141902.GF3317@embecosm.com> References: <20200224115817.GA9340@delia> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200224115817.GA9340@delia> X-Fortune: Detroit is Cleveland without the glitter. X-Editor: GNU Emacs [ http://www.gnu.org/software/emacs ] User-Agent: Mutt/1.9.2 (2017-12-15) X-IsSubscribed: yes X-SW-Source: 2020-02/txt/msg00922.txt.bz2 * Tom de Vries [2020-02-24 12:58:18 +0100]: > Hi, > > Consider a test-case compiled with -g: > ... > int main (void) { > static int b = 2; > return 0; > } > ... > > When running info locals in main, we get: > ... > (gdb) info locals > No locals. > ... > > The info locals documentation states: > ... > Print the local variables of the selected frame, each on a separate line. > These are all variables (declared either static or automatic) accessible at > the point of execution of the selected frame. > ... > So, "info locals" should have printed static variable b. > > The variable is present in dwarf info: > ... > <2><14a>: Abbrev Number: 6 (DW_TAG_variable) > <14b> DW_AT_name : b > <153> DW_AT_const_value : 2 > ... > but instead of a location attribute, it has a const_value attribute, which > causes the corresponding symbol to have LOC_CONST, which causes info locals to > skip it. > > Fix this by handling LOC_CONST in iterate_over_block_locals. > > Build and reg-tested on x86_64-linux. > > OK for trunk? > > Thanks, > - Tom > > [gdb] Ensure listing of unused static var in info locals > > gdb/ChangeLog: > > 2020-02-24 Tom de Vries > > PR gdb/25592 > * stack.c (iterate_over_block_locals): Handle LOC_CONST. > > gdb/testsuite/ChangeLog: > > 2020-02-24 Tom de Vries > > PR gdb/25592 > * gdb.base/info-locals-unused-static-var.c: New test. > * gdb.base/info-locals-unused-static-var.exp: New file. LGTM. Thanks, Andrew > > --- > gdb/stack.c | 1 + > .../gdb.base/info-locals-unused-static-var.c | 24 +++++++++++++ > .../gdb.base/info-locals-unused-static-var.exp | 40 ++++++++++++++++++++++ > 3 files changed, 65 insertions(+) > > diff --git a/gdb/stack.c b/gdb/stack.c > index af30405f29..266d771e35 100644 > --- a/gdb/stack.c > +++ b/gdb/stack.c > @@ -2237,6 +2237,7 @@ iterate_over_block_locals (const struct block *b, > { > switch (SYMBOL_CLASS (sym)) > { > + case LOC_CONST: > case LOC_LOCAL: > case LOC_REGISTER: > case LOC_STATIC: > diff --git a/gdb/testsuite/gdb.base/info-locals-unused-static-var.c b/gdb/testsuite/gdb.base/info-locals-unused-static-var.c > new file mode 100644 > index 0000000000..86d34b3579 > --- /dev/null > +++ b/gdb/testsuite/gdb.base/info-locals-unused-static-var.c > @@ -0,0 +1,24 @@ > +/* This testcase is part of GDB, the GNU debugger. > + > + Copyright 2020 Free Software Foundation, Inc. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see . */ > + > +int > +main (void) > +{ > + static int b = 2; > + > + return 0; > +} > diff --git a/gdb/testsuite/gdb.base/info-locals-unused-static-var.exp b/gdb/testsuite/gdb.base/info-locals-unused-static-var.exp > new file mode 100644 > index 0000000000..79f02c25e6 > --- /dev/null > +++ b/gdb/testsuite/gdb.base/info-locals-unused-static-var.exp > @@ -0,0 +1,40 @@ > +# Copyright 2020 Free Software Foundation, Inc. > + > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 3 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see . */ > + > +# Test if an unused static local var is listed with info locals. > +# > +# Note: with gcc 4.8.5, we have: > +# ... > +# (gdb) info addr b > +# Symbol "b" is static storage at address $hex > +# ... > +# but with gcc 7.5.0, we have instead: > +# ... > +# (gdb) info addr b > +# Symbol "b" is constant. > +# ... > + > +standard_testfile > + > +if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} { > + return -1 > +} > + > +if ![runto_main] then { > + fail "can't run to main" > + return 0 > +} > + > +gdb_test "info locals" "\r\nb = .*"