From patchwork Sun Dec 12 04:14:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Guillermo E. Martinez" X-Patchwork-Id: 48840 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 AC2843857C7E for ; Sun, 12 Dec 2021 04:15:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AC2843857C7E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639282514; bh=RzTbCyoReeh6K2n7MLMpjYtKiUacyssIwRcvBAsRJC4=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Help: List-Subscribe:From:Reply-To:From; b=vDumeFh7LyvGL0CRrSYuN/s3xw1g/apXDDTBdDeq+qVdyC99dHDI8IGKYl78b/eLB vqzYoCdbwGFHB3Ybox2wiW0XgUCK19ZXU4IgN2VE/VCn97eXPKMGmghCRdyYMRSRU1 jNEbWZCknIF5zHbPRbrifupznH8aucev4TkgixGM= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 4D0483858D39 for ; Sun, 12 Dec 2021 04:15:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4D0483858D39 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BC0MhJY019298 for ; Sun, 12 Dec 2021 04:15:08 GMT Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by mx0b-00069f02.pphosted.com with ESMTP id 3cvjdch7wc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Sun, 12 Dec 2021 04:15:08 +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 1BC4Bi3d120989 for ; Sun, 12 Dec 2021 04:15:07 GMT Received: from nam04-bn8-obe.outbound.protection.outlook.com (mail-bn8nam08lp2044.outbound.protection.outlook.com [104.47.74.44]) by aserp3030.oracle.com with ESMTP id 3cvj1ax0xq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Sun, 12 Dec 2021 04:15:07 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kkHW45Usa57m4wcWdRDv4gPO5kWG/+QiOv1yIbTZFQynbSaCAdePen8Ra62O+1EOdRQFJU8cn4UU79827++a8JB7WsN95Xjbtxu4U3NONr0/GxFBWN9/0KIABHXjsVjwX7gSow3+gQw/8v3HY930YH7LG2WkrCBhM4pRWOZdMspGwQvFYFZKbWuFzf/ItVJ2Mx+DUxNGldwHIZEIdM2PzHIerXBpV/EGFjJTWKOWu9NPT8oHZ9VRfl9S4P8/KZOUFbS3KXhupKs5RqJMY/YXN1iA3PIX4roWsCs5xke876okmgY1tzsoOmh6glnYZ1i8UjmAaQNMiCIJOhE7p8tDhw== 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=RzTbCyoReeh6K2n7MLMpjYtKiUacyssIwRcvBAsRJC4=; b=ijT5wOPnR8LNNfZgBz5hi27dahaTPOx+2HWzjEGdb4mr/KBhyIr16Kd/KISSr+540kdzj2QjZ3tjb36G/au/IpedQTQli0+i+AXNuv0eCj9tLSn/+kexLYrZUDdSStlqp/gnBmgwrcQXH0YI9SUqqKAdo6JZcbdimcAZko6zxkP3Oo8JKLXgULHWHl8ry8zRbQv+i4VCDM/lyQnhbgAVOPB8jaOKtFk0P9i3ZkickdcCjmyN2qFjZ8uQgOwBI6BYM6bXNIMAvDSiLReU6RoMUiHjaNrpZDR3FCJpn0RoKG0nJEptJZ18B7b6y20CR9EUFXy0cL3w8VIi9rGj1doe4Q== 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 BL0PR10MB2852.namprd10.prod.outlook.com (2603:10b6:208:76::22) by BLAPR10MB5025.namprd10.prod.outlook.com (2603:10b6:208:30d::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4778.12; Sun, 12 Dec 2021 04:15:05 +0000 Received: from BL0PR10MB2852.namprd10.prod.outlook.com ([fe80::6927:5e6b:31ff:14bd]) by BL0PR10MB2852.namprd10.prod.outlook.com ([fe80::6927:5e6b:31ff:14bd%3]) with mapi id 15.20.4755.028; Sun, 12 Dec 2021 04:15:05 +0000 To: libabigail@sourceware.org Subject: [PATCH] ctf-reader: Add support to undefined forward declaration types Date: Sat, 11 Dec 2021 22:14:52 -0600 Message-Id: <20211212041452.380448-1-guillermo.e.martinez@oracle.com> X-Mailer: git-send-email 2.33.0 X-ClientProxiedBy: SA0PR11CA0117.namprd11.prod.outlook.com (2603:10b6:806:d1::32) To BL0PR10MB2852.namprd10.prod.outlook.com (2603:10b6:208:76::22) MIME-Version: 1.0 Received: from localhost.localdomain (187.248.82.110) by SA0PR11CA0117.namprd11.prod.outlook.com (2603:10b6:806:d1::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.19 via Frontend Transport; Sun, 12 Dec 2021 04:15:04 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 06ca12b9-6297-4524-848b-08d9bd25f989 X-MS-TrafficTypeDiagnostic: BLAPR10MB5025:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2733; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Gk7UUtN5BUooyYUBdIpIvbJO0T1aE48TbBu0V9Vc8j7quQtG7iccV+E1gc9NcYVXZ1LL8G7brZaAnvxR4tEgejKvoFMJKZhDNedv1vRSukYdBf3Br0zBU/AQPNLuc6NveCSNjbFCTjpjKTirD1bRnH6fhNgDwevuDfNkwQh2mqenmQGx6zrPPTyc4TK0S06YocIvu7NBQ/uNPWcL8qB3fusaMd+UaOilSKrqRkg555QQcA/wFLsztTwxw+YWR/5vBhoFLr2eA762/wy4ZtsoPEmaq3wxDZi2kGS6nH8TexKEXwfddWongFlxMIm0Y7M6Cg39ZDgwQiH/NcIXo+1MwIIerWV1GO4I630MyU/Q+wfV2uE6+yPShxBtNRM/VzAUTcN05VG1httlX2LfDpLb5IHBMccBUn/sfH3kyXrxTyi5EdNKBhHKtG09K9yli5voK9wSmTnBFPJlFaiOe4o3xMDm2FJzP5x2sTuPG6eIqFfLijNOPr+h459DFA4pLI4BTkWd7LoGNHF67aB78PDaWojsZ3vScyZoEKLcbuFZqOj8WGUav1GtmTW3nuaJTBcy5rVtO6l3jovI/nFrmvZgWMfMRVmRU4tSJ4/bUv+FdS+F1l0k2ucRFP+eUe99rCFl9RrIvl0Tc2JD4+Z7dve5Ld8BSyasic63v+edYbuj/x6SLSq926EhHi1PQ5brSmrAoZ6XsGUhobpw1Q8zAbB7QUHa9EIXUt2IAA1zmZLlSOjnqbQvVnRW3vX9N15ulKRh4dIlPKNkuxzzDYZlbzg0sriJ25F+XmJRA2bamZ/DZbc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BL0PR10MB2852.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(107886003)(186003)(6666004)(8936002)(8676002)(103116003)(2906002)(6916009)(26005)(5660300002)(38350700002)(956004)(38100700002)(2616005)(83380400001)(4326008)(316002)(1076003)(6512007)(508600001)(52116002)(66476007)(66946007)(66556008)(6506007)(86362001)(966005)(36756003)(6486002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PiJP79X4v0UArgzHutJYRLHqu76rz6hASUCeOmnOcDdbzYGWR7+LijPmh1gXRqxrAMVRhc6rBZTCTcC6Ogry21wCZigzN/94v0SOpFQq0R9zg0H4FsnWBdJE47x8yVyKm356/S2j7S9N+IVc4A/1c9HvIIBcZQ+ZzRD1EIw9VtYK7XyXAJTcVBeyqAZcgpNhRb+QUXKpD+FRrhbcECbu5Cgc0rbrGRFYN7GsFT4JYlwyVwJxBgzrmr8bSEALZVA2naC8pF7MkjTMtydXZiYfwFBaZzH1l843CLCALtyo+z/OZ5Yhxas37gxBhXOWB5Oa+YsG/zkfKFfnVvHagGEbmLiq7H+5F6PZRrVlTQuSbXwiptrjMMA0a1CXR/CK40L7OYVUtX923cpUrsF0hvxJI4JEY0v3wwm4AdkP5vIcQGl7aq4ikUzzraGNP9O7TtX/Upe57c8pMXi2spMej8RqolB0N3TqEI7OpNqIijJBszuFJK6UFqpnHHIE10saaWtlBww1ViRvTKDMxaTunX4wYwWbBGnX5p0hzdTJu2439q9AaChHr0ypkUasQBV++8g/460x2+3qo9qzgxYmmGPObzqi2Ce/rV0Qem90cnTvcULNFSVroO/nlBF786Fv5hOkqZY3Obdko2zWGFRuik08X4AgN6LqYowdglFxDXgnPaTEA0ge7VTiBgXUM0hsw6wNMKTpNt9lcgv8/3DHCUY2IjBoSTSRarfmc6X8luinxydkOoes/myW20ZOsyClyXmgG/dlOsxDLHCHQLSNLcR5XUOl701RNUNhuVrZFcvKkE3mc65pprk0v/AsXNUytDdtitgZIMujV3loSgWuwoq6TcbdO022Pe3sI+f+z/6oIFosfuheh5cYOqtmIWCS4K4NcXfmaHFJrq8llbUesGu7iLhQucSo7woBynrGS8XNSk6Z4AyXDqDRoI1IlARup0EriJ2+uzKT8l1zrZ0z3BwV6cA/I4F+qIgJiTVX9NOG4FM8GomCrDHPB/WhvrK2UCzzrjdi163Hpubc8g6vCILSawri2j9f/3xS2ZbUK+52AHA1+8IwQJYfIZ+RjR9sJ4ko+2O/xcRH8yxdi5LTwdzP93Y56NvC018Py1DhAwqGNA4bsGvtnk4iiFSJRGNPJJUAAKaD41+0A33aMVUV4yNo6ZjB+UTBibmhMD1avBM9Qp7Ajgog7tCslhoRIDmfXV4E4buhBSu27UFjjmKW4H5b7dquKc+GEi/YgRF1cNsnAXpMUrNDf2yCOdKweyt0E7R1afcpsYSTDxwFYIy8VBWlvaQU9Q200aAsiej4GYjw6FSGmJQQ+95xtEzu9j6VvyZcejYtCfl2IBVgoZ+5CxkmF7GTkF+Vs3iX/VPV4yVmfvShA+du4fHB9RI5Gr6zMHU6YY/lCCOtiIASKjOQ1nZoB6zFZy3+HiXxXmA6kZw7uprWsBrTRCP7bV6ENMoJi7HVju9ZiG0FismXKQ0sC9IMFyFI7d2UpRp27SYJ4upzPUN7aC2NuwCnatK9eNTSARPQHM0P1nuc3m4IEmk6GPFzVcaBiYGlFUuKflzuc4UHKiJLxlQ5X/6D0noESYVgCkJ5uNz+Y2qreowMqcEgp1rOIJaW9RCxjebF6AEDH555vSFQ2V4I2k8vUTDLk4V0oKr/vygkmoCu2cC4a0o9Ki39LbZfnyzzw8+h+XlmznwlBYM= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 06ca12b9-6297-4524-848b-08d9bd25f989 X-MS-Exchange-CrossTenant-AuthSource: BL0PR10MB2852.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2021 04:15:04.9583 (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: 92Y4r00ONXxjEyJLO0rh5G+udP4rs/8cp2nL1q0DOpdZ3rZeFXp4c55pT7RmWKd7daIpiANQDfMExBWGFH30dbDoZ1y97XuMSQLlTPxZbHI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR10MB5025 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10195 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 mlxscore=0 spamscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112120022 X-Proofpoint-ORIG-GUID: UxZH27HNzEHeUAO8DqAAUBbTE4I7VYPZ X-Proofpoint-GUID: UxZH27HNzEHeUAO8DqAAUBbTE4I7VYPZ X-Spam-Status: No, score=-11.5 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, RCVD_IN_SBL_CSS, 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: libabigail@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list of the Libabigail project List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-Patchwork-Original-From: "Guillermo E. Martinez via Libabigail" From: "Guillermo E. Martinez" Reply-To: "Guillermo E. Martinez" Errors-To: libabigail-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libabigail" Hello libabigail team, This patch add support to process undefined forward declarations in ctf reader back-end. Dependencies/limitations: * It works on the top of the following patch: https://sourceware.org/pipermail/libabigail/2021q4/003985.html I'll appreciate your comments. Kind Regards, Guillermo Undefined struct/union forward declaration types are not serialized in abixml representation using `class-decl' node. For instance, consider: struct key_type; typedef void (*key_restrict_link_func_t)(struct key_type *type); Expected node: * src/abg-ctf-reader.cc (process_ctf_forward_type): New function. (process_ctf_type): New CTF_K_FORWARD case. * tests/data/test-read-ctf/test-forward-undefine-type-decl.c: New testcase. * tests/data/test-read-ctf/test-forward-undefine-type-decl.abi: New expected result. * tests/data/test-read-ctf/test-forward-undefine-type-decl.o New test input. * tests/test-read-ctf.cc: Add new testcase to test harness. Signed-off-by: Guillermo E. Martinez --- src/abg-ctf-reader.cc | 53 ++++++++++++++++++ .../test-forward-undefine-type-decl.abi | 31 ++++++++++ .../test-forward-undefine-type-decl.c | 17 ++++++ .../test-forward-undefine-type-decl.o | Bin 0 -> 1488 bytes tests/test-read-ctf.cc | 8 +++ 5 files changed, 109 insertions(+) create mode 100644 tests/data/test-read-ctf/test-forward-undefine-type-decl.abi create mode 100644 tests/data/test-read-ctf/test-forward-undefine-type-decl.c create mode 100644 tests/data/test-read-ctf/test-forward-undefine-type-decl.o diff --git a/src/abg-ctf-reader.cc b/src/abg-ctf-reader.cc index bc49f49c..99937a26 100644 --- a/src/abg-ctf-reader.cc +++ b/src/abg-ctf-reader.cc @@ -384,6 +384,53 @@ process_ctf_sou_members(read_context *ctxt, fprintf(stderr, "ERROR from ctf_member_next\n"); } +static type_base_sptr +process_ctf_forward_type(read_context *ctxt, + corpus_sptr corp, + translation_unit_sptr tunit, + ctf_dict_t *ctf_dictionary, + ctf_id_t ctf_type) +{ + decl_base_sptr result; + std::string type_name = ctf_type_name_raw(ctf_dictionary, + ctf_type); + bool type_is_anonymous = (type_name == ""); + uint32_t kind = ctf_type_kind_forwarded (ctf_dictionary, ctf_type); + + if (kind == CTF_K_UNION) + { + union_decl_sptr + union_fwd(new union_decl(ctxt->ir_env, + type_name, + /*alignment=*/0, + location(), + decl_base::VISIBILITY_DEFAULT, + type_is_anonymous)); + union_fwd->set_is_declaration_only(true); + result = union_fwd; + } + else + { + class_decl_sptr + struct_fwd(new class_decl(ctxt->ir_env, type_name, + /*alignment=*/0, /*size=*/0, + true /* is_struct */, + location(), + decl_base::VISIBILITY_DEFAULT, + type_is_anonymous)); + struct_fwd->set_is_declaration_only(true); + result = struct_fwd; + } + + if (!result) + return is_type(result); + + add_decl_to_scope(result, tunit->get_global_scope()); + ctxt->add_type(ctf_type, is_type(result)); + + return is_type(result); +} + /// Build and return a struct type libabigail IR. /// /// @param ctxt the read context. @@ -813,6 +860,12 @@ process_ctf_type(read_context *ctxt, result = is_type(struct_decl); break; } + case CTF_K_FORWARD: + { + result = process_ctf_forward_type(ctxt, corp, tunit, ctf_dictionary, + ctf_type); + } + break; case CTF_K_UNION: { union_decl_sptr union_decl diff --git a/tests/data/test-read-ctf/test-forward-undefine-type-decl.abi b/tests/data/test-read-ctf/test-forward-undefine-type-decl.abi new file mode 100644 index 00000000..4197b6a2 --- /dev/null +++ b/tests/data/test-read-ctf/test-forward-undefine-type-decl.abi @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-forward-undefine-type-decl.c b/tests/data/test-read-ctf/test-forward-undefine-type-decl.c new file mode 100644 index 00000000..b6ab4896 --- /dev/null +++ b/tests/data/test-read-ctf/test-forward-undefine-type-decl.c @@ -0,0 +1,17 @@ +/* Test undefined forward declarations + * gcc -gctf -c test-forward-undefine-type-decl.c -o \ + * test-forward-undefine-type-decl.o + */ + +struct key_type; +union key_utype; +typedef void (*key_restrict_link_func_t)(struct key_type *type, + union key_utype *utype); + +struct key_restriction { + key_restrict_link_func_t check; + struct key_type *keytype; + union key_utype *keyutype; +}; + +struct key_restriction k; diff --git a/tests/data/test-read-ctf/test-forward-undefine-type-decl.o b/tests/data/test-read-ctf/test-forward-undefine-type-decl.o new file mode 100644 index 0000000000000000000000000000000000000000..e8adc1441c5142cd085cf4cc18356bb521ec137c GIT binary patch literal 1488 zcmbtUOK#La5G@bk8!1dSh|k6d5fZ@m%q+7&77+v?gxIh^2#x&d$ynph$ZkWtf+fe` z0C0!g1g-!VfO>X!#_9=dD5<)tUe)VQwc8(`ym&gWEYf1pBU(ioB^sVv`F`vAv`JU! z*Y}Nq&b-wQ+YP0c*g}V_Us+FBFSEW;3SX^vfn7)&@}$?`U>+n?az__2w1q8QWo6m9 z*jbEQ=X*XjccY8%qh`X&yqnkAKJM^#f6v(WS+U+L)=#YMTJMV_riEyxvRR7OsZYI9 zRI*GWIZcy%F`di4}1ozMi&glH}C<`LDYBCvwY-QQmx%Q+umgJ&G%?l}9 zK9Ez%fUl#AkMi1GmIXIKHhLfbX>TzfXYYNd?Tmgqt`BA(Z*vK-Rfjr`-C|&}@XpQhp#sc(p;vvud?pupUxD~fK=9uJr1`q9z|Gz>M4uJ^E`pwz``_l=S^RH` L|E|Y{Yx4g9(}I;l literal 0 HcmV?d00001 diff --git a/tests/test-read-ctf.cc b/tests/test-read-ctf.cc index 7f5381f6..6ea85c4d 100644 --- a/tests/test-read-ctf.cc +++ b/tests/test-read-ctf.cc @@ -268,6 +268,14 @@ static InOutSpec in_out_specs[] = "data/test-read-ctf/test-callback2.abi", "output/test-read-ctf/test-callback2.abi", }, + { + "data/test-read-ctf/test-forward-undefine-type-decl.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test-forward-undefine-type-decl.abi", + "output/test-read-ctf/test-forward-undefine-type-decl.abi", + }, // This should be the last entry. {NULL, NULL, NULL, SEQUENCE_TYPE_ID_STYLE, NULL, NULL} };