From patchwork Fri Feb 28 12:11:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 38348 Received: (qmail 57930 invoked by alias); 28 Feb 2020 12:11:40 -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 57922 invoked by uid 89); 28 Feb 2020 12:11:39 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, SPF_PASS autolearn=ham version=3.3.1 spammy=20182020, 2018-2020, re, symtabs X-HELO: mx2.suse.de Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 28 Feb 2020 12:11:38 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 85DFBB403; Fri, 28 Feb 2020 12:11:35 +0000 (UTC) Date: Fri, 28 Feb 2020 13:11:33 +0100 From: Tom de Vries To: gdb-patches@sourceware.org Cc: Joel Brobecker Subject: [PATCH][gdb/testsuite] Fix psymtab expansion postponement in c-linkage-name.exp Message-ID: <20200228121132.GA23227@delia> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.10.1 (2018-07-13) X-IsSubscribed: yes Hi, The test-case gdb.base/c-linkage-name.exp starts with the following test: ... gdb_test "print symada__cS" \ " = {a = 100829103}" \ "print symada__cS before partial symtab expansion" ... However, printing the state of the partial symtabs using maint info psymtabs show that in fact the symtab has already been expanded: ... { psymtab c-linkage-name.c ((struct partial_symtab *) 0x1e27b40)^M readin yes^M ... This is due to set_initial_language, which looks up the main symbol, which expands the psymtab containing main. Fix this by moving all but main into a separate source file c-linkage-name-2.c. Tested on x86_64-linux. OK for trunk? Thanks, - Tom [gdb/testsuite] Fix psymtab expansion postponement in c-linkage-name.exp gdb/testsuite/ChangeLog: 2020-02-28 Tom de Vries * gdb.base/c-linkage-name.c (main): Call do_something_other_cu. (struct wrapper, do_something, mundane/symada__cS): Move ... * gdb.base/c-linkage-name-2.c: ... here. New source file. * gdb.base/c-linkage-name.exp: Add verification of psymtab expansion. Update "print symada__cS before partial symtab expansion" regexp. Update breakpoint location. Flush symbol cache after expansion. --- gdb/testsuite/gdb.base/c-linkage-name-2.c | 45 +++++++++++++++++++++++++++++++ gdb/testsuite/gdb.base/c-linkage-name.c | 23 ++-------------- gdb/testsuite/gdb.base/c-linkage-name.exp | 38 ++++++++++++++++++++++---- 3 files changed, 80 insertions(+), 26 deletions(-) diff --git a/gdb/testsuite/gdb.base/c-linkage-name-2.c b/gdb/testsuite/gdb.base/c-linkage-name-2.c new file mode 100644 index 0000000000..da56fc1e09 --- /dev/null +++ b/gdb/testsuite/gdb.base/c-linkage-name-2.c @@ -0,0 +1,45 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2018-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 . */ + +struct wrapper +{ + int a; +}; + +/* Create a global variable whose name in the assembly code + (aka the "linkage name") is different from the name in + the source code. The goal is to create a symbol described + in DWARF using a DW_AT_linkage_name attribute, with a name + which follows the C++ mangling. + + In this particular case, we chose "symada__cS" which, if it were + demangled, would translate to "symada (char, signed)". */ +struct wrapper mundane asm ("symada__cS") = {0x060287af}; + +void +do_something (struct wrapper *w) +{ + w->a++; +} + +extern void do_something_other_cu (void); + +void +do_something_other_cu (void) +{ + do_something (&mundane); +} diff --git a/gdb/testsuite/gdb.base/c-linkage-name.c b/gdb/testsuite/gdb.base/c-linkage-name.c index 490b698a6c..40f00cce7a 100644 --- a/gdb/testsuite/gdb.base/c-linkage-name.c +++ b/gdb/testsuite/gdb.base/c-linkage-name.c @@ -15,30 +15,11 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -struct wrapper -{ - int a; -}; - -/* Create a global variable whose name in the assembly code - (aka the "linkage name") is different from the name in - the source code. The goal is to create a symbol described - in DWARF using a DW_AT_linkage_name attribute, with a name - which follows the C++ mangling. - - In this particular case, we chose "symada__cS" which, if it were - demangled, would translate to "symada (char, signed)". */ -struct wrapper mundane asm ("symada__cS") = {0x060287af}; - -void -do_something (struct wrapper *w) -{ - w->a++; -} +extern void do_something_other_cu (void); int main (void) { - do_something (&mundane); + do_something_other_cu (); return 0; } diff --git a/gdb/testsuite/gdb.base/c-linkage-name.exp b/gdb/testsuite/gdb.base/c-linkage-name.exp index 235ca605e7..4551c8dcac 100644 --- a/gdb/testsuite/gdb.base/c-linkage-name.exp +++ b/gdb/testsuite/gdb.base/c-linkage-name.exp @@ -17,27 +17,55 @@ # gdb can correctly print arrays with indexes for each element of the # array. -standard_testfile .c +standard_testfile c-linkage-name.c c-linkage-name-2.c -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { +set sources "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile2}" +if { [gdb_compile "${sources}" "${binfile}" executable {debug}] != "" } { untested "failed to compile" return -1 } clean_restart ${binfile} +# Verify that partial symtab expansion for $filename has state $readin + +proc verify_psymtab_expanded { filename readin } { + set cmd "maint info psymtab" + set test "$cmd: $filename: $readin" + set re [multi_line \ + " \{ psymtab \[^\r\n\]*$filename\[^\r\n\]*" \ + " readin $readin" \ + ".*"] + + gdb_test $cmd $re $test +} + +# Verify that partial symtab expansion has not taken place for +# c-linkage-name-2.c. + +verify_psymtab_expanded c-linkage-name-2.c no + # Try to print MUNDANE, but using its linkage name. gdb_test "print symada__cS" \ - " = {a = 100829103}" \ + "'symada__cS' has unknown type; cast it to its declared type" \ "print symada__cS before partial symtab expansion" # Force the symbols to be expanded for the unit that contains # our symada__cS symbol by, e.g. inserting a breakpoint on one # of the founction also provided by the same using. -gdb_test "break main" \ - "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal\\." +gdb_test "break do_something_other_cu" \ + "Breakpoint $decimal at $hex: file .*$srcfile2, line $decimal\\." + +# Verify that partial symtab expansion has taken place for +# c-linkage-name-2.c. + +verify_psymtab_expanded c-linkage-name-2.c yes + +# Flush the symbol cache to prevent the lookup to return the same as before. + +gdb_test "maint flush-symbol-cache" # Try to print MUNDANE using its linkage name again, after partial # symtab expansion.