[RFC 0/7] [gdb/symtab, cc-with-dwz] Fix gdb.cp/breakpoint-locs.exp

Tom de Vries tdevries@suse.de
Fri Aug 25 15:55:39 GMT 2023


When running test-case gdb.cp/breakpoint-locs.exp with target board
cc-with-dwz, we occasionally run into:
...
FAIL: gdb.cp/breakpoint-locs.exp: break N1::C1::baz
...
due to the breakpoint having one instead of two locations.

This is PR symtab/30728.  This series fixes it.

The first five patches are preparation, the fix is in the last two patches.

The fix consists of adding entries to the cooked index for
DW_TAG_inlined_subroutine DIEs, with correct qualified names.

The fix is split up in two patches, as follows:
- the first fixes the target board unix case, and
- the second fixes the target board cc-with-dwz case.

Currently resolving deferred entries is done in the parallel for that
computes the cooked index.  The last patch moves resolving of deferred entries
out of the parallel for.

We can add two optimizations to move some of that computation back into the
parallel for:
- resolve intra-shard dependencies at the end of generating the shard, and
- don't defer backward intra-shard dependencies.

Both of these require to keep track of the range of DIEs that was indexed
in the shard, because currently the parent tracking cannot distuinguish
between the "no parent" and "don't know" cases.

I'd like to have some feedback on the current series before I proceed with
these optimizations, hence this is an RFC at this point.

Tested on x86_64-linux, with target boards unix, cc-with-dwz and
cc-with-dwz-m.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30728

Tom de Vries (7):
  [gdb/symtab] Factor out m_die_range_map and m_deferred_entries usage
  [gdb/symtab] Check effect in parent_map::set_parent
  [gdb/symtab] Handle nullptr parent in parent_map::set_parent
  [gdb/symtab] Add parent_map::dump
  [gdb/symtab] Add debug_handle_deferred_entries
  [gdb/symtab] Add DW_TAG_inlined_subroutine entries in the cooked index
    for c++
  [gdb/symtab] Resolve deferred entries, inter-shard case

 gdb/addrmap.c             |  19 ++++--
 gdb/addrmap.h             |   7 ++-
 gdb/dwarf2/cooked-index.c |  60 +++++++++++++++++++
 gdb/dwarf2/cooked-index.h | 114 +++++++++++++++++++++++++++++++++++-
 gdb/dwarf2/read.c         | 120 +++++++++++++++++++++++++-------------
 5 files changed, 269 insertions(+), 51 deletions(-)


base-commit: b73ffa23bf6ed7f48ce67881d97b4111ce3b8181
-- 
2.35.3



More information about the Gdb-patches mailing list