From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25439 invoked by alias); 27 Nov 2018 21:42:20 -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 25428 invoked by uid 89); 27 Nov 2018 21:42:19 -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,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=Hat X-HELO: mail-wm1-f54.google.com Received: from mail-wm1-f54.google.com (HELO mail-wm1-f54.google.com) (209.85.128.54) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 27 Nov 2018 21:42:16 +0000 Received: by mail-wm1-f54.google.com with SMTP id z18so503170wmc.4 for ; Tue, 27 Nov 2018 13:42:15 -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=GzBAYDLbtXYIZRspIGkhQJ8mOFllKVts3eOq9dEo1v8=; b=UI8cZOOc+h0INio5an0fZS8eqgmaOEQ84cHmNpaviMW1wXUr8K+1hhBCeBhrb4A9hc lucT8of02e8QgsAe0GJS03YKHiLLPTB4KRNFUQr2QgnW4xbzUmTsnxvjpYtEJedMDk/W 2Cbj3hnqgqcE7oH46IVbXyJlJUHP28RkD6UteQAu/W+ZrwPmW/C9//deVOpkhSMPi18s cbgMVDjROKNbBAwK7f81Pb5JnhXs4TW3PDW5NOIRoCg6lQCcSggFYX85t/88mAE8kddz CsnbNHSwbrj3SP65H01GGYh45GrPFgmQHXaxEviXSveiroRwQEDGcdZx+hguwY9+th6f 7sEQ== Return-Path: Received: from localhost (host86-156-236-171.range86-156.btcentralplus.com. [86.156.236.171]) by smtp.gmail.com with ESMTPSA id e17sm5368394wrs.79.2018.11.27.13.42.12 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 27 Nov 2018 13:42:13 -0800 (PST) Date: Tue, 27 Nov 2018 21:42:00 -0000 From: Andrew Burgess To: Pawel Wodkowski Cc: gdb-patches@sourceware.org, murbanski@pl.sii.eu, sbasierski@pl.sii.eu, tim.wiederhake@intel.com, dragos.carciumaru@intel.com, Bernhard Heckel Subject: Re: [PATCH v2 1/7] DWARF: Don't add nameless modules to partial symbol table. Message-ID: <20181127214211.GB18841@embecosm.com> References: <1542663530-140490-1-git-send-email-pwodkowski@pl.sii.eu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1542663530-140490-1-git-send-email-pwodkowski@pl.sii.eu> X-Fortune: Today you'll start getting heavy metal radio on your dentures. 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: 2018-11/txt/msg00487.txt.bz2 * Pawel Wodkowski [2018-11-19 22:38:44 +0100]: > From: Bernhard Heckel > > A name for BLOCK DATA in Fortran is optional. If no > name has been assigned, GDB will crash during read-in of DWARF > when BLOCK DATA is represented via DW_TAG_module. > BLOCK DATA is used for one-time initialization of > non-pointer variables in named common blocks. Thanks for this. Locally I have: GNU Fortran (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6) For me at least this test passes with and without the change to GDB. Can you confirm which Fortran compiler you see the issue with? It probably should be documented in the commit message and in comment around the check in dwarf2read.c. It could also be useful to include examples of the problem DWARF in the commit message in cases like this. > > 2016-06-15 Bernhard Heckel > > gdb/Changelog: > * dwarf2read.c (add_partial_symbol): Skip nameless modules. > > gdb/Testsuite/Changelog: It's 'testsuite' all the patches in this series :) > * gdb.fortran/block-data.f: New. > * gdb.fortran/block-data.exp: New. > --- > gdb/dwarf2read.c | 13 ++++--- > gdb/testsuite/gdb.fortran/block-data.exp | 51 ++++++++++++++++++++++++++++ > gdb/testsuite/gdb.fortran/block-data.f | 58 ++++++++++++++++++++++++++++++++ > 3 files changed, 117 insertions(+), 5 deletions(-) > create mode 100644 gdb/testsuite/gdb.fortran/block-data.exp > create mode 100644 gdb/testsuite/gdb.fortran/block-data.f > > diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c > index d2a8cd44f9a5..89fd4ae15e80 100644 > --- a/gdb/dwarf2read.c > +++ b/gdb/dwarf2read.c > @@ -8995,11 +8995,14 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) > 0, cu->language, objfile); > break; > case DW_TAG_module: > - add_psymbol_to_list (actual_name, strlen (actual_name), > - built_actual_name != NULL, > - MODULE_DOMAIN, LOC_TYPEDEF, -1, > - &objfile->global_psymbols, > - 0, cu->language, objfile); > + /* In Fortran 77 there might be a "BLOCK DATA" module available wihout > + any name. If so, we skip the module as it doesn't bring any value */ You need a full-stop and two spaces at the end, like "...any value. */". > + if (actual_name != nullptr) > + add_psymbol_to_list (actual_name, strlen (actual_name), > + built_actual_name != nullptr, > + MODULE_DOMAIN, LOC_TYPEDEF, -1, > + &objfile->global_psymbols, > + 0, cu->language, objfile); > break; > case DW_TAG_class_type: > case DW_TAG_interface_type: > diff --git a/gdb/testsuite/gdb.fortran/block-data.exp b/gdb/testsuite/gdb.fortran/block-data.exp > new file mode 100644 > index 000000000000..2af250ad3886 > --- /dev/null > +++ b/gdb/testsuite/gdb.fortran/block-data.exp > @@ -0,0 +1,51 @@ > +# Copyright 2018 Free Software Foundation, Inc. > +# > +# Contributed by Intel Corp. Someone else might correct me, but I think "Contributed by..." lines are not supposed to be added to GDB source.. > +# > +# 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 . > + > +# This test is supposed to test anonymous block-data statement. > + > +if { [skip_fortran_tests] } { return -1 } > + > +standard_testfile .f > +load_lib "fortran.exp" > + > +if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug f90}]} { > + return -1 > +} > + > +if ![runto MAIN__] then { > + untested "couldn't run to breakpoint MAIN__" > + return -1 > +} > + > +gdb_test "print doub1" "= 1.11\\d+" "print doub1, default values" > +gdb_test "print doub2" "= 2.22\\d+" "print doub2, default values" > +gdb_test "print char1" "= 'abcdef'" "print char1, default values" > +gdb_test "print char2" "= 'ghijkl'" "print char2, default values" > + > +gdb_breakpoint [gdb_get_line_number "! BP_BEFORE_SUB"] > +gdb_continue_to_breakpoint "! BP_BEFORE_SUB" ".*! BP_BEFORE_SUB.*" > +gdb_test "print doub1" "= 11.11\\d+" "print doub1, before sub" > +gdb_test "print doub2" "= 22.22\\d+" "print doub2, before sub" > +gdb_test "print char1" "= 'ABCDEF'" "print char1, before sub" > +gdb_test "print char2" "= 'GHIJKL'" "print char2, before sub" > + > +gdb_breakpoint [gdb_get_line_number "! BP_SUB"] > +gdb_continue_to_breakpoint "! BP_SUB" ".*! BP_SUB.*" > +gdb_test "print doub1" "= 11.11\\d+" "print char1, in sub" > +gdb_test "print doub2" "= 22.22\\d+" "print doub2, in sub" > +gdb_test "print char1" "= 'ABCDEF'" "print char1, in sub" > +gdb_test "print char2" "= 'GHIJKL'" "print char2, in sub" > diff --git a/gdb/testsuite/gdb.fortran/block-data.f b/gdb/testsuite/gdb.fortran/block-data.f > new file mode 100644 > index 000000000000..a28e687ec885 > --- /dev/null > +++ b/gdb/testsuite/gdb.fortran/block-data.f > @@ -0,0 +1,58 @@ > +! Copyright 2018 Free Software Foundation, Inc. > +! > +! Contributed by Intel Corp. > +! > +! 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 GDB can handle block data without global name > +! > +! MAIN > + PROGRAM bdata > + DOUBLE PRECISION doub1, doub2 > + CHARACTER*6 char1, char2 > + > + COMMON /BLK1/ doub1, char1 > + COMMON /BLK2/ doub2, char2 > + > + doub1 = 11.111 > + doub2 = 22.222 > + char1 = 'ABCDEF' > + char2 = 'GHIJKL' > + CALL sub_block_data ! BP_BEFORE_SUB > + STOP > + END > + > +! BLOCK DATA > + BLOCK DATA > + > + DOUBLE PRECISION doub1, doub2 > + CHARACTER*6 char1, char2 > + > + COMMON /BLK1/ doub1, char1 > + COMMON /BLK2/ doub2, char2 > + DATA doub1, doub2 /1.111, 2.222/ > + DATA char1, char2 /'abcdef', 'ghijkl'/ > + END > + > +! SUBROUTINE > + SUBROUTINE sub_block_data > + > + DOUBLE PRECISION doub1, doub2 > + CHARACTER*6 char1, char2 > + > + COMMON /BLK1/ doub1, char1 > + COMMON /BLK2/ doub2, char2 > + > + char1 = char2; ! BP_SUB > + END > -- > 2.7.4 >