From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2a07:de40:b251:101:10:150:64:2]) by sourceware.org (Postfix) with ESMTPS id 22A553858294 for ; Tue, 12 Dec 2023 17:32:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 22A553858294 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 22A553858294 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:2 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702402346; cv=none; b=XJacTOeZxzfoM1UfvR+0LsiPd3kCzRva15bFYzvXQ+4wwEkQXpDKDus8v6gg3mNJojq6TcVD2MTfcCUW7bF+F7hZnBX/SFLCn2+VCjKxWuFrOAl7PPiqCcHesvwvVMgroVVQt05BvuIwUpk/aDnH41mUDPZm1c+HN1uSURVIyt0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702402346; c=relaxed/simple; bh=ACf6UQXV2F+XKSbHYLFdFgSDxcGNaNMdbyr5fPBZb1A=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-Id:MIME-Version; b=BnhgMxXD0HpoFuGLmV4B8G7A9Yv1jSp/zdp+IZJTLfGPy0vGFGxy89ugRZ6x3xlFvZMRdHrpVH1UZhR08cZs9b93LZgQRUFYDwILCuLP652+n2y3R7u+5/7q6xOdl0BFwkPk3WL8q+/3+a7CSvQJb4AQlHjFFCN1YhQ47DSZw+Q= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id BEB181FD03 for ; Tue, 12 Dec 2023 17:32:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702402342; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=U+y0txQ5nX7/OEkJ6O9VjnXtaQvEQ2hk++Eefvp5liM=; b=yB4owdIVHzYg+QyZ9d8Rn96bdJ7lH9Vq6NehRKDUO+sB0+oZ5SOyETiY5H1xTexW6mCFx6 oOCn29aRYtRbSUq/0nTmoNqhFREPoHdCL6zx8Kr9keqf1K3IEoFyRsfnm/rqGikGXQV8y+ CRykUJk9g1zmYHrZX2+33x3om9EgJ4k= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702402342; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=U+y0txQ5nX7/OEkJ6O9VjnXtaQvEQ2hk++Eefvp5liM=; b=JnS/BSHyxY22Drd6V8QqWTM/+YZCO+KbD3L5PWMSZBPb1ZyCfeuafkTHEfOOqpAK6UJO3C ic6dsDSrI9l6UPDA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1702402342; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=U+y0txQ5nX7/OEkJ6O9VjnXtaQvEQ2hk++Eefvp5liM=; b=yB4owdIVHzYg+QyZ9d8Rn96bdJ7lH9Vq6NehRKDUO+sB0+oZ5SOyETiY5H1xTexW6mCFx6 oOCn29aRYtRbSUq/0nTmoNqhFREPoHdCL6zx8Kr9keqf1K3IEoFyRsfnm/rqGikGXQV8y+ CRykUJk9g1zmYHrZX2+33x3om9EgJ4k= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1702402342; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=U+y0txQ5nX7/OEkJ6O9VjnXtaQvEQ2hk++Eefvp5liM=; b=JnS/BSHyxY22Drd6V8QqWTM/+YZCO+KbD3L5PWMSZBPb1ZyCfeuafkTHEfOOqpAK6UJO3C ic6dsDSrI9l6UPDA== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id AA6E613A9D for ; Tue, 12 Dec 2023 17:32:22 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id 2FVeKCaZeGVaPQAAD6G6ig (envelope-from ) for ; Tue, 12 Dec 2023 17:32:22 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH v2 09/13] [gdb/symtab] Resolve deferred entries, intra-shard case Date: Tue, 12 Dec 2023 18:32:35 +0100 Message-Id: <20231212173239.16793-10-tdevries@suse.de> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20231212173239.16793-1-tdevries@suse.de> References: <20231212173239.16793-1-tdevries@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Level: *** X-Spam-Score: 3.70 X-Spam-Level: X-Spam-Flag: NO Authentication-Results: smtp-out2.suse.de; none X-Spamd-Result: default: False [0.90 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_HAS_DN(0.00)[]; R_MISSING_CHARSET(2.50)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; BROKEN_CONTENT_TYPE(1.50)[]; RCPT_COUNT_ONE(0.00)[1]; NEURAL_HAM_LONG(-1.00)[-1.000]; RCVD_COUNT_THREE(0.00)[3]; TO_DN_NONE(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; MID_CONTAINS_FROM(1.00)[]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-3.00)[100.00%] X-Spam-Score: 0.90 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: In patch "[gdb/symtab] Resolve deferred entries, inter-shard case" we've solved the generic case of handling deferred entries. Now add an optimization that handles deferred entries with an intra-shard dependency in the parallel for. Tested on x86_64-linux. --- gdb/dwarf2/cooked-index.c | 35 +++++++++++++++++++++++++++++++++++ gdb/dwarf2/cooked-index.h | 7 +++++++ gdb/dwarf2/read.c | 10 ++++++++++ 3 files changed, 52 insertions(+) diff --git a/gdb/dwarf2/cooked-index.c b/gdb/dwarf2/cooked-index.c index 1368636d4b3..04c69de78d9 100644 --- a/gdb/dwarf2/cooked-index.c +++ b/gdb/dwarf2/cooked-index.c @@ -456,6 +456,7 @@ cooked_index_shard::wait (bool allow_quit) const cooked_index::cooked_index (vec_type &&vec) : m_vector (std::move (vec)) { + /* Handle deferred entries, inter-cu case. */ handle_deferred_entries (); for (auto &idx : m_vector) @@ -658,6 +659,40 @@ cooked_index::maybe_write_index (dwarf2_per_bfd *per_bfd, /* See cooked-index.h. */ +const cooked_index_entry * +cooked_index_shard::find_parent_deferred_entry + (const cooked_index_shard::deferred_entry &entry) const +{ + return find_parent (entry.spec_offset); +} + +/* See cooked-index.h. */ + +void +cooked_index_shard::handle_deferred_entries () +{ + for (auto it = m_deferred_entries->begin (); it != m_deferred_entries->end (); ) + { + const deferred_entry & deferred_entry = *it; + if (!parent_valid (deferred_entry.spec_offset)) + { + it++; + continue; + } + const cooked_index_entry *parent_entry + = find_parent_deferred_entry (deferred_entry); + if (parent_entry == &parent_map::deferred) + { + it++; + continue; + } + resolve_deferred_entry (deferred_entry, parent_entry); + it = m_deferred_entries->erase (it); + } +} + +/* See cooked-index.h. */ + const cooked_index_entry * cooked_index_shard::resolve_deferred_entry (const deferred_entry &de, const cooked_index_entry *parent_entry) diff --git a/gdb/dwarf2/cooked-index.h b/gdb/dwarf2/cooked-index.h index 9b233e0f344..a2b6492d924 100644 --- a/gdb/dwarf2/cooked-index.h +++ b/gdb/dwarf2/cooked-index.h @@ -408,6 +408,13 @@ class cooked_index_shard const cooked_index_entry *resolve_deferred_entry (const deferred_entry &entry, const cooked_index_entry *parent_entry); + /* Find the parent entry for deferred_entry ENTRY. */ + const cooked_index_entry *find_parent_deferred_entry + (const cooked_index_shard::deferred_entry &entry) const; + + /* Create cooked_index_entries for the deferred entries. */ + void handle_deferred_entries (); + /* Mark parents in range [START, END] as valid . */ void set_parent_valid (CORE_ADDR start, CORE_ADDR end) { diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index e8d5f0a1a9c..3d52e908152 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -4516,6 +4516,12 @@ class cooked_index_storage m_index->defer_entry (de); } + /* Handle deferred entries, intra-cu case. */ + void handle_deferred_entries () + { + m_index->handle_deferred_entries (); + } + /* Mark parents in range [START, END] as valid . */ void set_parent_valid (CORE_ADDR start, CORE_ADDR end) { @@ -5002,6 +5008,10 @@ dwarf2_build_psymtabs_hard (dwarf2_per_objfile *per_objfile) errors.push_back (std::move (except)); } } + + /* Handle deferred entries, intra-cu case. */ + thread_storage.handle_deferred_entries (); + return result_type (thread_storage.release (), std::move (errors)); }, task_size); -- 2.35.3