From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13762 invoked by alias); 16 Sep 2014 23:45:35 -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 13752 invoked by uid 89); 16 Sep 2014 23:45:34 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.5 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 16 Sep 2014 23:45:33 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s8GNjV2I022410 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Tue, 16 Sep 2014 19:45:31 -0400 Received: from localhost (dhcp-10-15-16-169.yyz.redhat.com [10.15.16.169]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s8GNjVX6023552 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 16 Sep 2014 19:45:31 -0400 From: Sergio Durigan Junior To: GDB Patches Subject: Re: [PATCH] Add test for global variable that is nested by another DSO References: <1409866373-16413-1-git-send-email-sergiodj@redhat.com> X-URL: http://www.redhat.com Date: Tue, 16 Sep 2014 23:45:00 -0000 In-Reply-To: <1409866373-16413-1-git-send-email-sergiodj@redhat.com> (Sergio Durigan Junior's message of "Thu, 4 Sep 2014 17:32:53 -0400") Message-ID: <87ioknqgdh.fsf@redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2014-09/txt/msg00560.txt.bz2 On Thursday, September 04 2014, I wrote: > This is just a testcase addition that I am proposing for upstream GDB. Ping. > We have this in our internal tree, and the related RH bug is: > > > > (You might not be able to see all the comments without privileges.) > > This bug is about a global variable that got incorrectly displayed by > GDB. This bug has already been fixed a long time ago by Joel's > commit: > > commit 19630284f570790ebf6d50bfb43caa1f125ee88a > Author: Joel Brobecker > Date: Tue Jun 5 13:50:50 2012 +0000 > > But I think a testcase for it wouldn't hurt. > > So, consider the following scenario: > > $ cat solib1.c > int test; > void c_main (void) > { > test = 42; > } > > $ cat solib2.c > int test; > void b_main (void) > { > test = 42; > } > > $ cat main.c > int main (int argc, char *argv[]) > { > c_main (); > b_main (); > return 0; > } > > $ gcc -g -fPIC -shared -o libSO1.so -c solib1.c > $ gcc -g -fPIC -shared -o libSO2.so -c solib2.c > $ gcc -g -o main -L$PWD -lSO1 -lSO2 main.c > $ LD_LIBRARY_PATH=. gdb -q -batch -ex 'b c_main' -ex r -ex n -ex 'p test' ./main > ... > $1 = 0 > > This happened with GDB before Joel's commit above. Now, things work > and GDB is able to correctly display the nested global variable: > > $ LD_LIBRARY_PATH=. gdb -q -batch -ex 'b c_main' -ex r -ex n -ex 'p test' ./main > ... > $1 = 42 > > The testcase attached tests this behavior. > > gdb/testsuite/ChangeLog: > 2014-09-04 Sergio Durigan Junior > > * gdb.base/global-var-nested-by-dso-solib1.c: New file. > * gdb.base/global-var-nested-by-dso-solib2.c: Likewise. > * gdb.base/global-var-nested-by-dso.c: Likewise. > * gdb.base/global-var-nested-by-dso.exp: Likewise. > --- > .../gdb.base/global-var-nested-by-dso-solib1.c | 24 ++++++++++ > .../gdb.base/global-var-nested-by-dso-solib2.c | 24 ++++++++++ > gdb/testsuite/gdb.base/global-var-nested-by-dso.c | 24 ++++++++++ > .../gdb.base/global-var-nested-by-dso.exp | 55 ++++++++++++++++++++++ > 4 files changed, 127 insertions(+) > create mode 100644 gdb/testsuite/gdb.base/global-var-nested-by-dso-solib1.c > create mode 100644 gdb/testsuite/gdb.base/global-var-nested-by-dso-solib2.c > create mode 100644 gdb/testsuite/gdb.base/global-var-nested-by-dso.c > create mode 100644 gdb/testsuite/gdb.base/global-var-nested-by-dso.exp > > diff --git a/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib1.c b/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib1.c > new file mode 100644 > index 0000000..a3428da > --- /dev/null > +++ b/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib1.c > @@ -0,0 +1,24 @@ > +/* Copyright 2014 Free Software Foundation, Inc. > + > + This file is part of GDB. > + > + 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 test; > + > +void > +c_main (void) > +{ > + test = 42; > +} > diff --git a/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib2.c b/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib2.c > new file mode 100644 > index 0000000..2c58166 > --- /dev/null > +++ b/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib2.c > @@ -0,0 +1,24 @@ > +/* Copyright 2014 Free Software Foundation, Inc. > + > + This file is part of GDB. > + > + 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 test; > + > +void > +b_main (void) > +{ > + test = 42; > +} > diff --git a/gdb/testsuite/gdb.base/global-var-nested-by-dso.c b/gdb/testsuite/gdb.base/global-var-nested-by-dso.c > new file mode 100644 > index 0000000..3b63096 > --- /dev/null > +++ b/gdb/testsuite/gdb.base/global-var-nested-by-dso.c > @@ -0,0 +1,24 @@ > +/* Copyright 2014 Free Software Foundation, Inc. > + > + This file is part of GDB. > + > + 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 (int argc, char *argv[]) > +{ > + c_main (); > + b_main (); > + return 0; > +} > diff --git a/gdb/testsuite/gdb.base/global-var-nested-by-dso.exp b/gdb/testsuite/gdb.base/global-var-nested-by-dso.exp > new file mode 100644 > index 0000000..e1e208a > --- /dev/null > +++ b/gdb/testsuite/gdb.base/global-var-nested-by-dso.exp > @@ -0,0 +1,55 @@ > +# Copyright 2014 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 . > + > +if { [skip_shlib_tests] } { > + return 0 > +} > + > +standard_testfile > + > +set lib1name $testfile-solib1 > +set srcfile_lib1 $srcdir/$subdir/$lib1name.c > +set binfile_lib1 [standard_output_file $lib1name.so] > + > +set lib2name $testfile-solib2 > +set srcfile_lib2 $srcdir/$subdir/$lib2name.c > +set binfile_lib2 [standard_output_file $lib2name.so] > + > +if { [gdb_compile_shlib $srcfile_lib1 $binfile_lib1 \ > + [list debug additional_flags=-fPIC]] != "" } { > + untested "Could not compile $binfile_lib1." > + return -1 > +} > + > +if { [gdb_compile_shlib $srcfile_lib2 $binfile_lib2 \ > + [list debug additional_flags=-fPIC]] != "" } { > + untested "Could not compile $binfile_lib2." > + return -1 > +} > + > +if { [gdb_compile $srcdir/$subdir/$srcfile $binfile executable \ > + [list debug shlib=$binfile_lib1 shlib=$binfile_lib2]] != "" } { > + return -1 > +} > + > +clean_restart $binfile > + > +if { ![runto_main] } { > + return -1 > +} > + > +gdb_test "next" "$decimal.*b_main \\(\\);" > +gdb_test "next" "$decimal.*return 0;" > +gdb_test "print test" " = 42" > -- > 1.9.3 -- Sergio GPG key ID: 0x65FC5E36 Please send encrypted e-mail if possible http://sergiodj.net/