From 752e419362eae28f7fcf6347b333347e472bc10f Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Tue, 6 Jul 2021 10:58:43 +0200 Subject: [PATCH] [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 * 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. --- gdb/ChangeLog | 10 ++++++++++ gdb/dwarf2/read.c | 7 +++++++ .../gdb.dwarf2/imported-unit-bp-c++.exp | 18 ++++++++++++++++++ .../gdb.dwarf2/imported-unit-bp-c.exp | 18 ++++++++++++++++++ ...ed-unit-bp.exp => imported-unit-bp.exp.tcl} | 5 +++-- gdb/testsuite/gdb.dwarf2/imported-unit.exp | 9 ++++----- 6 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 gdb/testsuite/gdb.dwarf2/imported-unit-bp-c++.exp create mode 100644 gdb/testsuite/gdb.dwarf2/imported-unit-bp-c.exp rename gdb/testsuite/gdb.dwarf2/{imported-unit-bp.exp => imported-unit-bp.exp.tcl} (98%) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f7a6ccc6d9e..f1071a71d2e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2021-07-06 Tom de Vries + + * 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 * NEWS: Create a new section for the next release branch. diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index fe82175990e..a13a53ebc46 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -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; diff --git a/gdb/testsuite/gdb.dwarf2/imported-unit-bp-c++.exp b/gdb/testsuite/gdb.dwarf2/imported-unit-bp-c++.exp new file mode 100644 index 00000000000..c376113d5e0 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/imported-unit-bp-c++.exp @@ -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 . + +set lang DW_LANG_C_plus_plus + +source $srcdir/$subdir/imported-unit-bp.exp.tcl diff --git a/gdb/testsuite/gdb.dwarf2/imported-unit-bp-c.exp b/gdb/testsuite/gdb.dwarf2/imported-unit-bp-c.exp new file mode 100644 index 00000000000..6f9c3ad8f41 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/imported-unit-bp-c.exp @@ -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 . + +set lang DW_LANG_C + +source $srcdir/$subdir/imported-unit-bp.exp.tcl diff --git a/gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp b/gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp.tcl similarity index 98% rename from gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp rename to gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp.tcl index b6a0f25d2ce..83bca7d8e7a 100644 --- a/gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp +++ b/gdb/testsuite/gdb.dwarf2/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 ""} } { 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} diff --git a/gdb/testsuite/gdb.dwarf2/imported-unit.exp b/gdb/testsuite/gdb.dwarf2/imported-unit.exp index 2bd72a60f40..efce3a03a2e 100644 --- a/gdb/testsuite/gdb.dwarf2/imported-unit.exp +++ b/gdb/testsuite/gdb.dwarf2/imported-unit.exp @@ -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 "" 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" \ "" \ -- 2.30.2