From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from qproxy5-pub.mail.unifiedlayer.com (qproxy5-pub.mail.unifiedlayer.com [69.89.21.30]) by sourceware.org (Postfix) with ESMTPS id B83B83858D28 for ; Thu, 5 Jan 2023 19:47:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B83B83858D28 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 outbound-ss-761.bluehost.com (outbound-ss-761.bluehost.com [74.220.211.250]) by qproxy5.mail.unifiedlayer.com (Postfix) with ESMTP id 01DA98022B26 for ; Thu, 5 Jan 2023 19:47:34 +0000 (UTC) Received: from cmgw15.mail.unifiedlayer.com (unknown [10.0.90.130]) by progateway8.mail.pro1.eigbox.com (Postfix) with ESMTP id E1FF610045227 for ; Thu, 5 Jan 2023 19:46:33 +0000 (UTC) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTP id DWC9p0uvrSnieDWC9pKUPL; Thu, 05 Jan 2023 19:46:33 +0000 X-Authority-Reason: nr=8 X-Authority-Analysis: v=2.4 cv=IJ3HtijG c=1 sm=1 tr=0 ts=63b72919 a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=dLZJa+xiwSxG16/P+YVxDGlgEgI=:19 a=RvmDmJFTN0MA:10:nop_rcvd_month_year a=Qbun_eYptAEA:10:endurance_base64_authed_username_1 a=CCpqsmhAAAAA:8 a=6N2j9eAuGfN41M9ANjoA:9 a=ul9cdbp4aOFLsgKbc677:22 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date:References :Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: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=WyYz7aZS9t5y3sTkho9uGeMenJzUbCxo5H9mb7YQ58s=; b=bNt90cZqWLhvBv0QsuE8EVYHVm v/q7v5iBL/uzUnsio8vrEPCGL5YH+TosQvvTfCaeKcOXb1V7JBHtrhVaXxhLBcBjDRlzjlnO4UAP5 czMZuRjqFk5VSiv+4nUwEdjgv; Received: from 97-122-76-186.hlrn.qwest.net ([97.122.76.186]:52430 helo=murgatroyd) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1pDWC9-003iAT-G5; Thu, 05 Jan 2023 12:46:33 -0700 From: Tom Tromey To: Nils-Christian Kempke via Gdb-patches Cc: Nils-Christian Kempke , simark@simark.ca Subject: Re: [PATCH v2 3/4] gdb, typeprint: workaround icc/icpc/ifort pointer/reference DWARF References: <20221005204039.575255-1-nils-christian.kempke@intel.com> <20221005204039.575255-4-nils-christian.kempke@intel.com> X-Attribution: Tom Date: Thu, 05 Jan 2023 12:46:30 -0700 In-Reply-To: <20221005204039.575255-4-nils-christian.kempke@intel.com> (Nils-Christian Kempke via Gdb-patches's message of "Wed, 5 Oct 2022 22:40:38 +0200") Message-ID: <87fscoepd5.fsf@tromey.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain 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: 97.122.76.186 X-Source-L: No X-Exim-ID: 1pDWC9-003iAT-G5 X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 97-122-76-186.hlrn.qwest.net (murgatroyd) [97.122.76.186]:52430 X-Source-Auth: tom+tromey.com X-Email-Count: 5 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-Spam-Status: No, score=-3022.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,JMQ_SPF_NEUTRAL,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: >>>>> Nils-Christian Kempke via Gdb-patches writes: > Intel classic compilers (icc/icpc/ifort) for references/pointers > to arrays generate DWARF that looks like Thank you for the patch. > + if (!top_level && icc_pointer_or_reference_type (type)) > + { > + /* Icc/ifort emit the DW_AT_associated for pointers and references. To > + not mark such types as dynamic further down, which would lead to > + infinite resolution loops for, e.g., cyclic dynamic pointers, we > + return here already. */ > + return 0; I suspect this is not the best spot to do this kind of check. > +bool > +icc_pointer_or_reference_type (const struct type *type) > +{ > + return (type->code () == TYPE_CODE_PTR || type->code () == TYPE_CODE_REF) > + && type->is_objfile_owned () > + && std::any_of (type->objfile_owner ()->compunits ().begin (), > + type->objfile_owner ()->compunits ().end (), > + [] (const compunit_symtab *cu) > + { > + return producer_is_icc (cu->producer (), nullptr, > + nullptr); > + }); And I really don't like this, because it's over-broad. If an objfile has objects from two different compilers, this code will erroneously trigger. Instead, it seems to me that a better approach would be to recognize the oddities in the DWARF reader, and then perhaps either introduce new types or mark the type somehow for later processing. If you search for "quirk" it the reader, you'll see other examples of this technique. E.g., the Rust compiler used to emit a custom format for Rust enums, and the code in the DWARF reader converts these types into the internal representation used in the rest of gdb. I'm not sure if this can completely be done in your case or not, but I think it would be better to try. If it fails, adding a new flag to the type would be better than searching all the objfile's compunits. Tom