From 13c3a74afb50b240dbacfd60f91414eae50279ad Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Fri, 28 Feb 2020 16:05:50 +0100 Subject: [PATCH] [gdb/testsuite] Fix psymtab expansion postponement in c-linkage-name.exp 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 shows 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. 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/ChangeLog | 9 +++++ 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 ++++++++++++++++--- 4 files changed, 89 insertions(+), 26 deletions(-) create mode 100644 gdb/testsuite/gdb.base/c-linkage-name-2.c diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index eb81976f26..70bee9c7de 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,12 @@ +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. + 2020-02-28 Luis Machado * gdb.arch/aarch64-pauth.exp: Recognize optional PAC output. 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.