mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 19:50:13 +08:00
[gdb/symtab] Fix skipping of import of C++ CU
Tom Tromey observed that when changing the language in gdb.dwarf2/imported-unit-bp.exp from c to c++, the test failed. This is due to this code in process_imported_unit_die: ... /* We're importing a C++ compilation unit with tag DW_TAG_compile_unit into another compilation unit, at root level. Regard this as a hint, and ignore it. */ if (die->parent && die->parent->parent == NULL && per_cu->unit_type == DW_UT_compile && per_cu->lang == language_cplus) return; ... which should have a partial symtabs counterpart. Add the missing counterpart in process_psymtab_comp_unit. Tested on x86_64-linux (openSUSE Leap 15.2), no regressions for config: - using default gcc version 7.5.0 (with 5 unexpected FAILs) - gcc 10.3.0 and target board unix/-flto/-O0/-flto-partition=none/-ffat-lto-objects (with 1000 unexpected FAILs) gdb/ChangeLog: 2021-07-06 Tom de Vries <tdevries@suse.de> * dwarf2/read.c (scan_partial_symbols): Skip top-level imports of c++ CU. * testsuite/gdb.dwarf2/imported-unit-bp.exp: Moved to ... * testsuite/gdb.dwarf2/imported-unit-bp.exp.tcl: ... here. * testsuite/gdb.dwarf2/imported-unit-bp-c++.exp: New test. * testsuite/gdb.dwarf2/imported-unit-bp-c.exp: New test. * testsuite/gdb.dwarf2/imported-unit.exp: Update.
This commit is contained in:
@ -1,3 +1,13 @@
|
||||
2021-07-06 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
* dwarf2/read.c (scan_partial_symbols): Skip top-level imports of
|
||||
c++ CU.
|
||||
* testsuite/gdb.dwarf2/imported-unit-bp.exp: Moved to ...
|
||||
* testsuite/gdb.dwarf2/imported-unit-bp.exp.tcl: ... here.
|
||||
* testsuite/gdb.dwarf2/imported-unit-bp-c++.exp: New test.
|
||||
* testsuite/gdb.dwarf2/imported-unit-bp-c.exp: New test.
|
||||
* testsuite/gdb.dwarf2/imported-unit.exp: Update.
|
||||
|
||||
2021-07-03 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* NEWS: Create a new section for the next release branch.
|
||||
|
@ -7639,6 +7639,13 @@ scan_partial_symbols (struct partial_die_info *first_die, CORE_ADDR *lowpc,
|
||||
process_psymtab_comp_unit (per_cu, cu->per_objfile, true,
|
||||
cu->per_cu->lang);
|
||||
|
||||
if (pdi->die_parent == nullptr
|
||||
&& per_cu->unit_type == DW_UT_compile
|
||||
&& per_cu->lang == language_cplus)
|
||||
/* Regard import as hint. See corresponding code in
|
||||
process_imported_unit_die. */
|
||||
break;
|
||||
|
||||
cu->per_cu->imported_symtabs_push (per_cu);
|
||||
}
|
||||
break;
|
||||
|
18
gdb/testsuite/gdb.dwarf2/imported-unit-bp-c++.exp
Normal file
18
gdb/testsuite/gdb.dwarf2/imported-unit-bp-c++.exp
Normal file
@ -0,0 +1,18 @@
|
||||
# Copyright 2021 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/>.
|
||||
|
||||
set lang DW_LANG_C_plus_plus
|
||||
|
||||
source $srcdir/$subdir/imported-unit-bp.exp.tcl
|
18
gdb/testsuite/gdb.dwarf2/imported-unit-bp-c.exp
Normal file
18
gdb/testsuite/gdb.dwarf2/imported-unit-bp-c.exp
Normal file
@ -0,0 +1,18 @@
|
||||
# Copyright 2021 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/>.
|
||||
|
||||
set lang DW_LANG_C
|
||||
|
||||
source $srcdir/$subdir/imported-unit-bp.exp.tcl
|
@ -38,13 +38,14 @@ set asm_file [standard_output_file $srcfile2]
|
||||
Dwarf::assemble $asm_file {
|
||||
global srcdir subdir srcfile srcfile
|
||||
global build_options
|
||||
global lang
|
||||
declare_labels lines_label callee_subprog_label cu_label
|
||||
|
||||
get_func_info func "$build_options additional_flags=-DWITHMAIN"
|
||||
|
||||
cu {} {
|
||||
compile_unit {
|
||||
{language @DW_LANG_C}
|
||||
{language @$lang}
|
||||
{name "<artificial>"}
|
||||
} {
|
||||
imported_unit {
|
||||
@ -56,7 +57,7 @@ Dwarf::assemble $asm_file {
|
||||
cu {} {
|
||||
cu_label: compile_unit {
|
||||
{producer "gcc"}
|
||||
{language @DW_LANG_C}
|
||||
{language @$lang}
|
||||
{name ${srcfile}}
|
||||
{comp_dir "/tmp"}
|
||||
{low_pc 0 addr}
|
@ -136,15 +136,14 @@ gdb_test_no_output "set language c++"
|
||||
|
||||
set psymtabs_p [psymtabs_p]
|
||||
|
||||
# Verify that the partial symtab for the unit importing the partial unit does
|
||||
# not contain the static partial symbol int, which is defined in the partial
|
||||
# unit. Test-case for PR25646.
|
||||
# Verify that the partial symtab for CU "<artificial>" does
|
||||
# not contain the static partial symbol int, which is defined in the
|
||||
# CU "imported_unit.c". Test-case for PR25646.
|
||||
set test "no static partial symbols in importing unit"
|
||||
if { $psymtabs_p } {
|
||||
gdb_test "main print psymbols" \
|
||||
[multi_line \
|
||||
" Depends on 1 other partial symtabs\." \
|
||||
"\[^\r\n\]*" \
|
||||
" Depends on 0 other partial symtabs\." \
|
||||
" Global partial symbols:" \
|
||||
" `main', function, $hex" \
|
||||
"" \
|
||||
|
Reference in New Issue
Block a user