Don't call compute_and_set_names for partial symbols

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-04-24  Tom Tromey  <tom@tromey.com>

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

gdb/testsuite/ChangeLog
2020-04-24  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.
This commit is contained in:
Tom Tromey
2020-04-24 15:35:01 -06:00
committed by Tom Tromey
parent 76e288d1d2
commit f049a313fc
6 changed files with 75 additions and 102 deletions

View File

@@ -1,3 +1,8 @@
2020-04-24 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (add_partial_symbol): Do not call
compute_and_set_names.
2020-04-24 Tom Tromey <tom@tromey.com> 2020-04-24 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (add_partial_symbol): Use new add_psymbol_to_list * dwarf2/read.c (add_partial_symbol): Use new add_psymbol_to_list

View File

@@ -8376,9 +8376,9 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
if (where.has_value ()) if (where.has_value ())
{ {
psymbol.ginfo.compute_and_set_names (actual_name, if (built_actual_name != nullptr)
built_actual_name != nullptr, actual_name = objfile->intern (actual_name);
objfile->per_bfd); psymbol.ginfo.set_linkage_name (actual_name);
add_psymbol_to_list (psymbol, *where, objfile); add_psymbol_to_list (psymbol, *where, objfile);
} }
} }

View File

@@ -1,3 +1,10 @@
2020-04-24 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.
2020-04-24 Tom de Vries <tdevries@suse.de> 2020-04-24 Tom de Vries <tdevries@suse.de>
* gdb.dwarf2/dw2-bad-mips-linkage-name.exp: Set language of CU to * gdb.dwarf2/dw2-bad-mips-linkage-name.exp: Set language of CU to

View File

@@ -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 */

View File

@@ -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 ()
{
}

View File

@@ -14,19 +14,51 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
load_lib dwarf.exp load_lib dwarf.exp
load_lib dwarf.exp
# This test can only be run on targets which support DWARF-2 and use gas. # This test can only be run on targets which support DWARF-2 and use gas.
if {![dwarf2_support]} { if {![dwarf2_support]} {
return 0 return 0
} }
standard_testfile .S standard_testfile dw2-namespaceless-anonymous.c dw2-namespaceless-anonymous.S
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $binfile \ set asm_file [standard_output_file $srcfile2]
object {nodebug}] != "" } { 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}
}
}
}
}
}
if {[prepare_for_testing ${testfile}.exp ${testfile} \
[list $srcfile $asm_file] {nodebug}] } {
return -1 return -1
} }
clean_restart $testfile
gdb_test "ptype '(anonymous namespace)::v'" "type = myint" gdb_test "ptype '(anonymous namespace)::v'" "type = myint"
gdb_test "p '(anonymous namespace)::v'" " = 1" gdb_test "p/d '(anonymous namespace)::v'" " = 1"