From patchwork Fri Jul 20 21:21:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 28537 Received: (qmail 121646 invoked by alias); 20 Jul 2018 21:21:47 -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 121637 invoked by uid 89); 20 Jul 2018 21:21:46 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, SPF_PASS autolearn=ham version=3.3.2 spammy=attr_count, F.i, test-cases, H*f:sk:87a7qni X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 20 Jul 2018 21:21:45 +0000 Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id D2C2AAE26; Fri, 20 Jul 2018 21:21:42 +0000 (UTC) Date: Fri, 20 Jul 2018 23:21:55 +0200 From: Tom de Vries To: Tom Tromey Cc: gdb-patches@sourceware.org Subject: Re: [RFC][PATCH][symtab] Warn about unresolved DW_AT_upper_bound/DW_AT_count Message-ID: <20180720212155.b4aawf5pjqokxnon@delia> References: <20180718171814.br2yfrfajkyk6i2j@delia> <87a7qni90r.fsf@tromey.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <87a7qni90r.fsf@tromey.com> User-Agent: NeoMutt/20170912 (1.9.0) X-IsSubscribed: yes On Thu, Jul 19, 2018 at 08:40:20AM -0600, Tom Tromey wrote: > >>>>> "Tom" == Tom de Vries writes: > > Tom> this patch (without test-case for now) generates a warning if > Tom> DW_AT_upper_bound or DW_AT_count is defined, but can't be translated. This > Tom> is triggered for current gcc in lto mode for vla test-cases. > > Tom> F.i.: > Tom> ... > Tom> $ gcc gcc/testsuite/gcc.dg/guality/vla-1.c -g -O2 -flto \ > Tom> -DPREVENT_OPTIMIZATION -o ./vla-1.exe > Tom> $ ./gdb -batch -ex "set complaints 10" -ex "file ./vla-1.exe" > Tom> During symbol reading, Unresolved DW_AT_upper_bound - DIE at 0x337 > Tom> [in module vla-1.exe]. > Tom> ... > > Tom> Good idea? > > I think so. > > Tom> + if (attr_ub) > [...] > Tom> + if (attr_count) > > The gdb style is to use a check against nullptr in these spots. > Updated accordingly, and added test-case. OK for trunk? Thanks, - Tom [gdb/symtab] Warn about unresolved DW_AT_upper_bound/DW_AT_count This patch generates a warning if DW_AT_upper_bound or DW_AT_count is defined, but can't be translated. This is triggered for current gcc in lto mode for vla test-cases. Build and reg-tested on x86_64-linux. 2018-07-18 Tom de Vries * dwarf2read.c (read_subrange_type): Warn if DW_AT_upper_bound or DW_AT_count can't be translated to a dynamic prop. * gdb.dwarf2/dw2-unresolved-ub.exp: new file. --- gdb/dwarf2read.c | 19 +++++++++-- gdb/testsuite/gdb.dwarf2/dw2-unresolved-ub.exp | 47 ++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index b7933de49c..92107c0900 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -17596,10 +17596,11 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) sect_offset_str (die->sect_off), objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - attr = dwarf2_attr (die, DW_AT_upper_bound, cu); + struct attribute *attr_ub, *attr_count; + attr = attr_ub = dwarf2_attr (die, DW_AT_upper_bound, cu); if (!attr_to_dynamic_prop (attr, die, cu, &high)) { - attr = dwarf2_attr (die, DW_AT_count, cu); + attr = attr_count = dwarf2_attr (die, DW_AT_count, cu); if (attr_to_dynamic_prop (attr, die, cu, &high)) { /* If bounds are constant do the final calculation here. */ @@ -17608,6 +17609,20 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) else high_bound_is_count = 1; } + else + { + if (attr_ub != NULL) + complaint (_("Unresolved DW_AT_upper_bound " + "- DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); + if (attr_count != NULL) + complaint (_("Unresolved DW_AT_count " + "- DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); + } + } /* Dwarf-2 specifications explicitly allows to create subrange types diff --git a/gdb/testsuite/gdb.dwarf2/dw2-unresolved-ub.exp b/gdb/testsuite/gdb.dwarf2/dw2-unresolved-ub.exp new file mode 100644 index 0000000000..e8fcf0414e --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dw2-unresolved-ub.exp @@ -0,0 +1,47 @@ +# Copyright 2018 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 . +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +if { ![test_compiler_info "gcc-9-*-*"] } { + return 0 +} + +standard_testfile + +if { [prepare_for_testing "failed to prepare" $testfile "${srcdir}/gdb.base/vla-optimized-out.c" \ + {debug optimize=-O2 additional_flags=-flto additional_flags=-gstrict-dwarf}] } { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir + +# From gdb_file_cmd: +if [is_remote host] { + set arg [remote_download host $binfile] + if { $arg == "" } { + perror "download failed" + return -1 + } +} + +gdb_test_no_output "set complaints 3" +gdb_test "file $binfile" "DW_AT_upper_bound.*" "Unresolved upper bound"