[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:
Tom de Vries
2021-07-06 10:58:43 +02:00
parent fbc95f1e11
commit 752e419362
6 changed files with 60 additions and 7 deletions

View File

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

View File

@ -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;

View 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

View 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

View File

@ -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}

View File

@ -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" \
"" \