public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tom de Vries <tdevries@suse.de>
To: gdb-patches@sourceware.org
Subject: [PATCH 11/13] [gdb/symtab] Don't defer backward refs, inter-cu intra-shard case
Date: Mon,  2 Oct 2023 14:50:49 +0200	[thread overview]
Message-ID: <20231002125051.29911-12-tdevries@suse.de> (raw)
In-Reply-To: <20231002125051.29911-1-tdevries@suse.de>

Consider the test-case gdb.dwarf2/backward-spec-inter-cu.exp with
debug_handle_deferred_entries:
...
$ gdb -q -batch -iex "maint set worker-threads 0" backward-spec-inter-cu:
handle_deferred_entries, intra-shard case
parent map
  0x00000000000000c8 0x3254a80 (0xc7)
  0x00000000000000d3 0x0
  0x00000000000000e1 0x2935500 (deferred)
  0x00000000000000e2 0x0
parent valid map
  0x000000000000002e 0x1
  0x0000000000000045 0x0
  0x0000000000000062 0x1
  0x0000000000000084 0x0
  0x00000000000000be 0x1
  0x00000000000000d4 0x0
  0x00000000000000e1 0x1
  0x00000000000000eb 0x0
  0x0000000000000123 0x1
  0x00000000000002ae 0x0
Resolve deferred: 0xe1 -> 0xcb: 0xc7
handle_deferred_entries, inter-shard case
  0x00000000000000c8 0x3254a80 (0xc7)
  0x00000000000000d3 0x0
  0x00000000000000e1 0x2935500 (deferred)
  0x00000000000000e2 0x0
...

It has a backward inter-cu, intra-shard dependency, which is first deferred
and then resolved in the intra-shard case.

However, we can handle this more optimally: we can not defer and resolve
immediately, because by the time that we process 0xe1, 0xcb is already
processed by the same shard, and consequently present in the parent map.

Fix this by not deferring dependencies that are present in the shard's parent
map, such that we have instead:
...
handle_deferred_entries, intra-shard case
parent map
  0x00000000000000c8 0x3d36cb0 (0xc7)
  0x00000000000000d3 0x0
parent valid map
  0x000000000000002e 0x1
  0x0000000000000045 0x0
  0x0000000000000062 0x1
  0x0000000000000084 0x0
  0x00000000000000be 0x1
  0x00000000000000d4 0x0
  0x00000000000000e1 0x1
  0x00000000000000eb 0x0
  0x0000000000000123 0x1
  0x00000000000002ae 0x0
handle_deferred_entries, inter-shard case
  0x00000000000000c8 0x3d36cb0 (0xc7)
  0x00000000000000d3 0x0
...

Tested on x86_64-linux.
---
 gdb/dwarf2/read.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index fca83aed5f7..6f218f172a9 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -4701,6 +4701,12 @@ class cooked_index_storage
     m_index->set_parent_valid (start, end);
   }
 
+  /* Return true if find_parents can be relied upon.  */
+  bool parent_valid (CORE_ADDR addr)
+  {
+    return m_index->parent_valid (addr);
+  }
+
 private:
 
   /* Hash function for a cutu_reader.  */
@@ -4855,6 +4861,12 @@ class cooked_indexer
   {
     m_index_storage->set_parent_valid (start, end);
   }
+
+  /* Return true if find_parents can be relied upon.  */
+  bool parent_valid (CORE_ADDR addr)
+  {
+    return m_index_storage->parent_valid (addr);
+  }
 };
 
 /* Subroutine of dwarf2_build_psymtabs_hard to simplify it.
@@ -16391,7 +16403,11 @@ cooked_indexer::scan_attributes (dwarf2_per_cu_data *scanning_per_cu,
 	  const gdb_byte *new_info_ptr = (new_reader->buffer
 					  + to_underlying (origin_offset));
 
-	  if ((new_reader->cu != reader->cu
+	  CORE_ADDR origin_addr = form_addr (origin_offset, origin_is_dwz,
+					     reader->cu->per_cu->is_debug_types);
+
+	  if (((new_reader->cu != reader->cu
+		&& !parent_valid (origin_addr))
 	       || (new_reader->cu == reader->cu
 		   && new_info_ptr > watermark_ptr))
 	      && *parent_entry == nullptr)
-- 
2.35.3


  parent reply	other threads:[~2023-10-02 12:50 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-02 12:50 [PATCH 00/13] [gdb/symtab, cc-with-dwz] Fix gdb.cp/breakpoint-locs.exp Tom de Vries
2023-10-02 12:50 ` [PATCH 01/13] [gdb/symtab] Factor out m_die_range_map usage Tom de Vries
2023-10-09 20:33   ` Alexandra Petlanova Hajkova
2023-10-09 21:43     ` Tom de Vries
2023-10-20 19:50   ` Tom Tromey
2023-11-30 12:55     ` Tom de Vries
2023-10-02 12:50 ` [PATCH 02/13] [gdb/symtab] Check effect in parent_map::set_parent Tom de Vries
2023-10-20 19:51   ` Tom Tromey
2023-11-30 14:05     ` Tom de Vries
2023-10-02 12:50 ` [PATCH 03/13] [gdb/symtab] Handle nullptr parent " Tom de Vries
2023-10-02 12:50 ` [PATCH 04/13] [gdb/symtab] Add parent_map::dump Tom de Vries
2023-10-10  9:05   ` Alexandra Petlanova Hajkova
2023-10-20 19:51   ` Tom Tromey
2023-10-02 12:50 ` [PATCH 05/13] [gdb/symtab] Factor out m_deferred_entries usage Tom de Vries
2023-10-02 12:50 ` [PATCH 06/13] [gdb/symtab] Add debug_handle_deferred_entries Tom de Vries
2023-10-02 12:50 ` [PATCH 07/13] [gdb/symtab] Resolve deferred entries, inter-shard case Tom de Vries
2023-10-20 20:11   ` Tom Tromey
2023-12-10  8:10   ` Tom de Vries
2023-10-02 12:50 ` [PATCH 08/13] [gdb/testsuite] Add gdb.dwarf2/forward-spec-inter-cu.exp Tom de Vries
2023-10-02 12:50 ` [PATCH 09/13] [gdb/symtab] Keep track of processed DIEs in shard Tom de Vries
2023-10-22 11:00   ` Alexandra Petlanova Hajkova
2023-12-08 12:09   ` Tom de Vries
2023-10-02 12:50 ` [PATCH 10/13] [gdb/symtab] Resolve deferred entries, intra-shard case Tom de Vries
2023-10-02 12:50 ` Tom de Vries [this message]
2023-10-02 12:50 ` [PATCH 12/13] [gdb/testsuite] Add gdb.dwarf2/backward-spec-inter-cu.exp Tom de Vries
2023-10-02 12:50 ` [PATCH 13/13] [gdb/symtab] Add DW_TAG_inlined_subroutine entries in the cooked index for c++ Tom de Vries
2023-10-16 11:40 ` [PING][PATCH 00/13] [gdb/symtab, cc-with-dwz] Fix gdb.cp/breakpoint-locs.exp Tom de Vries

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231002125051.29911-12-tdevries@suse.de \
    --to=tdevries@suse.de \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).