From patchwork Sat Oct 14 20:56:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 77782 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 29C723858C27 for ; Sat, 14 Oct 2023 20:58:26 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from omta40.uswest2.a.cloudfilter.net (omta40.uswest2.a.cloudfilter.net [35.89.44.39]) by sourceware.org (Postfix) with ESMTPS id 0464D3858C5F for ; Sat, 14 Oct 2023 20:58:07 +0000 (GMT) ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 0464D3858C5F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=35.89.44.39 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1697317091; cv=none; b=YlhQSFEKHvdz4idf62OZudiDnKx6fKaNh9CV6cBW8PUmdTOltfdjCgnbTVXVAx2N8PEIPWIAm8/cSr6cF0shEuYx1oU0CLmHbOZa2e/m2h5Kow3qCcJv9EmzeWTVbCtTOGgyafA+TuyKbARq4PXDyUhB/Lo5tMcmbw6x+yb4J2g= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1697317091; c=relaxed/simple; bh=77e9dBKev9tcSQ8sAo+4+ONWV0Y3a6hLuAXVrDJx5rU=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=qgHkyISWDdKjb80R2PbvkAxjc+n3EeZLC2bzmvxWxn2oF47YjK75tTjBbLnpXREZvtLT41ObNykOEWeF8QV5+g74KlrywPHnYhS1G96xIpu/1cM+b1L6oXy/wfBLTEiqSLTOAFZByW+rAeJpvMecHR1Qnw2s3uPtocC4myfqzZQ= ARC-Authentication-Results: i=1; server2.sourceware.org DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0464D3858C5F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com Received: from eig-obgw-6002a.ext.cloudfilter.net ([10.0.30.222]) by cmsmtp with ESMTP id rjQLq5HXKQUgRrli1qTlAP; Sat, 14 Oct 2023 20:58:05 +0000 Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTPS id rli0qkKyCasDqrli1qaAOO; Sat, 14 Oct 2023 20:58:05 +0000 X-Authority-Analysis: v=2.4 cv=CtCsz10D c=1 sm=1 tr=0 ts=652b00dd a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=OWjo9vPv0XrRhIrVQ50Ab3nP57M=:19 a=dLZJa+xiwSxG16/P+YVxDGlgEgI=:19 a=bhdUkHdE2iEA:10 a=Qbun_eYptAEA:10 a=XjZJidyDlKjQaBls7d0A:9 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=gFZg8/IjxeFAPl4XH6TOFeVVVwYKiyXExG37VtqVmVs=; b=KsTm3Esv5bCAgXrA5Laeyzr7O0 iImDpCd42+UMMKz+Zz/aJQl0jiGUynO/GPNyMXiKOdE7jiXBqAWydXBIRSBJWybO22urLCs+nPtBp Lu25veYUPVUQvLqNqMmA/2aO2; Received: from 71-211-130-31.hlrn.qwest.net ([71.211.130.31]:56746 helo=localhost.localdomain) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96.1) (envelope-from ) id 1qrli0-002r6O-1W; Sat, 14 Oct 2023 14:58:04 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 1/2] Pre-read .debug_aranges section Date: Sat, 14 Oct 2023 14:56:57 -0600 Message-ID: <20231014205755.996771-2-tom@tromey.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231014205755.996771-1-tom@tromey.com> References: <20231014205755.996771-1-tom@tromey.com> MIME-Version: 1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 71.211.130.31 X-Source-L: No X-Exim-ID: 1qrli0-002r6O-1W X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 71-211-130-31.hlrn.qwest.net (localhost.localdomain) [71.211.130.31]:56746 X-Source-Auth: tom+tromey.com X-Email-Count: 2 X-Org: HG=bhshared;ORG=bluehost; X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-CMAE-Envelope: MS4xfEXodODMdHUGZ5+dWX7MyjJUW7Cj+BUERZ6wVDpkgwiZTIlHF/Dzydp7lZcBwTN2ZF+e7U6heOj/gwwles0ltXEwe1M7HAXT3I7qt9PodudsjkrL8QOK FF5ywd2rxf8F4pm/yAP+ki/l4LjWgYF+2QDULs2dPmktK6iWjimfeLTxly9pX74FIlxtv+TeMgzYOCodmhz3vsRA/HPocxpEtGA= X-Spam-Status: No, score=-3024.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, 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: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org While working on background DWARF reading, I found a race case that I tracked down to the handling of the .debug_aranges section. Currently the section data is only read in after the CUs have all been created. However, there's no real reason to do this -- it seems fine to read it a little earlier, when all the other necessary sections are read in. This patch makes this change, and updates the read_addrmap_from_aranges API to assert that the section is read in. This patch slightly changes the read_addrmap_from_aranges API as well, to reject an empty section. This seems better to me than what the current code does, which is try to read an empty section but then do no work. Regression tested on x86-64 Fedora 38. Reviewed-By: Guinevere Larsen --- gdb/dwarf2/read-debug-names.c | 1 + gdb/dwarf2/read.c | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/gdb/dwarf2/read-debug-names.c b/gdb/dwarf2/read-debug-names.c index 2e5067efb3d..89f5df6df90 100644 --- a/gdb/dwarf2/read-debug-names.c +++ b/gdb/dwarf2/read-debug-names.c @@ -166,6 +166,7 @@ create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile, addrmap_mutable mutable_map; + section->read (per_objfile->objfile); if (read_addrmap_from_aranges (per_objfile, section, &mutable_map)) per_bfd->index_addrmap = new (&per_bfd->obstack) addrmap_fixed (&per_bfd->obstack, diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index d4aec19d31d..13ac83395eb 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -1586,6 +1586,7 @@ dwarf2_per_bfd::map_info_sections (struct objfile *objfile) ranges.read (objfile); rnglists.read (objfile); addr.read (objfile); + debug_aranges.read (objfile); for (auto §ion : types) section.read (objfile); @@ -1843,6 +1844,11 @@ read_addrmap_from_aranges (dwarf2_per_objfile *per_objfile, dwarf2_section_info *section, addrmap *mutable_map) { + /* Caller must ensure this is read in. */ + gdb_assert (section->readin); + if (section->empty ()) + return false; + struct objfile *objfile = per_objfile->objfile; bfd *abfd = objfile->obfd.get (); struct gdbarch *gdbarch = objfile->arch (); @@ -1870,13 +1876,8 @@ read_addrmap_from_aranges (dwarf2_per_objfile *per_objfile, } std::set debug_info_offset_seen; - - section->read (objfile); - const bfd_endian dwarf5_byte_order = gdbarch_byte_order (gdbarch); - const gdb_byte *addr = section->buffer; - while (addr < section->buffer + section->size) { const gdb_byte *const entry_addr = addr;