[gdb/testsuite] Fix psymtab expansion postponement in c-linkage-name.exp
authorTom de Vries <tdevries@suse.de>
Fri, 28 Feb 2020 15:05:50 +0000 (16:05 +0100)
committerTom de Vries <tdevries@suse.de>
Fri, 28 Feb 2020 15:05:50 +0000 (16:05 +0100)
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.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/c-linkage-name-2.c [new file with mode: 0644]
gdb/testsuite/gdb.base/c-linkage-name.c
gdb/testsuite/gdb.base/c-linkage-name.exp

index eb81976f26cbc8ed43f14aea0582835d2c8ed00f..70bee9c7de5aa0d63f6f6278810082b040e5cc3d 100644 (file)
@@ -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 (file)
index 0000000..da56fc1
--- /dev/null
@@ -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);
+}
index 490b698a6c6869dfa6fc4e7d82e56a01b2972991..40f00cce7a2d106ec2a37902185dad23d568a224 100644 (file)
    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;
 }
index 235ca605e7777119fdf25c1a67257e9e06c25ba9..4551c8dcac2fc15bc90b4a8b01a1f38335f82681 100644 (file)
 # 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.