Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Tom de Vries <tdevries@suse.de>
To: gdb-patches@sourceware.org
Cc: Joel Brobecker <brobecker@gnat.com>
Subject: [PATCH][gdb/testsuite] Fix psymtab expansion postponement in c-linkage-name.exp
Date: Fri, 28 Feb 2020 12:11:00 -0000	[thread overview]
Message-ID: <20200228121132.GA23227@delia> (raw)

Hi,

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
show 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.

OK for trunk?

Thanks,
- Tom

[gdb/testsuite] Fix psymtab expansion postponement in c-linkage-name.exp

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/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 ++++++++++++++++++++++----
 3 files changed, 80 insertions(+), 26 deletions(-)

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 <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 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 <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 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.


                 reply	other threads:[~2020-02-28 12:11 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200228121132.GA23227@delia \
    --to=tdevries@suse.de \
    --cc=brobecker@gnat.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox