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.
+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.
--- /dev/null
+/* 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);
+}
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;
}
# 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.