From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 0DA2C385842D for ; Mon, 11 Oct 2021 19:18:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0DA2C385842D Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 19BJGeiU028913 for ; Mon, 11 Oct 2021 19:18:28 GMT Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by mx0b-00069f02.pphosted.com with ESMTP id 3bmpwn23bv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 11 Oct 2021 19:18:27 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 19BJGLbh158156 for ; Mon, 11 Oct 2021 19:18:26 GMT Received: from nam04-mw2-obe.outbound.protection.outlook.com (mail-mw2nam08lp2168.outbound.protection.outlook.com [104.47.73.168]) by aserp3030.oracle.com with ESMTP id 3bkyxqe1h6-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 11 Oct 2021 19:18:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cEDyDBHN82DLlS9goAXTqrVNhw7zptwDHIkR6i3UhfIPzFTKHlTZh0eZKpJ1trZqbhmioz/SOk2JdQc6YWSN+GA67MXwtAxkE+UeJlFaPvI0a8EtrUY3S9WFEuOicysJjWpGkDew9p0Wlic32gXyaQtwidptD7Wp6QaIPtExbEUZGuZiqDOYDfWfgM4oc1adkb7HU71MajaicndmrjIPHpbE2hEGwt1eMbsKeaJdrBPo6iKcYCM9rv8NFuq2trFiwj0BdJgLQ0Zvsne8AZlVTwJmObksUs246UYCn06NJ6oKAZMclD4KA29C56kkFlBQ2buJa5/uNvPOT8X+3gpiRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=U4H+kRvARJr/mdql5nqqmQ0lizhkrpwvPUTjv61MAWU=; b=ATALIvxti5teBuJB9vKqBxYhYCOvcFqRxtH7/V6QKT1JlIsPFdpIysjQc/MZaQBHcjdyzT8MymQepMIFcEZKAdqNoDdR6e9qmhBJtoCDa6t5GOaxp9bFIYlPBci5uyHufPZrwoZ60fh8JqsLWJibe8VL2HWoJgmf9JJnE/K5zI/gX4+GGL8RObubohfgZ8QzOXGXTPiTm1gC29JgTN2fQLNWwrEK5tXAyypR7Y8+vzwm/UyCIygNTcXqBJf4W5vhEd6tCf/ptnTdKq+lb9xy0VbyMOSwYIdcA5vjVagutPZ9tE4gopSsmeuU35czMivvaom0fYTd5YPHz9V+VEcAdw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from SA2PR10MB4715.namprd10.prod.outlook.com (2603:10b6:806:fb::10) by SN6PR10MB2926.namprd10.prod.outlook.com (2603:10b6:805:d3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4587.20; Mon, 11 Oct 2021 19:18:25 +0000 Received: from SA2PR10MB4715.namprd10.prod.outlook.com ([fe80::6030:34a7:cec0:a5ce]) by SA2PR10MB4715.namprd10.prod.outlook.com ([fe80::6030:34a7:cec0:a5ce%4]) with mapi id 15.20.4587.026; Mon, 11 Oct 2021 19:18:25 +0000 From: Nick Alcock To: binutils@sourceware.org Subject: [PATCH 4/4] libctf, ld: handle nonrepresentable types better Date: Mon, 11 Oct 2021 20:18:10 +0100 Message-Id: <20211011191810.274535-4-nick.alcock@oracle.com> X-Mailer: git-send-email 2.33.0.256.gb827f06fa9 In-Reply-To: <20211011191810.274535-1-nick.alcock@oracle.com> References: <20211011191810.274535-1-nick.alcock@oracle.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: LO2P265CA0128.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:9f::20) To SA2PR10MB4715.namprd10.prod.outlook.com (2603:10b6:806:fb::10) MIME-Version: 1.0 Received: from loom.srvr.nix (2001:8b0:1101:10::2) by LO2P265CA0128.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:9f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4587.25 via Frontend Transport; Mon, 11 Oct 2021 19:18:25 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4e1dd2c7-6105-4174-c678-08d98cebe61c X-MS-TrafficTypeDiagnostic: SN6PR10MB2926: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1002; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1jvq4AJzZPSWpN43OpHJCgMnG2RTCq3qzPJXP3Y+/VPAcxdrS1hO2cl1mXvAqPexDwN3AifFozq4uyZn8y4jkeg6GgbfbYs7yC6EEUBa/2cHqw5nNWJW5ZGIS0VFdtoHN2LnL/ycWusj672BmrPD6YHjxLUvbb6sumS/hdC76KqKTkds4fpTHIqROs06csSX682a6DDew1NZ80Tpy9g3JR+XbfpzEuOkA/WyVw8eeMXCHedji5+UBctHpl9EoNEAzUnYmc+r4nioU5TNXlXznnhZN+vbClveAWwhG8ilMeJtprFuMUPy8mwLbrg0qlnpe1UJ4ARj1G6iGt3DX1ffbzk+tx2KzhqCvR+X0f6lfnrfB0ckHJrWBQALLSeiEyHMLblg5nZGeWuTXJBTKB1KDOaDV8jFPVpsh6oPsfCp+5t4UFZSEaBcA/wej8KFyLjjyEtrwDMAt8qnjENWtfGFg5E6twUZKyd5E0JiAZax8U0yugaHXPTeAE4zTQPelJx9Qju7anPo6bVR5LWt3z9U86Vl6aVImMuRmypDB8+FIcBlQ3ObcOIjrqlMDPYDeu79Kml4defBX2liLMm8hAlEbdVgft51IsR/Cb4OD2ByX+TeIMrHXM2GBEI5Xd2lQWnORkd2+w6Qg3KJZQNNh16K3Q== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA2PR10MB4715.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(86362001)(5660300002)(186003)(508600001)(52116002)(6916009)(44832011)(66946007)(6506007)(2906002)(66476007)(66556008)(8936002)(316002)(6486002)(1076003)(6512007)(36756003)(83380400001)(2616005)(38100700002)(6666004)(8676002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?0pzin4e7wncnJFqhmCB+kJa7TZC5mm2rJ/M4gzbb4S6v5zqha0c91l6rVHvI?= =?us-ascii?Q?velj7kHqJiEkuAO8j7CknXBuejIZGra7Jhf7SWMPOr/A4x8SmiTNZZxVrQzs?= =?us-ascii?Q?L+xEfTuahE9ly+TGLdubxlCueVKj+tMX+VxcmeEa/odWJrOL86GGSFTFgRDl?= =?us-ascii?Q?uhgQRabhv8NeDEdMVLefKSsPxVCO6du1OJDH/rT85Pz31alg9UAedS1KaXtF?= =?us-ascii?Q?EXpzo12G9A/ZEXjSnoBdgdKLr/xpgu9HTkuzhGwwq7/En4dc3jBx/Hf8WKDv?= =?us-ascii?Q?TGykAq7AMsWD0Rq8iV12JUHYfA+La1dyRjACuCAghz+8BeDifyFw6HXeOm8I?= =?us-ascii?Q?gO5n+YN6Rpr1NLVyEC8K71QkwShg3EWiVMY5Oc5rprU/NrydzUja4v3gfqH9?= =?us-ascii?Q?UuJTEFwHFE83/sHCVu/bkDlfo5Wy/BOan5wvXkpPQA2mPhSUrr82hm1zlv9n?= =?us-ascii?Q?Mb3891F8Cfm0GAFRdKl3DdRHji78P6yEDwohDOVP4utri+6WVXUuyvqQAUVk?= =?us-ascii?Q?h8MrqKGuka/AQCy6HTHqPHGVYx4viShNhjZypTjzad9IInbbK5xfQItgMFC1?= =?us-ascii?Q?cdg/h0d+n9mmsLJAqnYb3wi+fiu7WvIprGIY2Nk+GcvmH5DnDpgBjZHl2Abt?= =?us-ascii?Q?KdlOKqAD1UbQ8mE0f6dIpO6zy5z5RaiqfqviafEP1e6epCzCnMJTVQpdtL1X?= =?us-ascii?Q?9HpD/kz1AyB73Uem4IHnmAm3H69AcPWV+omxErRc7CQmd0LsAGwgPEqax+T7?= =?us-ascii?Q?gjlRRsIo5HWKNGoVK+ERJkKKyGxGudLFWyprAKdY217VV+Bz9rCbHWbHcBBe?= =?us-ascii?Q?XLVrNgaur//dcdAZf1lE9KG1csQLOTZu6GuyRwHDPjj9T+id+PVWpvGYthdm?= =?us-ascii?Q?30lzv4V4GIR6lGgN6rksSRDMlRhmWmonzjf5xPt5T4VozRDLX2uXuhRz6A4p?= =?us-ascii?Q?yjz/b/HjepRQ3RBX0HIhwEnluLQFL4ViDbtHpt35C+UagDSlYFJDpIqEdJBP?= =?us-ascii?Q?U5GcOkUctCftFMY8AUxAvGC0Dk+M0SHaQs4IGPzKJlUv5CZx4PkO01+6r4L4?= =?us-ascii?Q?CSS9GPu7BuZe7By6UhtwNGhpTE6GMTZ7bumNW7UOwlU5qk8cNCo0BlrRkEAP?= =?us-ascii?Q?RVlC3yXamw6bDX1mmxv6XsUfc9JBbCP0SpUsOGy6yz/Oq38c1NlMmxjINU+G?= =?us-ascii?Q?0DOdP5ptL0GW+YOHW6AEd8tyhXJJ9qEZf7h9KPXJZM0ZNFmx2CP/8HQhtx0g?= =?us-ascii?Q?iDI/OkXZg3JvIxflvzHhNIPU2Gixw7WCNa7Xr0XwOB7j3C8yhmh7tVExvoJ1?= =?us-ascii?Q?DiglYD6bLGqPSTi696PV7ikjcKp3w5DEsF1vcJZaMJu+GA=3D=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4e1dd2c7-6105-4174-c678-08d98cebe61c X-MS-Exchange-CrossTenant-AuthSource: SA2PR10MB4715.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Oct 2021 19:18:25.6490 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5cBmGVeEDzUKwxna/rOZiKxUmjKDUc/qHwhNZlmx8FgSUGUQQQycGnhmDHwpjyQZLfj3qSvhu5uPgGPJcITgLA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR10MB2926 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10134 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 phishscore=0 suspectscore=0 mlxlogscore=999 mlxscore=0 bulkscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2109230001 definitions=main-2110110111 X-Proofpoint-GUID: npfadxiGIvlMTuy8IIiAjHKygDin6Usu X-Proofpoint-ORIG-GUID: npfadxiGIvlMTuy8IIiAjHKygDin6Usu 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, MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Oct 2021 19:18:30 -0000 ctf_type_visit (used, among other things, by the type dumping code) was aborting when it saw a nonrepresentable type anywhere: even a single structure member with a nonrepresentable type caused an abort with ECTF_NONREPRESENTABLE. This is not useful behaviour, given that the abort comes from a type-resolution we are only doing in order to determine whether the type is a structure or union. We know nonrepresentable types can't be either, so handle that case and pass the nonrepresentable type down. (The added test verifies that the dumper now handles this case and prints nonrepresentable structure members as it already does nonrepresentable top-level types, rather than skipping the whole structure -- or, without the previous commit, skipping the whole types section.) ld/ChangeLog 2021-10-08 Nick Alcock * testsuite/ld-ctf/nonrepresentable-member.*: New test. libctf/ChangeLog 2021-10-08 Nick Alcock * ctf-types.c (ctf_type_rvisit): Handle nonrepresentable types. --- ld/testsuite/ld-ctf/nonrepresentable-member.c | 7 ++++++ ld/testsuite/ld-ctf/nonrepresentable-member.d | 25 +++++++++++++++++++ libctf/ctf-types.c | 19 +++++++++----- 3 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 ld/testsuite/ld-ctf/nonrepresentable-member.c create mode 100644 ld/testsuite/ld-ctf/nonrepresentable-member.d diff --git a/ld/testsuite/ld-ctf/nonrepresentable-member.c b/ld/testsuite/ld-ctf/nonrepresentable-member.c new file mode 100644 index 00000000000..b3657af01e1 --- /dev/null +++ b/ld/testsuite/ld-ctf/nonrepresentable-member.c @@ -0,0 +1,7 @@ +struct blah +{ + int boring; + int __attribute__((vector_size(8))) foo; + const int __attribute__((vector_size(8))) bar; + int this_is_printed; +} wibble __attribute__((__used__)); diff --git a/ld/testsuite/ld-ctf/nonrepresentable-member.d b/ld/testsuite/ld-ctf/nonrepresentable-member.d new file mode 100644 index 00000000000..6c76253a8c1 --- /dev/null +++ b/ld/testsuite/ld-ctf/nonrepresentable-member.d @@ -0,0 +1,25 @@ +#as: +#source: nonrepresentable-member.c +#objdump: --ctf +#ld: -shared +#name: Nonrepresentable members + +.*: +file format .* + +Contents of CTF section .ctf: + + Header: + Magic number: 0xdff2 + Version: 4 \(CTF_VERSION_3\) +#... + Types: +#... + 0x[0-9a-f]*: \(kind 6\) struct blah .* + *\[0x0\] boring: ID 0x[0-9a-f]*: \(kind 1\) int .* + *\[0x[0-9a-f]*\] foo: .* \(.*represent.*\) + *\[0x[0-9a-f]*\] bar: .* \(.*represent.*\) + *\[0x[0-9a-f]*\] this_is_printed: ID 0x[0-9a-f]*: \(kind 1\) int .* +#... + + Strings: +#... diff --git a/libctf/ctf-types.c b/libctf/ctf-types.c index 243de9348d3..55834856da9 100644 --- a/libctf/ctf-types.c +++ b/libctf/ctf-types.c @@ -1641,20 +1641,27 @@ ctf_type_rvisit (ctf_dict_t *fp, ctf_id_t type, ctf_visit_f *func, unsigned char *vlen; ssize_t size, increment, vbytes; uint32_t kind, n, i = 0; + int nonrepresentable = 0; int rc; - if ((type = ctf_type_resolve (fp, type)) == CTF_ERR) - return -1; /* errno is set for us. */ + if ((type = ctf_type_resolve (fp, type)) == CTF_ERR) { + if (ctf_errno (fp) != ECTF_NONREPRESENTABLE) + return -1; /* errno is set for us. */ + else + nonrepresentable = 1; + } - if ((tp = ctf_lookup_by_id (&fp, type)) == NULL) - return -1; /* errno is set for us. */ + if (!nonrepresentable) + if ((tp = ctf_lookup_by_id (&fp, type)) == NULL) + return -1; /* errno is set for us. */ if ((rc = func (name, otype, offset, depth, arg)) != 0) return rc; - kind = LCTF_INFO_KIND (fp, tp->ctt_info); + if (!nonrepresentable) + kind = LCTF_INFO_KIND (fp, tp->ctt_info); - if (kind != CTF_K_STRUCT && kind != CTF_K_UNION) + if (nonrepresentable || (kind != CTF_K_STRUCT && kind != CTF_K_UNION)) return 0; ctf_get_ctt_size (fp, tp, &size, &increment); -- 2.33.0.256.gb827f06fa9