Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: [PATCH 07/10] Don't call compute_and_set_names for partial symbols
Date: Wed, 25 Mar 2020 14:07:12 -0600	[thread overview]
Message-ID: <20200325200715.12947-8-tom@tromey.com> (raw)
In-Reply-To: <20200325200715.12947-1-tom@tromey.com>

As mentioned in another thread, there's currently no need to call
compute_and_set_names for partial symbols.  Because the DWARF partial
symbol reader constructs demangled names, this call can only demangle
a name by mistake.

So, this patch changes the DWARF reader to simply set the linkage name
on the new symbol.  This is equivalent to what was done before.  There
should be no user-visible change from this patch, aside from gdb
speeding up a bit.

... there *should* be, but this regressed
dw2-namespaceless-anonymous.exp.  However, upon examination, I think
that test is incorrect.  It puts a mangled name into DW_AT_name, and
it puts the variable at the top level, not in a namespace.  This isn't
what C++ compilers ought to do.  So, this patch also updates the test
case.

gdb/ChangeLog
2020-03-25  Tom Tromey  <tom@tromey.com>

	* dwarf2/read.c (add_partial_symbol): Do not call
	compute_and_set_names.

gdb/testsuite/ChangeLog
2020-03-25  Tom Tromey  <tom@tromey.com>

	* gdb.dwarf2/dw2-namespaceless-anonymous.S: Remove.
	* gdb.dwarf2/dw2-namespaceless-anonymous.c: New file.
	* gdb.dwarf2/dw2-namespaceless-anonymous.exp: Use DWARF
	assembler.
---
 gdb/ChangeLog                                 |  5 +
 gdb/dwarf2/read.c                             |  6 +-
 gdb/testsuite/ChangeLog                       |  7 ++
 .../gdb.dwarf2/dw2-namespaceless-anonymous.S  | 93 -------------------
 .../gdb.dwarf2/dw2-namespaceless-anonymous.c  | 22 +++++
 .../dw2-namespaceless-anonymous.exp           | 44 +++++++--
 6 files changed, 75 insertions(+), 102 deletions(-)
 delete mode 100644 gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S
 create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.c

diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index c3723684386..2bc7b521f2e 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -8368,9 +8368,9 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
 
   if (where.has_value ())
     {
-      psymbol.ginfo.compute_and_set_names (actual_name,
-					   built_actual_name != nullptr,
-					   objfile->per_bfd);
+      if (built_actual_name != nullptr)
+	actual_name = objfile->intern (actual_name);
+      psymbol.ginfo.set_linkage_name (actual_name);
       add_psymbol_to_list (psymbol, *where, objfile);
     }
 }
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S
deleted file mode 100644
index e5b1d66bb3a..00000000000
--- a/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S
+++ /dev/null
@@ -1,93 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2012-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/>.  */
-
-	.data
-var:	.4byte	1
-
-	.section .debug_info
-.Lcu1_begin:
-	/* CU header */
-	.4byte	.Lcu1_end - .Lcu1_start		/* Length of Compilation Unit */
-.Lcu1_start:
-	.2byte	2				/* DWARF Version */
-	.4byte	.Labbrev1_begin			/* Offset into abbrev section */
-	.byte	4				/* Pointer size */
-
-	/* CU die */
-	.uleb128 1				/* Abbrev: DW_TAG_compile_unit */
-	.ascii	"file1.txt\0"			/* DW_AT_name */
-	.ascii	"GNU C 3.3.3\0"			/* DW_AT_producer */
-	.byte	4				/* DW_LANG_C_plus_plus (C++) */
-
-.Ltype_myint:
-	.uleb128	2			/* Abbrev: DW_TAG_base_type */
-	.ascii		"myint\0"			/* DW_AT_name */
-	.byte		4			/* DW_AT_byte_size */
-	.byte		5			/* DW_AT_encoding */
-
-	.uleb128	7			/* Abbrev: DW_TAG_variable (location) */
-	.ascii		"_ZN12_GLOBAL__N_11vE\0" /* DW_AT_name = "(anonymous namespace)::v" */
-	.byte		2f - 1f			/* DW_AT_location */
-1:	.byte		3			/*   DW_OP_addr */
-	.4byte		var			/*   <addr> */
-2:	.4byte		.Ltype_myint-.Lcu1_begin /* DW_AT_type */
-
-	.byte		0			/* End of children of CU */
-
-.Lcu1_end:
-
-/* Abbrev table */
-	.section .debug_abbrev
-.Labbrev1_begin:
-	.uleb128	1			/* Abbrev code */
-	.uleb128	0x11			/* DW_TAG_compile_unit */
-	.byte		1			/* has_children */
-	.uleb128	0x3			/* DW_AT_name */
-	.uleb128	0x8			/* DW_FORM_string */
-	.uleb128	0x25			/* DW_AT_producer */
-	.uleb128	0x8			/* DW_FORM_string */
-	.uleb128	0x13			/* DW_AT_language */
-	.uleb128	0xb			/* DW_FORM_data1 */
-	.byte		0x0			/* Terminator */
-	.byte		0x0			/* Terminator */
-
-	.uleb128	2			/* Abbrev code */
-	.uleb128	0x24			/* DW_TAG_base_type */
-	.byte		0			/* has_children */
-	.uleb128	0x3			/* DW_AT_name */
-	.uleb128	0x8			/* DW_FORM_string */
-	.uleb128	0xb			/* DW_AT_byte_size */
-	.uleb128	0xb			/* DW_FORM_data1 */
-	.uleb128	0x3e			/* DW_AT_encoding */
-	.uleb128	0xb			/* DW_FORM_data1 */
-	.byte		0x0			/* Terminator */
-	.byte		0x0			/* Terminator */
-
-	.uleb128	7			/* Abbrev code (location) */
-	.uleb128	0x34			/* DW_TAG_variable */
-	.byte		0			/* has_children */
-	.uleb128	0x3			/* DW_AT_name */
-	.uleb128	0x8			/* DW_FORM_string */
-	.uleb128	0x2			/* DW_AT_location */
-	.uleb128	0xa			/* DW_FORM_block1 */
-	.uleb128	0x49			/* DW_AT_type */
-	.uleb128	0x13			/* DW_FORM_ref4 */
-	.byte		0x0			/* Terminator */
-	.byte		0x0			/* Terminator */
-
-	.byte		0x0			/* Terminator */
-	.byte		0x0			/* Terminator */
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.c b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.c
new file mode 100644
index 00000000000..3c5e258090c
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.c
@@ -0,0 +1,22 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 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/>.  */
+
+char _ZN12_GLOBAL__N_11vE = 1;
+
+int main ()
+{
+}
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp
index 1edc468d62f..5b61a6ba928 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp
@@ -14,19 +14,51 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 load_lib dwarf.exp
 
