diff options
author | Tom de Vries <tdevries@suse.de> | 2021-07-06 10:58:43 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2021-07-06 10:58:43 +0200 |
commit | 752e419362eae28f7fcf6347b333347e472bc10f (patch) | |
tree | 5a21be53a93c82e0015d7df3254725645737d936 | |
parent | fbc95f1e11facf233e89a9c2b4dde06b9aaf4b86 (diff) | |
download | gdb-752e419362eae28f7fcf6347b333347e472bc10f.zip gdb-752e419362eae28f7fcf6347b333347e472bc10f.tar.gz gdb-752e419362eae28f7fcf6347b333347e472bc10f.tar.bz2 |
[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.
-rw-r--r-- | gdb/ChangeLog | 10 | ||||
-rw-r--r-- | gdb/dwarf2/read.c | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/imported-unit-bp-c++.exp | 18 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/imported-unit-bp-c.exp | 18 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp.tcl (renamed from gdb/testsuite/gdb.dwarf2/imported-unit-bp.exp) | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/imported-unit.exp | 9 |
6 files changed, 60 insertions, 7 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f7a6ccc..f1071a7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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. diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index fe82175..a13a53e 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 0000000..c376113 --- /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 <http://www.gnu.org/licenses/>. + +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 0000000..6f9c3ad --- /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 <http://www.gnu.org/licenses/>. + +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 index b6a0f25..83bca7d 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 "<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} diff --git a/gdb/testsuite/gdb.dwarf2/imported-unit.exp b/gdb/testsuite/gdb.dwarf2/imported-unit.exp index 2bd72a6..efce3a0 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 "<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" \ "" \ |