diff options
author | Tom de Vries <tdevries@suse.de> | 2020-02-28 16:05:50 +0100 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2020-02-28 16:05:50 +0100 |
commit | 13c3a74afb50b240dbacfd60f91414eae50279ad (patch) | |
tree | 42b055cde08cdfffa1edffae4d9a08b662edbee1 /gdb | |
parent | 85d2d5bbee1c21c2e3e929cc68fe06d762b3073b (diff) | |
download | fsf-binutils-gdb-13c3a74afb50b240dbacfd60f91414eae50279ad.zip fsf-binutils-gdb-13c3a74afb50b240dbacfd60f91414eae50279ad.tar.gz fsf-binutils-gdb-13c3a74afb50b240dbacfd60f91414eae50279ad.tar.bz2 |
[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 <tdevries@suse.de>
* 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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/c-linkage-name-2.c | 45 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/c-linkage-name.c | 23 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/c-linkage-name.exp | 38 |
4 files changed, 89 insertions, 26 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index eb81976..70bee9c 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2020-02-28 Tom de Vries <tdevries@suse.de> + + * 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 <luis.machado@linaro.org> * 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 0000000..da56fc1 --- /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 <http://www.gnu.org/licenses/>. */ + +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 490b698..40f00cc 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 <http://www.gnu.org/licenses/>. */ -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 235ca60..4551c8d 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. |