+load_lib dwarf.exp
+
 # This test can only be run on targets which support DWARF-2 and use gas.
 if {![dwarf2_support]} {
     return 0  
 }
 
-standard_testfile .S
+standard_testfile dw2-namespaceless-anonymous.c dw2-namespaceless-anonymous.S
 
-if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $binfile \
-	   object {nodebug}] != "" } {
-    return -1
+set asm_file [standard_output_file $srcfile2]
+Dwarf::assemble $asm_file {
+    global srcdir subdir srcfile
+
+    cu {} {
+	DW_TAG_compile_unit {
+	    {DW_AT_language @DW_LANG_C_plus_plus}
+	    {DW_AT_name     dw2-namespaceless-anonymous.c}
+	    {DW_AT_comp_dir /tmp}
+	} {
+	    declare_labels myint
+
+	    myint: DW_TAG_base_type {
+		{DW_AT_byte_size 1 DW_FORM_sdata}
+		{DW_AT_encoding  @DW_ATE_signed}
+		{DW_AT_name      myint}
+	    }
+
+	    DW_TAG_namespace {} {
+		DW_TAG_variable {
+		    {DW_AT_name v}
+		    {DW_AT_linkage_name _ZN12_GLOBAL__N_11vE}
+		    {DW_AT_location {
+			DW_OP_addr [gdb_target_symbol _ZN12_GLOBAL__N_11vE]
+		    } SPECIAL_expr}
+		    {DW_AT_type :$myint}
+		}
+	    }
+	}
+    }
 }
 
-clean_restart $testfile
+if {[prepare_for_testing ${testfile}.exp ${testfile} \
+	 [list $srcfile $asm_file] {nodebug}] } {
+    return -1
+}
 
 gdb_test "ptype '(anonymous namespace)::v'" "type = myint"
-gdb_test "p '(anonymous namespace)::v'" " = 1"
+gdb_test "p/d '(anonymous namespace)::v'" " = 1"
-- 
2.17.2



  parent reply	other threads:[~2020-03-25 20:07 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-25 20:07 [PATCH 00/10] Fix two name-related bugs in DWARF reader Tom Tromey
2020-03-25 20:07 ` [PATCH 01/10] Convert symbol_set_demangled_name to a method Tom Tromey
2020-03-25 20:07 ` [PATCH 02/10] Move the rust "{" hack Tom Tromey
2020-03-25 20:07 ` [PATCH 03/10] Fix two latent Rust bugs Tom Tromey
2020-03-25 20:07 ` [PATCH 04/10] Add attribute::value_as_string method Tom Tromey
2020-03-25 20:07 ` [PATCH 05/10] Introduce new add_psymbol_to_list overload Tom Tromey
2020-03-25 20:07 ` [PATCH 06/10] Use the " Tom Tromey
2020-03-25 20:07 ` Tom Tromey [this message]
2020-03-25 20:07 ` [PATCH 08/10] Use the linkage name if it exists Tom Tromey
2020-04-24 16:06   ` Tom de Vries
2020-04-24 18:09     ` Tom de Vries
2020-04-24 20:50       ` Tom Tromey
2020-04-24 21:27         ` [committed][gdb/testsuite] Fix language in dw2-bad-mips-linkage-name.exp Tom de Vries
2020-04-24 21:34           ` Tom Tromey
2020-03-25 20:07 ` [PATCH 09/10] Fix Rust test cases Tom Tromey
2020-03-25 20:07 ` [PATCH 10/10] Remove symbol_get_demangled_name Tom Tromey
2020-03-25 22:48 ` [PATCH 00/10] Fix two name-related bugs in DWARF reader Christian Biesinger
2020-03-25 23:50   ` Tom Tromey
2020-04-24 14:18 ` Tom de Vries
2020-04-24 14:45   ` Tom Tromey

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=20200325200715.12947-8-tom@tromey.com \
    --to=tom@tromey.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