aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2020-02-28 16:05:50 +0100
committerTom de Vries <tdevries@suse.de>2020-02-28 16:05:50 +0100
commit13c3a74afb50b240dbacfd60f91414eae50279ad (patch)
tree42b055cde08cdfffa1edffae4d9a08b662edbee1 /gdb
parent85d2d5bbee1c21c2e3e929cc68fe06d762b3073b (diff)
downloadfsf-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/ChangeLog9
-rw-r--r--gdb/testsuite/gdb.base/c-linkage-name-2.c45
-rw-r--r--gdb/testsuite/gdb.base/c-linkage-name.c23
-rw-r--r--gdb/testsuite/gdb.base/c-linkage-name.exp38
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.