From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id iTy6DZU9tWqpPz0AWB0awg (envelope-from ) for ; Thu, 24 Sep 2026 11:11:17 -0400 Received: by simark.ca (Postfix, from userid 112) id 3664F1E06B; Thu, 24 Sep 2026 11:11:17 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 2CB841E01F for ; Thu, 24 Sep 2026 11:11:16 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B87CF4BC7EF3 for ; Thu, 24 Sep 2026 15:11:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B87CF4BC7EF3 Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id 331A24BB3BAA for ; Thu, 24 Sep 2026 15:10:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 331A24BB3BAA Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=efficios.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=efficios.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 331A24BB3BAA Authentication-Results: sourceware.org; arc=none smtp.remote-ip=158.69.221.121 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1790262653; cv=none; b=WVb7FqdZ/out5I2bDHs40a1u7+jdXpo9SI8lGUybTHXBeUDNC00g1fCMZPVr1ehp9gBFaDssYW4jXqfUAyVlrOPvdtRGYrCSaPDXZaCHIEUm4pr/xBYCep+bCzwoUkopie1Tslu0DRaCkIvthlN8oWOhMnSG4IHd9gOmAwlulBc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1790262653; c=relaxed/simple; bh=WXO+0+A3ErfmBwN8Dfx0RNAXFuCkXCnOpsaX460ib7E=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=CXvwiaj5eb5mBzv8Zo5jdPaYTuW6a1Q7N2HDG/g0c7AOaXXKGVUzvJYKNhNy+hL+CpuhNlLK/T5MSadkJhxXq4zcWjpgLOqYGF9lFDCwWMESG+37xDhKBLdDCwxOfkJZuVUzFHnu5+pI66AHFWvop0HpsqpSOrKw9r/IDayUWmE= ARC-Authentication-Results: i=1; sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 331A24BB3BAA Received: by simark.ca (Postfix) id BE26B1E090; Thu, 24 Sep 2026 11:10:51 -0400 (EDT) From: Simon Marchi To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH v6 3/3] gdb/dwarf: add cooked_index_entry::parent_is_deferred Date: Thu, 24 Sep 2026 11:09:11 -0400 Message-ID: <20260924151048.204777-4-simon.marchi@efficios.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260924151048.204777-1-simon.marchi@efficios.com> References: <20260924050002.1539783-1-simon.marchi@efficios.com> <20260924151048.204777-1-simon.marchi@efficios.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org Add a parent_is_deferred method to cooked_index_entry, mirroring name_is_deferred, and use it instead of checkingthe IS_PARENT_DEFERRED flag directly. Change-Id: Id684b30ec8aa81ac554e5c3edb8f7197c7238469 --- gdb/dwarf2/cooked-index-entry.h | 12 ++++++++---- gdb/dwarf2/cooked-index-shard.c | 10 +++++----- gdb/dwarf2/cooked-index.c | 2 +- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/gdb/dwarf2/cooked-index-entry.h b/gdb/dwarf2/cooked-index-entry.h index 2637b8255258..462ec0640a9b 100644 --- a/gdb/dwarf2/cooked-index-entry.h +++ b/gdb/dwarf2/cooked-index-entry.h @@ -224,17 +224,21 @@ struct cooked_index_entry : public allocate_on_obstack return compare (canonical, other.canonical, SORT) < 0; } + /* Return true if this entry's parent still has to be resolved. */ + bool parent_is_deferred () const + { return (flags & IS_PARENT_DEFERRED) != 0; } + /* Set parent entry to PARENT. */ void set_parent (const cooked_index_entry *parent) { - gdb_assert ((flags & IS_PARENT_DEFERRED) == 0); + gdb_assert (!parent_is_deferred ()); m_parent_entry.resolved = parent; } /* Resolve deferred parent entry to PARENT. */ void resolve_parent (const cooked_index_entry *parent) { - gdb_assert ((flags & IS_PARENT_DEFERRED) != 0); + gdb_assert (parent_is_deferred ()); flags = flags & ~IS_PARENT_DEFERRED; m_parent_entry.resolved = parent; } @@ -242,14 +246,14 @@ struct cooked_index_entry : public allocate_on_obstack /* Return parent entry. */ const cooked_index_entry *get_parent () const { - gdb_assert ((flags & IS_PARENT_DEFERRED) == 0); + gdb_assert (!parent_is_deferred ()); return m_parent_entry.resolved; } /* Return deferred parent entry. */ parent_map::addr_type get_deferred_parent () const { - gdb_assert ((flags & IS_PARENT_DEFERRED) != 0); + gdb_assert (parent_is_deferred ()); return m_parent_entry.deferred; } diff --git a/gdb/dwarf2/cooked-index-shard.c b/gdb/dwarf2/cooked-index-shard.c index af8c3e9527ac..206fe4483a40 100644 --- a/gdb/dwarf2/cooked-index-shard.c +++ b/gdb/dwarf2/cooked-index-shard.c @@ -85,7 +85,7 @@ cooked_index_shard::add (sect_offset die_offset, enum dwarf_tag tag, parent_entry, per_cu); m_entries.push_back (result); - if ((flags & IS_PARENT_DEFERRED) != 0) + if (result->parent_is_deferred ()) m_have_deferred_parents = true; if (result->name_is_deferred ()) @@ -109,8 +109,8 @@ cooked_index_shard::add (sect_offset die_offset, enum dwarf_tag tag, by language_may_use_plain_main as well), but it's handy as a spot to document. */ else if (lang != language_unknown - && (flags & IS_PARENT_DEFERRED) == 0 - && parent_entry.resolved == nullptr + && !result->parent_is_deferred () + && result->get_parent () == nullptr && m_main == nullptr && language_may_use_plain_main (lang) && !result->name_is_deferred () @@ -238,7 +238,7 @@ cooked_index_shard::resolve_deferred_parents gdb_assert (m_have_deferred_parents); for (cooked_index_entry *entry : m_entries) - if ((entry->flags & IS_PARENT_DEFERRED) != 0) + if (entry->parent_is_deferred ()) { const cooked_index_entry *new_parent = parent_maps->find (entry->get_deferred_parent ()); @@ -308,7 +308,7 @@ cooked_index_shard::canonicalize_names () for (cooked_index_entry *entry : m_entries) { /* Deferred parents should not reach this point. */ - gdb_assert ((entry->flags & IS_PARENT_DEFERRED) == 0); + gdb_assert (!entry->parent_is_deferred ()); /* Entries without a name are filtered out during the call to prune_nameless_entries. */ diff --git a/gdb/dwarf2/cooked-index.c b/gdb/dwarf2/cooked-index.c index 96996ebc4603..89a93eff6998 100644 --- a/gdb/dwarf2/cooked-index.c +++ b/gdb/dwarf2/cooked-index.c @@ -391,7 +391,7 @@ cooked_index::dump (gdbarch *arch) gdb_printf (" DIE offset: %s\n", sect_offset_str (entry->die_offset)); gdb_printf (" CU index: %u\n", entry->per_cu->index); - if ((entry->flags & IS_PARENT_DEFERRED) != 0) + if (entry->parent_is_deferred ()) gdb_printf (" parent: deferred (%" PRIx64 ")\n", entry->get_deferred_parent ()); else if (entry->get_parent () != nullptr) -- 2.55.0