From patchwork Mon Oct 2 12:50:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 76949 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 097C53861934 for ; Mon, 2 Oct 2023 12:52:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 097C53861934 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1696251127; bh=n5R8foVQEClM4uPL0nTV0pNE4ayDMjCojKA2G2eFM7U=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=icGGmyLRtG3gnl7t8ubLOJTaHFVFXic2KPj16mXq2B1tzVDckrc+xcaMEpeZvhIIT lcbq4CHlOQYSCXlH7X6QhXH/+Iun7yzawkThVNM2vJv9XhhRvmuNpqaCP/Pzig4Egj 62B/JaaW3MlcY7vA1u/W+LdHmtVCGDiTFRu7++zM= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2001:67c:2178:6::1d]) by sourceware.org (Postfix) with ESMTPS id 34AE23856DF8 for ; Mon, 2 Oct 2023 12:50:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 34AE23856DF8 Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id C58C81F749 for ; Mon, 2 Oct 2023 12:50:46 +0000 (UTC) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id B43A7139C2 for ; Mon, 2 Oct 2023 12:50:46 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id +OEYK6a8GmVZMgAAMHmgww (envelope-from ) for ; Mon, 02 Oct 2023 12:50:46 +0000 To: gdb-patches@sourceware.org Subject: [PATCH 04/13] [gdb/symtab] Add parent_map::dump Date: Mon, 2 Oct 2023 14:50:42 +0200 Message-Id: <20231002125051.29911-5-tdevries@suse.de> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20231002125051.29911-1-tdevries@suse.de> References: <20231002125051.29911-1-tdevries@suse.de> MIME-Version: 1.0 X-Spam-Status: No, score=-11.9 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 autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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: , X-Patchwork-Original-From: Tom de Vries via Gdb-patches From: Tom de Vries Reply-To: Tom de Vries Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" When dumping m_die_range_map using: ... addrmap_dump (&m_die_range_map, gdb_stdlog, nullptr); ... I get: ... 0x00000000000000d4 0x355e600 0x00000000000000de 0x355e630 0x00000000000000f5 0x355e600 0x0000000000000101 0x0 0x00000000000001c2 0x355e7b0 0x00000000000001cc 0x355e7e0 0x00000000000001e3 0x355e7b0 0x00000000000001ef 0x0 ... which doesn't make it clear which cooked_die_entries the values refer to. Add a function parent_map::dump that passes an annotation function to addrmap_dump such that we have instead: ... 0x00000000000000d4 0x360d300 (0xd3) 0x00000000000000de 0x360d330 (0xdd) 0x00000000000000f5 0x360d300 (0xd3) 0x0000000000000101 0x0 0x00000000000001c2 0x360d4b0 (0x1c1) 0x00000000000001cc 0x360d4e0 (0x1cb) 0x00000000000001e3 0x360d4b0 (0x1c1) 0x00000000000001ef 0x0 ... Tested on x86_64-linux. --- gdb/addrmap.c | 19 +++++++++++++------ gdb/addrmap.h | 7 +++++-- gdb/dwarf2/cooked-index.h | 18 ++++++++++++++++++ 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/gdb/addrmap.c b/gdb/addrmap.c index d16775d49d4..4c58427903b 100644 --- a/gdb/addrmap.c +++ b/gdb/addrmap.c @@ -361,7 +361,9 @@ addrmap_mutable::~addrmap_mutable () /* See addrmap.h. */ void -addrmap_dump (struct addrmap *map, struct ui_file *outfile, void *payload) +addrmap_dump (struct addrmap *map, struct ui_file *outfile, void *payload, + void (*annotate_value)(struct ui_file *outfile, + const void *value)) { /* True if the previously printed addrmap entry was for PAYLOAD. If so, we want to print the next one as well (since the next @@ -380,11 +382,16 @@ addrmap_dump (struct addrmap *map, struct ui_file *outfile, void *payload) addr_str = ""; if (matches || previous_matched) - gdb_printf (outfile, " %s%s %s\n", - payload != nullptr ? " " : "", - core_addr_to_string (start_addr), - addr_str); - + { + gdb_printf (outfile, " %s%s %s", + payload != nullptr ? " " : "", + core_addr_to_string (start_addr), + addr_str); + /* Annotate value. */ + if (annotate_value != nullptr) + annotate_value (outfile, obj); + gdb_printf (outfile, "\n"); + } previous_matched = matches; return 0; diff --git a/gdb/addrmap.h b/gdb/addrmap.h index e00dda6e711..f67cd32df1d 100644 --- a/gdb/addrmap.h +++ b/gdb/addrmap.h @@ -205,8 +205,11 @@ struct addrmap_mutable : public addrmap /* Dump the addrmap to OUTFILE. If PAYLOAD is non-NULL, only dump any components that map to PAYLOAD. (If PAYLOAD is NULL, the entire - map is dumped.) */ + map is dumped.) If ANNOTATE_VALUE is non-nullptr, call it for each + value. */ void addrmap_dump (struct addrmap *map, struct ui_file *outfile, - void *payload); + void *payload, + void (*annotate_value)(struct ui_file *outfile, + const void *value) = nullptr); #endif /* ADDRMAP_H */ diff --git a/gdb/dwarf2/cooked-index.h b/gdb/dwarf2/cooked-index.h index b51128d1f58..396c25b0718 100644 --- a/gdb/dwarf2/cooked-index.h +++ b/gdb/dwarf2/cooked-index.h @@ -266,6 +266,24 @@ class parent_map gdb_assert (m_parent_map.find (end) == parent_entry); } + /* Dump the parent map. */ + void dump () + { + auto annotate_cooked_index_entry + = [] (struct ui_file *outfile, const void *value) + { + const cooked_index_entry *parent_entry + = (const cooked_index_entry *)value; + if (parent_entry == nullptr) + return; + gdb_printf (outfile, " (0x%" PRIx64 ")", + to_underlying (parent_entry->die_offset)); + }; + + addrmap_dump (&m_parent_map, gdb_stdlog, nullptr, + annotate_cooked_index_entry); + } + private: /* An addrmap that maps from section offsets to cooked_index_entry *. */ addrmap_mutable m_parent_map;