[gdb/testsuite] Fix section matching in find_pc_sect_compunit_symtab

When running test-case gdb.base/list-ambiguous.exp with target board readnow,
we run into:
...
FAIL: gdb.base/list-ambiguous.exp: list ambiguous_fun
...

The test-case contains two static functions ambiguous_fun, one in
list-ambiguous0.c and one in list-ambiguous1.c.

The list command is supposed to show both, but only the one from
list-ambiguous0.c is shown.

This is due to the section check in find_pc_sect_compunit_symtab.  It checks
whether the candidate compunit_symtab contains a symbol that has the required
section.  This check is only done for GLOBAL_BLOCK symbols.

The check succeeds for the compunit_symtab for list-ambiguous0.c, because it
contains main, but it fails for list-ambiguous0.c because it has no global
symbols.

Fix this by extending the section check to STATIC_BLOCK symbols.

Tested on x86_64-linux.

gdb/ChangeLog:

2020-10-27  Tom de Vries  <tdevries@suse.de>

	* symtab.c (find_pc_sect_compunit_symtab): Include STATIC_BLOCK
	symbols in section check.

gdb/testsuite/ChangeLog:

2020-10-27  Tom de Vries  <tdevries@suse.de>

	* gdb.base/list-ambiguous-readnow.exp: New file.
This commit is contained in:
Tom de Vries
2020-10-27 13:28:27 +01:00
parent 61eb46a4fb
commit bd24c5d65b
4 changed files with 43 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2020-10-27 Tom de Vries <tdevries@suse.de>
* symtab.c (find_pc_sect_compunit_symtab): Include STATIC_BLOCK
symbols in section check.
2020-10-27 Tom de Vries <tdevries@suse.de>
* symtab.c (find_pc_sect_compunit_symtab): Use early continue.

View File

@ -2954,13 +2954,19 @@ find_pc_sect_compunit_symtab (CORE_ADDR pc, struct obj_section *section)
struct symbol *sym = NULL;
struct block_iterator iter;
ALL_BLOCK_SYMBOLS (global_block, iter, sym)
for (int b_index = GLOBAL_BLOCK;
b_index <= STATIC_BLOCK && sym == NULL;
++b_index)
{
fixup_symbol_section (sym, obj_file);
if (matching_obj_sections (SYMBOL_OBJ_SECTION (obj_file,
sym),
section))
break;
const struct block *b = BLOCKVECTOR_BLOCK (bv, b_index);
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
fixup_symbol_section (sym, obj_file);
if (matching_obj_sections (SYMBOL_OBJ_SECTION (obj_file,
sym),
section))
break;
}
}
if (sym == NULL)
continue; /* No symbol in this symtab matches

View File

@ -1,3 +1,7 @@
2020-10-27 Tom de Vries <tdevries@suse.de>
* gdb.base/list-ambiguous-readnow.exp: New file.
2020-10-27 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
* gdb.base/condbreak-multi-context.exp: Expand to test forcing

View File

@ -0,0 +1,22 @@
# Copyright 2020 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/>.
# Run list-ambiguous.exp with -readnow.
save_vars { GDBFLAGS } {
append GDBFLAGS " -readnow"
source $srcdir/$subdir/list-ambiguous.exp
}