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 /gdb/testsuite | |
parent | fbc95f1e11facf233e89a9c2b4dde06b9aaf4b86 (diff) | |
download | binutils-gdb-752e419362eae28f7fcf6347b333347e472bc10f.tar.gz |
[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.
Diffstat (limited to 'gdb/testsuite')
-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 |
4 files changed, 43 insertions, 7 deletions
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 <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 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 <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 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 "<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 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 "<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" \ "" \ |