From patchwork Fri Mar 18 01:30:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Guillermo E. Martinez" X-Patchwork-Id: 52092 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 7BAF83842423 for ; Fri, 18 Mar 2022 01:31:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7BAF83842423 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1647567067; bh=TNOXwOJoiuWlGw7FzhQ0nSBOweMZpaNlmzQhqxp+O9A=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Help:List-Subscribe:From:Reply-To:From; b=Tssiuk8UcW1hhztaVgQxOSxcxuxtA2gLgArWzoQHTRn3Yo95KGrVsMJAX2yUk70vW TMUlhV1PFt4miEw27lceWqWxGFXyYFScsDfbPs6nE+GtMhH6ss5vbnYb9M3+0cJJpQ QTwNSnhUKaVAtwHqzrlG/UQIXuh7wb75xDWqcU+M= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 29F513858413 for ; Fri, 18 Mar 2022 01:31:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 29F513858413 Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 22HLY70Y022983 for ; Fri, 18 Mar 2022 01:31:00 GMT Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80] (may be forged)) by mx0b-00069f02.pphosted.com with ESMTP id 3et5fub2qd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 18 Mar 2022 01:30:59 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 22I1UwhC070321 for ; Fri, 18 Mar 2022 01:30:58 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2173.outbound.protection.outlook.com [104.47.57.173]) by userp3030.oracle.com with ESMTP id 3et65q4fgv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 18 Mar 2022 01:30:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gYf3w9wOnQ06J25c+VBYBqPl+br3NW3RypA1khgvFGr3IgP9ynqU7JUnxRu31AEu6BBOzZZUxpT5kWeRA6hOF3Px/hKzHHUsgUThplGd9nxkcGw+9eOSGxXs+KwAXl/Liti4Llv/sM1s2+EbJTyJ7wDlspAB+fXlmoluHTZQ3X55/5zbN3G1uTLH3UPqfqRZJh1y9IDBtmkjr7j06tzI7ls8JlzMf7pFtATtVKm6ySbr5R6HCUM1vJj9nGNpwxhXlEF6g8q3aCh7MoUGkfo8VPgdcb3b3KpzVzepWOulIwNfHQ/Z69Z/rmPxuXVMegMsqaH0LKhTzRuRHaRRiB+WXg== 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=TNOXwOJoiuWlGw7FzhQ0nSBOweMZpaNlmzQhqxp+O9A=; b=JeOwPn7NhbsJ8w4WizFuBVgCQjSXjX9YGgLHCFP2TamLzv2bdoXoptehfvAEC0Dw26dPrGCn2T2z7eAEW26gGKaioOVWFCfY3cy7GDggn0p7+IrKXZrvxFgqDrstk5RZ2HGwgS5k8jGUgReCZm81byX+MIFswmTvn6yhviNB81hOmJIkAgPXGn0joj5nPT/694qrgb/l1hLJbu/GeqL3QD2bNHb9gIjD9H1Hf6dxDxKUZNtJsUjQ16o3YCvSzDkSGBllbKDqD/L6SynPD9Cnc44rs4Er64dfvXMMnMYxJITAw2wHGU6dYO3PeMrLUwTIPPuD8xBpjsHPw4E6gkbQrA== 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 MWHPR10MB1407.namprd10.prod.outlook.com (10.169.233.148) by MN2PR10MB3936.namprd10.prod.outlook.com (52.132.174.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5081.14; Fri, 18 Mar 2022 01:30:50 +0000 Received: from MWHPR10MB1407.namprd10.prod.outlook.com ([fe80::28aa:6d3b:680b:3cb5]) by MWHPR10MB1407.namprd10.prod.outlook.com ([fe80::28aa:6d3b:680b:3cb5%9]) with mapi id 15.20.5081.016; Fri, 18 Mar 2022 01:30:49 +0000 To: libabigail@sourceware.org Subject: [PATCH v2] ctf-reader: Add support to undefined forward declaration types Date: Thu, 17 Mar 2022 19:30:36 -0600 Message-Id: <20220318013036.2306102-1-guillermo.e.martinez@oracle.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20211212041452.380448-1-guillermo.e.martinez@oracle.com> References: <20211212041452.380448-1-guillermo.e.martinez@oracle.com> X-ClientProxiedBy: DM5PR07CA0046.namprd07.prod.outlook.com (2603:10b6:3:16::32) To MWHPR10MB1407.namprd10.prod.outlook.com (2603:10b6:300:23::20) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 714f40d9-2e3f-43ba-075b-08da087eeec2 X-MS-TrafficTypeDiagnostic: MN2PR10MB3936:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bqo3qe12IC2rLtRSiw2ghCBrDAPF3tjB1cPdcuhxgocuxifmPk1dFatWQLvYHCONN3yoLdFzK6wmtCE4R/iiK8p0xuSxNIxDm2M/gWh4djnEGI3WMaXBwjSOjGzSbomFZg0CenQvH17MkbXOEIMiurHr5AOkvjSBYQgZp2uo5n8FzGt/rC8hBTS6v0hmzFlg/TNGKXFhOO9eRd/Evu5pnLDd/OzsIvy3ktOVKtLZ1+tHdsxrRTnb0St/hCRzR7Iq3T4+n+zP9GApg0/CQclLss07zs9DsSnUkoOnu5VkmIYsfr876C32jm/ZPPlu6lUTIMWv0hjmdwZbBys86DGlPx+YzAUtnWtu/rGgKwLI//MCT8Mg8rVyAH1Jy2zIXTDPStAbVBZN3SW1KwxMPOunWJoCv2bYQHHC3ylRThbRyIAzZ2LG7bVdCQC5Kx/KF2lhpTZ9oGfnnhy8hHihV77nI5FyI2CiseK2pEiVYRzzgBoVKPREXQFithai9fz0xqt6aLJubuN9Y/I+cpDqZptkMb42bdB82/+D4QyGr70iKPxrSEf/Q290ZZycoCquhXAb4ZZBWg4Z4EL78uuoWEDRberGdPNZfAWv8PR49OMtbeiOyCFNSTEd3qkX0a0Zinzy34jY0lKZE3C2WIwjnYYBaw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MWHPR10MB1407.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(2616005)(52116002)(508600001)(36756003)(38100700002)(107886003)(66556008)(6666004)(6916009)(6512007)(186003)(4326008)(1076003)(6506007)(8676002)(103116003)(83380400001)(5660300002)(66946007)(316002)(8936002)(2906002)(86362001)(66476007)(6486002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9GsVcdLoH7HsqRecdLYv0c3+gXJsMwuo3MSF+eN8tP8Iy5Kn3Ncvh0xZgaovj/4hofMTW0Q+JbbLdbHYnpBslGVs8IVOIIQiITBlJ43qSSNQXGOE8eKqXwnVPgZYdooc2wv4e03xNZNc/D8FpAw+Xk5cIOQm2gBoaJ+sfjlMBZ/u08fVe0SnfbchcR2vYwn7rmCbdp9X+3lqlE7Nqm38qzXnxAHT2+AMSE71zswSarkzkL3XCBJmG2szUc+Q33728YzNRgfw1fnZFDYTRZoZ0TPA9WOGlNnFwLcn0efmR/pji/PiRlsRqJUwzQApDQp7mwuamA87/4hRiippWpysdvqidHEL5/5pLhNlDySLUd9EFzaDiWrqoly27heW752xe/1oDguSj70av6tS6bwyCALBLoKVjCTX6FEWg0ZWsdZDHe5CbNuQQrQDHYo+c0NntMpgYk22sTEka8aH3tRLrNR8thDJvnzQAjimha9QUw1sHGtGq1sED1y7Gw06AJ/90WalSaFCTuxrV/lEq7fATtgBd13LvCFMXJlkjNSy5/8lZC4iDfaZfRZeXmCEZKL+iHOydvF5bHS/56MR4QhLIcxomkqM+LRdbzz1gCFfbPtJz7VCpI9pv7ofg1L2JIzeIzSjOp9EoKUlKTKUPXLKrNLyniEGlPa/IgdghdQPi48syxcmjhekBQps9Y4M4Ot3HFDx9qytFeP0wlExyMEwC8Xmklit1rw3jmX48qw2jmLVujubUUTVbPq6WGmlgjdf7JK60tVZZxyywq9QBV9srniKy/iyqfJSgh9K3kbwHwPOy7zEggKjuf6zZNh/D29yX4TVSmj7J/KvpMspLL320scuw5G8M/QZMu1eKC9lbhvV5v0jvHgDp7KuaGVST6CTx4FfCT9nbPFEq2luOWv1kRCPCqZyIniKA3o/joEBMSSGzUUVNesxEcCzyFO6QCvZWN/34kfkeXey9xfg/7U3vfMDqTjsSWvc1UNeK0s/t5QN5JNRD1c/omIkrf2JLGXqLpFGHhySKbgiaUSNY1j+YLNjFpG9q904OBk0D9+IShCqx0HFesCTqI1u9gnSWrIJqlC0RKfoXkJn9MRKZ4yvMt105VEFktK1QQXrjaIlB632/W6pvYwHYa7hbTBBAu8b/wPKziH5GBN/9saLBoRWls02CU9bpXsgk2SDkhVDZlTjwjbVCfDchSUzqWPhIGRn948t3dbcTEnEKsxjiOJ2CoT21J7n0lcbkOivbQn3/eCqIwlCl6NsCHN/UOoVNjcQz/cjN/RYjw0FzapciWrL38PHlGgp1kxk8O0k9reGUj9RHPA+wRwoabR7E3CMDR7+F4ezKiRYBZ1q5jMG4wqpF4P9FBB4IlYIIU52040OvaYpggUg7KyXHlzmdXnd/bJv1ntsQuFykaEq1w6QwFnMDYFtxyAwD5+01NOOhCNHlS6RyjAt9N5nPB9IW0g3bo13i4kBYME5uMfuRxN5cA18Hyy5GT+O5cmOhP1G/cPzAZ6GoUz3JmeebIZh7ZrS6kj9 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 714f40d9-2e3f-43ba-075b-08da087eeec2 X-MS-Exchange-CrossTenant-AuthSource: MWHPR10MB1407.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Mar 2022 01:30:49.2660 (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: uF/RJdROxlbYoesMmnPBg746GoW1+xI0Hldq8PhCH20tRkKH1DE8tt0B6wlSh3GWW5fstCPhB3U8YxXtm+QEObBJslrEUjIxXozfb9MYAyw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR10MB3936 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10289 signatures=693715 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 phishscore=0 suspectscore=0 adultscore=0 spamscore=0 bulkscore=0 malwarescore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2203180007 X-Proofpoint-GUID: KsyWl3nq2ygVYM1WDn-421QdPxse5dMM X-Proofpoint-ORIG-GUID: KsyWl3nq2ygVYM1WDn-421QdPxse5dMM X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE 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" This is the patch v2 intended to fix undefined forward declarations in ctf reader back-end. Changes from v1 is update tests/data/Makefile.am to include test input/expected files. Comments will be appreciated. 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. * tests/data/Makefile.am: Add new test input files to test harness. Signed-off-by: Guillermo E. Martinez --- src/abg-ctf-reader.cc | 53 ++++++++++++++++++ tests/data/Makefile.am | 3 + .../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 +++ 6 files changed, 112 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 e5ea0ca2..ec6a5c81 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/Makefile.am b/tests/data/Makefile.am index a7eb7ff0..8f71fcbf 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -660,6 +660,9 @@ test-read-ctf/test-functions-declaration.o \ test-read-ctf/test-forward-type-decl.abi \ test-read-ctf/test-forward-type-decl.o \ test-read-ctf/test-forward-type-decl.c \ +test-read-ctf/test-forward-undefine-type-decl.abi \ +test-read-ctf/test-forward-undefine-type-decl.c \ +test-read-ctf/test-forward-undefine-type-decl.o \ test-read-ctf/test-list-struct.c \ test-read-ctf/test-list-struct.o \ test-read-ctf/test-list-struct.abi \ 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..ff019208 --- /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 e7a87186..8ed8ac1a 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} };