From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 116551 invoked by alias); 2 Dec 2018 21:01:54 -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 116534 invoked by uid 89); 2 Dec 2018 21:01:53 -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=H*c:iso-8859-2, H*r:15.1.1531.3, objfile, supposed X-HELO: mail.pl.sii.eu Received: from mail.pl.sii.eu (HELO mail.pl.sii.eu) (91.227.21.9) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 02 Dec 2018 21:01:49 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.pl.sii.eu (Postfix) with ESMTP id 285FA375E; Sun, 2 Dec 2018 22:01:47 +0100 (CET) Received: from mail.pl.sii.eu ([127.0.0.1]) by localhost (mail.pl.sii.eu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id W42Ui_JQhDU6; Sun, 2 Dec 2018 22:01:47 +0100 (CET) Received: from PRDSWEX16W2.SIIPOLSKA.PL (PRDSWEX16W2.SIIPOLSKA.PL [10.254.15.206]) by mail.pl.sii.eu (Postfix) with ESMTPS id 0B8F23754; Sun, 2 Dec 2018 22:01:47 +0100 (CET) Received: from PRDSWEX16W1.SIIPOLSKA.PL (10.254.15.205) by PRDSWEX16W2.SIIPOLSKA.PL (10.254.15.206) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1531.3; Sun, 2 Dec 2018 22:01:54 +0100 Received: from PRDSWEX16W1.SIIPOLSKA.PL ([fe80::3c9b:ace1:3462:3aae]) by PRDSWEX16W1.SIIPOLSKA.PL ([fe80::3c9b:ace1:3462:3aae%9]) with mapi id 15.01.1531.003; Sun, 2 Dec 2018 22:01:46 +0100 From: =?iso-8859-2?Q?Pawe=B3_W=F3dkowski?= To: Andrew Burgess CC: "gdb-patches@sourceware.org" Subject: Re: [PATCH v2 1/7] DWARF: Don't add nameless modules to partial symbol table. Date: Sun, 02 Dec 2018 21:01:00 -0000 Message-ID: References: <1542663530-140490-1-git-send-email-pwodkowski@pl.sii.eu> <20181127214211.GB18841@embecosm.com> Content-Type: text/plain; charset="iso-8859-2" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-SW-Source: 2018-12/txt/msg00016.txt.bz2 Thanks for review. See comments. On 27.11.2018 22:41, Andrew Burgess wrote: > * Pawel Wodkowski [2018-11-19 22:38:44 +0100]: >=20 >> 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. >=20 > Thanks for this. >=20 > Locally I have: >=20 > GNU Fortran (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6) >=20 > For me at least this test passes with and without the change to GDB. >=20 > 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. >=20 Indeed, I checked this for GNU fortran it there is no issue. But for=20 Intel fortran compiler ifort I'm getting crash in add_partial_symbol=20 function: $ ifort block-data.f -g -o block-data $ gdb --args ../../gdb ./block-data << ... >> GNU gdb (GDB) 8.2.50.20181114-git Copyright (C) 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later=20 This is free software: you are free to change and redistribute it. << ... >> Program received signal SIGSEGV, Segmentation fault. __strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120 120 ../sysdeps/x86_64/multiarch/../strlen.S: No such file or directory. (gdb) bt #0 __strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120 #1 0x000055555575dee9 in add_partial_symbol=20 (pdi=3Dpdi@entry=3D0x5555562ca490, cu=3Dcu@entry=3D0x5555562c34b0) at=20 dwarf2read.c:8998 #2 0x000055555575e59b in add_partial_namespace (cu=3D0x5555562c34b0,=20 set_addrmap=3D0, highpc=3D0x7fffffffda90, lowpc=3D0x7fffffffda88,=20 pdi=3D0x5555562ca490) at dwarf2read.c:9058 #3 scan_partial_symbols (first_die=3D,=20 lowpc=3Dlowpc@entry=3D0x7fffffffda88, highpc=3Dhighpc@entry=3D0x7fffffffda9= 0,=20 set_addrmap=3D0, cu=3Dcu@entry=3D0x5555562c34b0) at dwarf2read.c:8682 #4 0x000055555575ee1e in process_psymtab_comp_unit_reader=20 (reader=3Dreader@entry=3D0x7fffffffdb50, info_ptr=3D0x55555617ddb3 "\002\02= 5",=20 , comp_unit_die=3D0x5555562ca0f0, has_children=3D, data=3Ddata@entry=3D0x7fffffffdbf0) at= =20 dwarf2read.c:8033 << ... >> >> >> 2016-06-15 Bernhard Heckel >> >> gdb/Changelog: >> * dwarf2read.c (add_partial_symbol): Skip nameless modules. >> >> gdb/Testsuite/Changelog: >=20 > It's 'testsuite' all the patches in this series :) >=20 >> * 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 !=3D NULL, >> - MODULE_DOMAIN, LOC_TYPEDEF, -1, >> - &objfile->global_psymbols, >> - 0, cu->language, objfile); >> + /* In Fortran 77 there might be a "BLOCK DATA" module available w= ihout >> + any name. If so, we skip the module as it doesn't bring any va= lue */ >=20 > You need a full-stop and two spaces at the end, like "...any value. */". >=20 Ok, will fix. >> + if (actual_name !=3D nullptr) >> + add_psymbol_to_list (actual_name, strlen (actual_name), >> + built_actual_name !=3D 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/gd= b.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. >=20 > Someone else might correct me, but I think "Contributed by..." lines > are not supposed to be added to GDB source.. >=20 Will remove it. >> +# >> +# 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" "=3D 1.11\\d+" "print doub1, default values" >> +gdb_test "print doub2" "=3D 2.22\\d+" "print doub2, default values" >> +gdb_test "print char1" "=3D 'abcdef'" "print char1, default values" >> +gdb_test "print char2" "=3D '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" "=3D 11.11\\d+" "print doub1, before sub" >> +gdb_test "print doub2" "=3D 22.22\\d+" "print doub2, before sub" >> +gdb_test "print char1" "=3D 'ABCDEF'" "print char1, before sub" >> +gdb_test "print char2" "=3D '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" "=3D 11.11\\d+" "print char1, in sub" >> +gdb_test "print doub2" "=3D 22.22\\d+" "print doub2, in sub" >> +gdb_test "print char1" "=3D 'ABCDEF'" "print char1, in sub" >> +gdb_test "print char2" "=3D '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 =3D 11.111 >> + doub2 =3D 22.222 >> + char1 =3D 'ABCDEF' >> + char2 =3D '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 =3D char2; ! BP_SUB >> + END >> --=20 >> 2.7.4 >> >=20