From patchwork Wed Dec 1 03:06:45 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: 48319 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 BA9C43858414 for ; Wed, 1 Dec 2021 03:07:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BA9C43858414 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1638328049; bh=mDg0ZRG5AC8vGLkNNGoIuFB6zsheiNOkFsEUeaMgLpQ=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Help:List-Subscribe:From:Reply-To:From; b=WB86JfSoRMaBMWmGzwXYrkjYE9INcj1fr+18QrwH8swRhVQ4GJaD53a14AHPIRA6l KwM+k8FJmSXwXSIMda8Tl3da7kdqnVEHdzAxWfMzgvjOTfdcXXo5NMfPO5ILpIBItK uYl4islAy9DgataD0T3mzdOGA0vNhPdV2kHgnlGg= 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 DB2933858D3C for ; Wed, 1 Dec 2021 03:07:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DB2933858D3C 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 1B133NdN015131 for ; Wed, 1 Dec 2021 03:07:14 GMT Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by mx0b-00069f02.pphosted.com with ESMTP id 3cmt8cdhqy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 01 Dec 2021 03:07:13 +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 1B131ma4140591 for ; Wed, 1 Dec 2021 03:07:12 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2105.outbound.protection.outlook.com [104.47.58.105]) by userp3030.oracle.com with ESMTP id 3ck9t0vutw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 01 Dec 2021 03:07:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=G2XM79HntYrPRqMl7RDFz9wab2l9bKsAnGeAg/z88SL+Zq/KrRt8UkmhPw6lIrlgYY6YVgrTwxGbhyQu8RwxUB34m3ESHLbGBfzHOMqHpfi0HdNikAU/cCfZu42ySOL59D0GACMoe2QJ9R0puuDdCx5BLe8uPNTekiQvnOKI46RXqTZDB8b9N7LmtG37L4yEVZYNxmjBkStf1VpmOtKXBFmFRI7A4rumU1+tE/fkf/OD6o9ON7e11sFkGxot+Tc413UbplC8zhd7KXZ1Zd+jc/jD3d1v2xbZk2L8DbV4bME6QB7Tlxe70SxiFDM8oBRl0PM6OirAPmBj6LlSelCGfg== 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=mDg0ZRG5AC8vGLkNNGoIuFB6zsheiNOkFsEUeaMgLpQ=; b=FGoLNk0xpuHxx6DxzWbF6vkaFqG0ua/hPRfxc3FhubESm6l1A9zLymPWhYqjwOdLCocgznJ6bDOq9AF7ecXuBOllLv5ig9u1SLAxLpb7FvDaHkAOZJ/Sl/1vpIbpZRu+jIJ56QdksndPLRbDnMwtb3EqWcdYDJydG9d+rjXfexL/41IVeAGrY0S+c0qz/81DYfQu4IQvez9XnzNxseYelTQGq8KvaVHDViH/XNbB+kwDpjdeZyayibFTAjLGB2LW2TpMRVJ15BvKTcHx9aNy/9XPNbaSr1RwoQCqPQbxQ5PdH32FQM6HXQqcSMKCT3qA6A/gJPdSHkvN+46rfUl5xA== 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 BL0PR10MB2772.namprd10.prod.outlook.com (2603:10b6:208:72::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.11; Wed, 1 Dec 2021 03:07:04 +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.4734.024; Wed, 1 Dec 2021 03:07:04 +0000 To: libabigail@sourceware.org Subject: [PATCH v3] Add regression tests for ctf reading Date: Tue, 30 Nov 2021 21:06:45 -0600 Message-Id: <20211201030645.3804678-1-guillermo.e.martinez@oracle.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <0211122213353.2456208-1-guillermo.e.martinez@oracle.com> References: <0211122213353.2456208-1-guillermo.e.martinez@oracle.com> X-ClientProxiedBy: SN4PR0501CA0092.namprd05.prod.outlook.com (2603:10b6:803:22::30) To BL0PR10MB2852.namprd10.prod.outlook.com (2603:10b6:208:76::22) MIME-Version: 1.0 Received: from localhost.localdomain (187.248.82.110) by SN4PR0501CA0092.namprd05.prod.outlook.com (2603:10b6:803:22::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.7 via Frontend Transport; Wed, 1 Dec 2021 03:06:57 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2010d6c0-5a23-4ba3-9d05-08d9b477a320 X-MS-TrafficTypeDiagnostic: BL0PR10MB2772: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1417; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: w1zT3hehVHVcb9gZMbjDwAnUKj2VO27LhG8c7tnwiquw5cXepimY4toeSKTu3LF4Xy7PC2ZPEvoUCgFl2+wEH4axTPRl15MQTFG9o24brvr0sSoDEMLrRXSPE/A12tjXKUAxCUbOACZSMkBOer9DFZUuf5+jdNsdGRopusaHuUBBlwESiORMJGnSjXYTUBVR6zgGGOEQ5PIRDQI8uOy0pIUkvA28YswG/ABvQOdTqvo2FurwqbIqBD9XU/WvKEHAYV/xQFvHccK/yhRt91MqcUYiUJLw6OENdrEQrYYPmJ9hgl/5OW7GxFheV2IbHxIn2IkMbsHlnMlWwql1PCm7pH2mK4zp2BZW6j+5sirOhIY4s4mcXiyWSc+rDaJtPfFHdOrdTB15GhdYY7LcikDjNl/z5p2HcCsdGkg+kysUZvAaqrMEGqHZtTw3bKsCHEABjH7y/uWA9x84xLSVNeCsKBK7RsHOvTc75Gy0R7PuncKeFSiyXMvYalYwYWfIS9g4oJ6xnh8BF9EZhNZPZJJecogBt06PK/px0/jO/0ONVX6UYXiDm6BmpgvX8n/sLS3AhqirdMjGXiLBJUidGRq6W8oxI/u81umoT/rd1FMGJcPh/oF+mQ4imyhEVWvtBeb6/ki21zNnmTOSzyXYuJedZzZGGXbRQXdVKjd5kDl+wKSNBHWbM2rxO6xAQ8XONScNFrJMsHfYeKdLfCXQtti4kMzdiA0T3a634NrMgPuOtmW7DPmLsosyOIY9wn7H6Xt/I6Aam1Yc1A07JT0PxBisSrUGHIPdAW8aH/SdaPOZbvW0lOeBowqEeOlQupi9a4eK 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)(66476007)(66556008)(103116003)(52116002)(5660300002)(66946007)(8676002)(6666004)(316002)(38100700002)(2616005)(38350700002)(956004)(1076003)(8936002)(4326008)(6486002)(2906002)(107886003)(26005)(6916009)(6512007)(86362001)(966005)(30864003)(19627235002)(36756003)(186003)(6506007)(508600001)(83380400001)(559001)(579004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: w758rhfFhrpeZYe2rWVn3qILgncW/hls0MdueX5XSoGzZBX4owkDb7woBLvAPqk1LmJtBkp1wXh5xPYEx9E7fLmjfP7Sx6M3UuGN+Pr6JFeMQiNGNN5Odfh2NT5YMNAXAtCo5Ibdy5agn9MJABrFi0BmFj7XQBG5RRadVZvxiZoIrdSWbP/yxsGu9UTvk4qh9UvEPu7jALV0mhvzhn2VJ8QqSgWsHWbCQNrtlR9tIlNOCUKTSHqzzkOjdCW6r6JIdycFl9yC5pmy8pamrsAkWDPSvFlBCd47P5+75sAIb99eBqGgqOQa2TIY+7Tx62c8ahLbfE5EfMOVsnwZjqxlPokSsxxZKqHdlFgUMsIFF5VLw6cg8Bphz4rldKBsRmYeKwfA3dsxEQbanRf6p63jbj1+M0XrPVao9qjTMl8X+Bn42/4rU/uA9Bj+2qnbkjt5Vw4wQAVo+aNW/JvEfX5wTCu25H91Wtmnv0eWJdJgV1gFDTwtAu/UurC/OHHV768Ue+u7jNeutdsH6qg/P4sJnkccl4R8ipeD2KWW8X0Yzja8+WEy3EQ5SUrHUMzTtvy/tLmHvnfy/sfsL9EInh0rznOvxqRCdd8aspOdNCRnr+ccCD2obef5DrnjRCIezGJozX6zrmSzAzdQlTO/7ALczWBBGVcl0Hoal1/OKF/dn91KR4x2oj0QhPG404twpoRJ6ch1Xqj1DWcNPRLC1I0LAttSPRCYBtbCVyk6iDw+qbqHDd34lsXNxo9LLnQuwJVy7I2e9ttqmY55pFiB0IftsioetFfj9I5No4Os0JvjtzKLJmKlNTfJqRD+ciNGw+YXL9HfZZz0d8hxi7+H6Q0Snzq3QHHhR4vc6Wc5OA1vILwTXqeHurSiskCZYiKoaIT1j+QXIOzVQyODEX4Fw9c4C4G0AEx3/+FzNIkMRhOTlzVoElaeUBS+VohVWuEhSnXg5e/pbVTSaAPa7MKBQtE9dVELUusrkY3X2Eo9Pb1W0XVHILTVUrFuuSG73t+3DK1e7p7iXENru6FxqZWfAZCrVFVUiVVPYDmDGAIi+zFphWlJqlZBQKG0bJcbT7Evq+hTMiH15oH3GFf28FQdlqi5We4sCppJReRQWIrdh/BFkrg3SVejy2KK+Opkbx0zvos3w65pya9ItgK9tNvYCzRch+7/Mf6MyW1g3ukXllV2Z1LGEtMk4OU0U2pD+ipajCBTVEuNk962hLZ8T2h8EHnQ6RUfOTojnQubHALkL0ESOLqMU+DxFQo+9YMt8qRolUJGYue5rGFXzzRbvqf8cuq/Q6gNwV2FsuERIAeAmIP7b/JIGHpL6mxHv7aiPqAyQ4rrsf0x6pWAWhBJGb7gr13tJ3xqGJGC5Unqu6J1EIrddAVn3JeZhG+O4dwtanjvJpAhPMMaqO8ERZ9W3NV+Ro1yk1ecFRExHTk5l5n3TAYk5U1zIw/irdgHkVPcd7KcA0Toa4xCNE7RZg4QGYpMFX0HILOOtbzTLTclC7l6LuIml93pBCUjXW1kUwpy02C3dg8sqw6h57x7LNtw5P7ph48hurjyC0tmJUqiasjZjCZpBgNiHEwpgF9w97oPzCICnmYf8R/w3Szpxj6DcPax9GhDq5DUkSyzkzdCO9Yf+dxEMneFnbkR1YGA9mqieDBAyrHr7cY2qW8Wp0PZhygCaiXZNw== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2010d6c0-5a23-4ba3-9d05-08d9b477a320 X-MS-Exchange-CrossTenant-AuthSource: BL0PR10MB2852.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Dec 2021 03:07:04.5340 (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: KKIJ0RXewZgTih9q560094AIl1AiS/T9bGkTO+UdE4O7XucztVT8vp2dVXa1ZnGQjzeSPUizb39rRYjgFpx154iEnalILrR1TjduSmSgxvo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR10MB2772 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10184 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxscore=0 malwarescore=0 spamscore=0 bulkscore=0 mlxlogscore=999 suspectscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112010016 X-Proofpoint-ORIG-GUID: iPdfbGHFdVLkziFlSFRiBhERjuYcMRr5 X-Proofpoint-GUID: iPdfbGHFdVLkziFlSFRiBhERjuYcMRr5 X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_LOTSOFHASH, LIKELY_SPAM_BODY, 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 includes regression tests v3 for CTF. The changes from v2: - Add some other CTF tests to testsuite. - Add documentation code. - Fix code detected in code review. Dependencies/limitations: * It relies in the following patch: https://sourceware.org/pipermail/libabigail/2021q4/003910.html * Some CTF tests were *disabled* because it generates the XML ABI corpus with *same information* but the XML nodes *are not* always in the *same order*, so using diff command fails. Details here: https://sourceware.org/pipermail/libabigail/2021q4/003824.html Comments will be appreciated. Thanks in advanced!, Guillermo This patch implements some regression tests for ctf reading. Since the code share a lot of functionalities already used in the readi-dwarf test, a library was built and test common harness were moved to a common location. So input files for test-read-{dwarf,ctf}.cc now are located in: tests/data/test-read-common directory, ABIs description are stored in the same location but in a separate file, one for each binary debugging information: (e.g, test4-ctf.so.abi and test4-dwarf.so.abi) * tests/test-read-ctf.cc: New ctf reading regression test. * tests/test-read-common.cc: New library to be used with test-read-{ctf,dwarf}.cc. * tests/test-read-common.h: Likewise. * tests/test-annotate.cc (in_out_specs): Adjust path for input files. * tests/Makefile.am: Build new tests/test-read-ctf.cc file. Add libtestreadcommon.a test library and use it for test-read-{ctf,dwarf}. * tests/test-read-dwarf.cc: Adapt test to use libtestreadcommon.a in test-read-common.{cc,h}. * tests/data/test-annotate/test3.so.abi: Adjust ELF input path file location to ./tests/data/test-read-common. * tests/data/test-annotate/test4.so.abi: Likewise. * tests/data/test-read-common/PR26261: Move test harness to test-read-common directory. * tests/data/test-read-common/PR27700: Likewise. * tests/data/test-read-common/test-PR26568-*: Likewise. * tests/data/test-read-common/test3.{c,so}: Likewise. * tests/data/test-read-common/test4.{c,so}: Likewise. * tests/data/test-read-common/crti*: Helper object to export _init and _fini sysmbols. * tests/data/test-read-ctf/test-ambiguous-struct-A.c: New testcase. * tests/data/test-read-ctf/test-ambiguous-struct-B.c: Likewise. * tests/data/test-read-ctf/test-conflicting-type-syms-a.c: Likewise. * tests/data/test-read-ctf/test-conflicting-type-syms-b.c: Likewise. * tests/data/test-read-ctf/test-enum.c: Likewise. * tests/data/test-read-ctf/test-enum-many.c: Likewise. * tests/data/test-read-ctf/test-enum-symbol.c: Likewise. * tests/data/test-read-ctf/test-struct-iteration.c: Likewise. * tests/data/test-read-ctf/test-dynamic-array.c: Likewise. * tests/data/test-read-ctf/test0.c: Likewise. * tests/data/test-read-ctf/test1.c: Likewise. * tests/data/test-read-ctf/test2.c: Likewise. * tests/data/test-read-ctf/test5.c: Likewise. * tests/data/test-read-ctf/test7.{c,h}: Likewise. * tests/data/test-read-ctf/test8.c: Likewise. * tests/data/test-read-ctf/test9.c: Likewise. * tests/data/test-read-ctf/test-ambiguous-struct-A.o.hash.abi: Testcase expected result. * tests/data/test-read-ctf/PR26261/PR26261-exe.abi: Likewise. * tests/data/test-read-ctf/PR27700/test-PR27700.abi: Likewise. * tests/data/test-read-ctf/test-ambiguous-struct-A.o.hash.abi: Likewise. * tests/data/test-read-ctf/test-ambiguous-struct-B.o.hash.abi: Likewise. * tests/data/test-read-ctf/test-conflicting-type-syms-a.o.hash.abi: Likewise. * tests/data/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi: Likewise. * tests/data/test-read-ctf/test-enum.o.abi: Likewise. * tests/data/test-read-ctf/test-enum-many.o.hash.abi: Likewise. * tests/data/test-read-ctf/test-enum-symbol.o.hash.abi: Likewise. * tests/data/test-read-ctf/test-struct-iteration.o.abi: Likewise. * tests/data/test-read-ctf/test-dynamic-array.o.abi: Likewise. * tests/data/test-read-ctf/test0: Likewise. * tests/data/test-read-ctf/test0*.abi: Likewise. * tests/data/test-read-ctf/test1.so: Likewise. * tests/data/test-read-ctf/test1*.abi: Likewise. * tests/data/test-read-ctf/test2.so: Likewise. * tests/data/test-read-ctf/test2*.abi: Likewise. * tests/data/test-read-ctf/test3.so.abi: Likewise. * tests/data/test-read-ctf/test4*.abi: Likewise. * tests/data/test-read-ctf/test5.o.abi: Likewise. * tests/data/test-read-ctf/test7.o.abi: Likewise. * tests/data/test-read-ctf/test8.o.abi: Likewise. * tests/data/test-read-ctf/test9.o.abi: Likewise. * tests/data/test-read-dwarf/PR26261/PR26261-exe.abi: Update expected abixml file. * tests/data/test-read-dwarf/PR27700/test-PR27700.abi: Likewise. * tests/data/test-read-dwarf/test-PR26568-1.*.abi: Likewise. * tests/data/test-read-dwarf/test3*.abi: Likewise. * tests/data/test-read-dwarf/test4*.abi: Likewise. * doc/api/libabigail.doxy: Add tests/test-read-common.{cc,h} to doxygen. Signed-off-by: Guillermo E. Martinez --- doc/api/libabigail.doxy | 6 +- tests/Makefile.am | 24 +- tests/data/test-annotate/test3.so.abi | 4 +- tests/data/test-annotate/test4.so.abi | 10 +- .../data/test-read-common/PR26261/PR26261-exe | Bin 0 -> 19008 bytes .../PR26261/PR26261-main.c | 0 .../PR26261/PR26261-obja.c | 0 .../PR26261/PR26261-obja.h | 0 .../PR26261/PR26261-objb.c | 0 .../PR26261/PR26261-objb.h | 0 .../PR27700/include-dir/priv.h | 0 .../PR27700/include-dir/pub.h | 0 .../PR27700/pub-incdir/inc.h | 0 .../PR27700/test-PR27700.c | 2 + tests/data/test-read-common/crti.c | 22 ++ .../test-PR26568-1.c | 3 + .../test-PR26568-2.c | 3 + .../test3-alias-1.suppr | 0 .../test3-alias-2.suppr | 0 .../test3-alias-3.suppr | 0 .../test3-alias-4.suppr | 0 tests/data/test-read-common/test3.c | 26 ++ tests/data/test-read-common/test3.so | Bin 0 -> 14824 bytes tests/data/test-read-common/test4.c | 11 + tests/data/test-read-common/test4.so | Bin 0 -> 16560 bytes .../test-read-ctf/PR26261/PR26261-exe.abi | 58 +++ .../test-read-ctf/PR27700/test-PR27700.abi | 22 ++ tests/data/test-read-ctf/test-PR26568-1.o.abi | 56 +++ tests/data/test-read-ctf/test-PR26568-2.o.abi | 39 ++ tests/data/test-read-ctf/test-alias.c | 15 + tests/data/test-read-ctf/test-alias.o.abi | 19 + .../test-read-ctf/test-ambiguous-struct-A.c | 8 + .../test-ambiguous-struct-A.o.hash.abi | 36 ++ .../test-read-ctf/test-ambiguous-struct-B.c | 5 + .../test-ambiguous-struct-B.o.hash.abi | 23 ++ .../test-conflicting-type-syms-a.c | 5 + .../test-conflicting-type-syms-a.o.hash.abi | 14 + .../test-conflicting-type-syms-b.c | 5 + .../test-conflicting-type-syms-b.o.hash.abi | 13 + tests/data/test-read-ctf/test-dynamic-array.c | 13 + .../test-read-ctf/test-dynamic-array.o.abi | 30 ++ tests/data/test-read-ctf/test-enum-many.c | 10 + .../test-read-ctf/test-enum-many.o.hash.abi | 69 ++++ tests/data/test-read-ctf/test-enum-symbol.c | 1 + .../test-read-ctf/test-enum-symbol.o.hash.abi | 16 + tests/data/test-read-ctf/test-enum.c | 8 + tests/data/test-read-ctf/test-enum.o.abi | 24 ++ .../test-read-ctf/test-struct-iteration.c | 28 ++ .../test-read-ctf/test-struct-iteration.o.abi | 96 +++++ tests/data/test-read-ctf/test0 | Bin 0 -> 16656 bytes tests/data/test-read-ctf/test0.abi | 54 +++ tests/data/test-read-ctf/test0.c | 32 ++ tests/data/test-read-ctf/test0.hash.abi | 54 +++ tests/data/test-read-ctf/test1.c | 25 ++ tests/data/test-read-ctf/test1.so | Bin 0 -> 15592 bytes tests/data/test-read-ctf/test1.so.abi | 23 ++ tests/data/test-read-ctf/test1.so.hash.abi | 23 ++ tests/data/test-read-ctf/test2.c | 19 + tests/data/test-read-ctf/test2.so | Bin 0 -> 15616 bytes tests/data/test-read-ctf/test2.so.abi | 25 ++ tests/data/test-read-ctf/test2.so.hash.abi | 25 ++ tests/data/test-read-ctf/test3.so.abi | 12 + tests/data/test-read-ctf/test3.so.hash.abi | 12 + tests/data/test-read-ctf/test4.so.abi | 14 + tests/data/test-read-ctf/test4.so.hash.abi | 14 + tests/data/test-read-ctf/test5.c | 41 ++ tests/data/test-read-ctf/test5.o.abi | 50 +++ tests/data/test-read-ctf/test6.c | 35 ++ tests/data/test-read-ctf/test6.o.abi | 0 tests/data/test-read-ctf/test7.c | 8 + tests/data/test-read-ctf/test7.h | 24 ++ tests/data/test-read-ctf/test7.o.abi | 42 +++ tests/data/test-read-ctf/test8.c | 7 + tests/data/test-read-ctf/test8.o.abi | 13 + tests/data/test-read-ctf/test9.c | 14 + tests/data/test-read-ctf/test9.o.abi | 57 +++ tests/data/test-read-dwarf/PR26261/Makefile | 21 -- .../data/test-read-dwarf/PR26261/PR26261-exe | Bin 10976 -> 0 bytes .../test-read-dwarf/PR26261/PR26261-exe.abi | 52 ++- .../test-read-dwarf/PR27700/test-PR27700.abi | 8 +- .../test-read-dwarf/PR27700/test-PR27700.o | Bin 3248 -> 0 bytes tests/data/test-read-dwarf/test-PR26568-1.o | Bin 2864 -> 0 bytes .../data/test-read-dwarf/test-PR26568-1.o.abi | 20 +- tests/data/test-read-dwarf/test-PR26568-2.o | Bin 2824 -> 0 bytes .../data/test-read-dwarf/test-PR26568-2.o.abi | 18 +- .../test-read-dwarf/test3-alias-1.so.hash.abi | 6 +- .../test-read-dwarf/test3-alias-2.so.hash.abi | 6 +- .../test-read-dwarf/test3-alias-3.so.hash.abi | 6 +- .../test-read-dwarf/test3-alias-4.so.hash.abi | 2 +- tests/data/test-read-dwarf/test3.c | 11 - tests/data/test-read-dwarf/test3.so | Bin 8851 -> 0 bytes tests/data/test-read-dwarf/test3.so.abi | 6 +- tests/data/test-read-dwarf/test3.so.hash.abi | 6 +- tests/data/test-read-dwarf/test4.c | 14 - tests/data/test-read-dwarf/test4.so | Bin 3364 -> 0 bytes tests/data/test-read-dwarf/test4.so.abi | 12 +- tests/data/test-read-dwarf/test4.so.hash.abi | 12 +- tests/test-annotate.cc | 4 +- tests/test-read-common.cc | 264 +++++++++++++ tests/test-read-common.h | 179 +++++++++ tests/test-read-ctf.cc | 353 +++++++++++++++++ tests/test-read-dwarf.cc | 356 +++++++----------- 102 files changed, 2350 insertions(+), 353 deletions(-) create mode 100755 tests/data/test-read-common/PR26261/PR26261-exe rename tests/data/{test-read-dwarf => test-read-common}/PR26261/PR26261-main.c (100%) rename tests/data/{test-read-dwarf => test-read-common}/PR26261/PR26261-obja.c (100%) rename tests/data/{test-read-dwarf => test-read-common}/PR26261/PR26261-obja.h (100%) rename tests/data/{test-read-dwarf => test-read-common}/PR26261/PR26261-objb.c (100%) rename tests/data/{test-read-dwarf => test-read-common}/PR26261/PR26261-objb.h (100%) rename tests/data/{test-read-dwarf => test-read-common}/PR27700/include-dir/priv.h (100%) rename tests/data/{test-read-dwarf => test-read-common}/PR27700/include-dir/pub.h (100%) rename tests/data/{test-read-dwarf => test-read-common}/PR27700/pub-incdir/inc.h (100%) rename tests/data/{test-read-dwarf => test-read-common}/PR27700/test-PR27700.c (55%) create mode 100644 tests/data/test-read-common/crti.c rename tests/data/{test-read-dwarf => test-read-common}/test-PR26568-1.c (61%) rename tests/data/{test-read-dwarf => test-read-common}/test-PR26568-2.c (56%) rename tests/data/{test-read-dwarf => test-read-common}/test3-alias-1.suppr (100%) rename tests/data/{test-read-dwarf => test-read-common}/test3-alias-2.suppr (100%) rename tests/data/{test-read-dwarf => test-read-common}/test3-alias-3.suppr (100%) rename tests/data/{test-read-dwarf => test-read-common}/test3-alias-4.suppr (100%) create mode 100644 tests/data/test-read-common/test3.c create mode 100755 tests/data/test-read-common/test3.so create mode 100644 tests/data/test-read-common/test4.c create mode 100755 tests/data/test-read-common/test4.so create mode 100644 tests/data/test-read-ctf/PR26261/PR26261-exe.abi create mode 100644 tests/data/test-read-ctf/PR27700/test-PR27700.abi create mode 100644 tests/data/test-read-ctf/test-PR26568-1.o.abi create mode 100644 tests/data/test-read-ctf/test-PR26568-2.o.abi create mode 100644 tests/data/test-read-ctf/test-alias.c create mode 100644 tests/data/test-read-ctf/test-alias.o.abi create mode 100644 tests/data/test-read-ctf/test-ambiguous-struct-A.c create mode 100644 tests/data/test-read-ctf/test-ambiguous-struct-A.o.hash.abi create mode 100644 tests/data/test-read-ctf/test-ambiguous-struct-B.c create mode 100644 tests/data/test-read-ctf/test-ambiguous-struct-B.o.hash.abi create mode 100644 tests/data/test-read-ctf/test-conflicting-type-syms-a.c create mode 100644 tests/data/test-read-ctf/test-conflicting-type-syms-a.o.hash.abi create mode 100644 tests/data/test-read-ctf/test-conflicting-type-syms-b.c create mode 100644 tests/data/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi create mode 100644 tests/data/test-read-ctf/test-dynamic-array.c create mode 100644 tests/data/test-read-ctf/test-dynamic-array.o.abi create mode 100644 tests/data/test-read-ctf/test-enum-many.c create mode 100644 tests/data/test-read-ctf/test-enum-many.o.hash.abi create mode 100644 tests/data/test-read-ctf/test-enum-symbol.c create mode 100644 tests/data/test-read-ctf/test-enum-symbol.o.hash.abi create mode 100644 tests/data/test-read-ctf/test-enum.c create mode 100644 tests/data/test-read-ctf/test-enum.o.abi create mode 100644 tests/data/test-read-ctf/test-struct-iteration.c create mode 100644 tests/data/test-read-ctf/test-struct-iteration.o.abi create mode 100755 tests/data/test-read-ctf/test0 create mode 100644 tests/data/test-read-ctf/test0.abi create mode 100644 tests/data/test-read-ctf/test0.c create mode 100644 tests/data/test-read-ctf/test0.hash.abi create mode 100644 tests/data/test-read-ctf/test1.c create mode 100755 tests/data/test-read-ctf/test1.so create mode 100644 tests/data/test-read-ctf/test1.so.abi create mode 100644 tests/data/test-read-ctf/test1.so.hash.abi create mode 100644 tests/data/test-read-ctf/test2.c create mode 100755 tests/data/test-read-ctf/test2.so create mode 100644 tests/data/test-read-ctf/test2.so.abi create mode 100644 tests/data/test-read-ctf/test2.so.hash.abi create mode 100644 tests/data/test-read-ctf/test3.so.abi create mode 100644 tests/data/test-read-ctf/test3.so.hash.abi create mode 100644 tests/data/test-read-ctf/test4.so.abi create mode 100644 tests/data/test-read-ctf/test4.so.hash.abi create mode 100644 tests/data/test-read-ctf/test5.c create mode 100644 tests/data/test-read-ctf/test5.o.abi create mode 100644 tests/data/test-read-ctf/test6.c create mode 100644 tests/data/test-read-ctf/test6.o.abi create mode 100644 tests/data/test-read-ctf/test7.c create mode 100644 tests/data/test-read-ctf/test7.h create mode 100644 tests/data/test-read-ctf/test7.o.abi create mode 100644 tests/data/test-read-ctf/test8.c create mode 100644 tests/data/test-read-ctf/test8.o.abi create mode 100644 tests/data/test-read-ctf/test9.c create mode 100644 tests/data/test-read-ctf/test9.o.abi delete mode 100644 tests/data/test-read-dwarf/PR26261/Makefile delete mode 100755 tests/data/test-read-dwarf/PR26261/PR26261-exe delete mode 100644 tests/data/test-read-dwarf/PR27700/test-PR27700.o delete mode 100644 tests/data/test-read-dwarf/test-PR26568-1.o delete mode 100644 tests/data/test-read-dwarf/test-PR26568-2.o delete mode 100644 tests/data/test-read-dwarf/test3.c delete mode 100755 tests/data/test-read-dwarf/test3.so delete mode 100644 tests/data/test-read-dwarf/test4.c delete mode 100755 tests/data/test-read-dwarf/test4.so create mode 100644 tests/test-read-common.cc create mode 100644 tests/test-read-common.h create mode 100644 tests/test-read-ctf.cc diff --git a/doc/api/libabigail.doxy b/doc/api/libabigail.doxy index e3136dd8..33f0eb49 100644 --- a/doc/api/libabigail.doxy +++ b/doc/api/libabigail.doxy @@ -683,7 +683,11 @@ WARN_LOGFILE = LIBABIGAIL_OUTPUT/doc/api/doxygen-warnings.txt # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = LIBABIGAIL_INPUT/src LIBABIGAIL_INPUT/include/ +INPUT = LIBABIGAIL_INPUT/src \ + LIBABIGAIL_INPUT/include \ + LIBABIGAIL_INPUT/tests/test-read-common.cc \ + LIBABIGAIL_INPUT/tests/test-read-common.h + # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is diff --git a/tests/Makefile.am b/tests/Makefile.am index e3855aea..17e2d4b4 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -25,6 +25,10 @@ runtestdifffilter \ runtestreaddwarf \ runtestcanonicalizetypes.sh +if CTF_READER +TESTS += runtestreadctf +endif + # rather cheap tests TESTS+= \ runtestabicompat \ @@ -72,7 +76,7 @@ runtestcanonicalizetypes.output.final.txt noinst_PROGRAMS= $(TESTS) testirwalker testdiff2 printdifftree noinst_SCRIPTS = mockfedabipkgdiff -noinst_LTLIBRARIES = libtestutils.la libcatch.la +noinst_LTLIBRARIES = libtestutils.la libtestreadcommon.la libcatch.la libtestutils_la_SOURCES= \ test-utils.h \ @@ -82,15 +86,31 @@ libtestutils_la_CXXFLAGS= \ -DABIGAIL_SRC_DIR=\"${abs_top_srcdir}\" \ -DABIGAIL_BUILD_DIR=\"${abs_top_builddir}\" +libtestreadcommon_la_SOURCES= \ +test-read-common.h \ +test-read-common.cc + +libtestreadcommon_la_CXXFLAGS= \ +-DABIGAIL_SRC_DIR=\"${abs_top_srcdir}\" \ +-DABIGAIL_BUILD_DIR=\"${abs_top_builddir}\" + libcatch_la_SOURCES = lib/catch.cc lib/catch.hpp runtestreadwrite_SOURCES=test-read-write.cc runtestreadwrite_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la runtestreaddwarf_SOURCES=test-read-dwarf.cc -runtestreaddwarf_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la +runtestreaddwarf_LDADD=libtestreadcommon.la libtestutils.la \ + $(top_builddir)/src/libabigail.la runtestreaddwarf_LDFLAGS=-pthread +if CTF_READER +runtestreadctf_SOURCES=test-read-ctf.cc +runtestreadctf_LDADD=libtestreadcommon.la libtestutils.la \ + $(top_builddir)/src/libabigail.la +runtestreadctf_LDFLAGS=-pthread +endif + runtestannotate_SOURCES=test-annotate.cc runtestannotate_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la diff --git a/tests/data/test-annotate/test3.so.abi b/tests/data/test-annotate/test3.so.abi index c4911724..320d886a 100644 --- a/tests/data/test-annotate/test3.so.abi +++ b/tests/data/test-annotate/test3.so.abi @@ -16,9 +16,9 @@ - + - + diff --git a/tests/data/test-annotate/test4.so.abi b/tests/data/test-annotate/test4.so.abi index c3550e35..7913e324 100644 --- a/tests/data/test-annotate/test4.so.abi +++ b/tests/data/test-annotate/test4.so.abi @@ -6,7 +6,7 @@ - + @@ -22,13 +22,13 @@ - + - + - + - + diff --git a/tests/data/test-read-common/PR26261/PR26261-exe b/tests/data/test-read-common/PR26261/PR26261-exe new file mode 100755 index 0000000000000000000000000000000000000000..939e8071509f568b3628fc0ca6c3434a2de62cb6 GIT binary patch literal 19008 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 literal 0 HcmV?d00001 diff --git a/tests/data/test-read-dwarf/PR26261/PR26261-main.c b/tests/data/test-read-common/PR26261/PR26261-main.c similarity index 100% rename from tests/data/test-read-dwarf/PR26261/PR26261-main.c rename to tests/data/test-read-common/PR26261/PR26261-main.c diff --git a/tests/data/test-read-dwarf/PR26261/PR26261-obja.c b/tests/data/test-read-common/PR26261/PR26261-obja.c similarity index 100% rename from tests/data/test-read-dwarf/PR26261/PR26261-obja.c rename to tests/data/test-read-common/PR26261/PR26261-obja.c diff --git a/tests/data/test-read-dwarf/PR26261/PR26261-obja.h b/tests/data/test-read-common/PR26261/PR26261-obja.h similarity index 100% rename from tests/data/test-read-dwarf/PR26261/PR26261-obja.h rename to tests/data/test-read-common/PR26261/PR26261-obja.h diff --git a/tests/data/test-read-dwarf/PR26261/PR26261-objb.c b/tests/data/test-read-common/PR26261/PR26261-objb.c similarity index 100% rename from tests/data/test-read-dwarf/PR26261/PR26261-objb.c rename to tests/data/test-read-common/PR26261/PR26261-objb.c diff --git a/tests/data/test-read-dwarf/PR26261/PR26261-objb.h b/tests/data/test-read-common/PR26261/PR26261-objb.h similarity index 100% rename from tests/data/test-read-dwarf/PR26261/PR26261-objb.h rename to tests/data/test-read-common/PR26261/PR26261-objb.h diff --git a/tests/data/test-read-dwarf/PR27700/include-dir/priv.h b/tests/data/test-read-common/PR27700/include-dir/priv.h similarity index 100% rename from tests/data/test-read-dwarf/PR27700/include-dir/priv.h rename to tests/data/test-read-common/PR27700/include-dir/priv.h diff --git a/tests/data/test-read-dwarf/PR27700/include-dir/pub.h b/tests/data/test-read-common/PR27700/include-dir/pub.h similarity index 100% rename from tests/data/test-read-dwarf/PR27700/include-dir/pub.h rename to tests/data/test-read-common/PR27700/include-dir/pub.h diff --git a/tests/data/test-read-dwarf/PR27700/pub-incdir/inc.h b/tests/data/test-read-common/PR27700/pub-incdir/inc.h similarity index 100% rename from tests/data/test-read-dwarf/PR27700/pub-incdir/inc.h rename to tests/data/test-read-common/PR27700/pub-incdir/inc.h diff --git a/tests/data/test-read-dwarf/PR27700/test-PR27700.c b/tests/data/test-read-common/PR27700/test-PR27700.c similarity index 55% rename from tests/data/test-read-dwarf/PR27700/test-PR27700.c rename to tests/data/test-read-common/PR27700/test-PR27700.c index b44a3226..a16a0bb7 100644 --- a/tests/data/test-read-dwarf/PR27700/test-PR27700.c +++ b/tests/data/test-read-common/PR27700/test-PR27700.c @@ -1,5 +1,7 @@ #include "include-dir/priv.h" +/* gcc -I. -gctf -gdwarf -c -o test-PR27700.o test-PR27700.c */ + void foo(enum foo* c __attribute__((unused))) { diff --git a/tests/data/test-read-common/crti.c b/tests/data/test-read-common/crti.c new file mode 100644 index 00000000..47dc4e47 --- /dev/null +++ b/tests/data/test-read-common/crti.c @@ -0,0 +1,22 @@ +/* + * gcc -c -std=c89 -mtune=generic -march=x86-64 crti.c + * + * NOTE: linking with _old_ crti.o exposes _init and _fini as + * global symbols, the newer versions don't. + * + * 0000000000000000 g F .init 0000000000000000 .hidden _init + * 0000000000000000 g F .fini 0000000000000000 .hidden _fini + * + * So this is a dummy c-runtime object. + * + */ + +void __attribute__((visibility("default"))) +_init(void) +{ +} + +void __attribute__((visibility("default"))) +_fini(void) +{ +} diff --git a/tests/data/test-read-dwarf/test-PR26568-1.c b/tests/data/test-read-common/test-PR26568-1.c similarity index 61% rename from tests/data/test-read-dwarf/test-PR26568-1.c rename to tests/data/test-read-common/test-PR26568-1.c index 6eec3558..a551ac7c 100644 --- a/tests/data/test-read-dwarf/test-PR26568-1.c +++ b/tests/data/test-read-common/test-PR26568-1.c @@ -1,3 +1,6 @@ +/* gcc -std=c89 -gctf -g -mtune=generic -march=x86-64 -c \ + * -o test-PR26568-1.o test-PR26568-1.c */ + struct A { union { struct { diff --git a/tests/data/test-read-dwarf/test-PR26568-2.c b/tests/data/test-read-common/test-PR26568-2.c similarity index 56% rename from tests/data/test-read-dwarf/test-PR26568-2.c rename to tests/data/test-read-common/test-PR26568-2.c index 656e8eea..6a439746 100644 --- a/tests/data/test-read-dwarf/test-PR26568-2.c +++ b/tests/data/test-read-common/test-PR26568-2.c @@ -1,3 +1,6 @@ +/* gcc -std=c89 -gctf -g -mtune=generic -march=x86-64 -c \ + * -o test-PR26568-2.o test-PR26568-2.c */ + union A { struct { int x; diff --git a/tests/data/test-read-dwarf/test3-alias-1.suppr b/tests/data/test-read-common/test3-alias-1.suppr similarity index 100% rename from tests/data/test-read-dwarf/test3-alias-1.suppr rename to tests/data/test-read-common/test3-alias-1.suppr diff --git a/tests/data/test-read-dwarf/test3-alias-2.suppr b/tests/data/test-read-common/test3-alias-2.suppr similarity index 100% rename from tests/data/test-read-dwarf/test3-alias-2.suppr rename to tests/data/test-read-common/test3-alias-2.suppr diff --git a/tests/data/test-read-dwarf/test3-alias-3.suppr b/tests/data/test-read-common/test3-alias-3.suppr similarity index 100% rename from tests/data/test-read-dwarf/test3-alias-3.suppr rename to tests/data/test-read-common/test3-alias-3.suppr diff --git a/tests/data/test-read-dwarf/test3-alias-4.suppr b/tests/data/test-read-common/test3-alias-4.suppr similarity index 100% rename from tests/data/test-read-dwarf/test3-alias-4.suppr rename to tests/data/test-read-common/test3-alias-4.suppr diff --git a/tests/data/test-read-common/test3.c b/tests/data/test-read-common/test3.c new file mode 100644 index 00000000..0d8e7f87 --- /dev/null +++ b/tests/data/test-read-common/test3.c @@ -0,0 +1,26 @@ +/* + * Test file for creating multiple alias for a symbol + * + * NOTE: linking with _old_ crti.o exposes _init and _fini as + * global symbols, the newer versions don't. + * + * 0000000000000000 g F .init 0000000000000000 .hidden _init + * 0000000000000000 g F .fini 0000000000000000 .hidden _fini + * + * This test is looking for those symbols which are not experted. + * So it's linked with dummy crti.o to avoid false positives. + * + * gcc -std=c89 -shared -gctf -g -mtune=generic -march=x86-64 -fPIC \ + * -nostartfiles -Wl,-soname=test3.so.1 -o test3.so test3.c crti.o + * + */ + +void __foo(void); +void foo(void) __attribute__((weak, alias("__foo"))); +void foo__(void) __attribute__((weak, alias("__foo"))); +void __foo__(void) __attribute__((alias("__foo"))); + +void __foo(void) +{ + +} diff --git a/tests/data/test-read-common/test3.so b/tests/data/test-read-common/test3.so new file mode 100755 index 0000000000000000000000000000000000000000..3dfb69e998b5d91dcadc283974557ec294e2c074 GIT binary patch literal 14824 zcmeHOPiz!b7=N?d(n4V={{&K!P7FjK?(DW;!yhZHrKQ9|um+<>GtTbLb~kos$nF$d z5+f&4q9zU6s*L=!~2rAzxTfP zeeb>b%{Om$cfNUld}<!I40*+?a* zdZRYx=tPyzi>X2^$A>JwV;fP`PQMYzy>E0CiREY|p_ zbr#u9Q2buG8&v*{-#PXxn$f^X+{^O`hI5eaW%3J;kNY17OpBV9b^b#>g;s<^7ZqT9 zUaSZ4Aa+z$;2w6+p}>Ccw<>eFVj|d-y@090zd=eJ){-<4Chtwq5o8=+m~9UH9sN zva1AYwq7b*E#Deaf!hiWp*ldLXweL41~dbj0nLDBKr^5j&Gy`j6;QZv(yVu^j z{dZW~5ZYQZpc&8%Xa+O`ngPv#WXV24fR^w~v z@SGBo;day_eP8zYUTWa^>C(OB%Ed0+qCXQGT^@F3H?X(ze)YCuF_9kS~LTi0nLDBKr^5j&Gy|Fe z&46Y=Gw=`t@;kSWdn9RiAGbF$O5X1#vE#g6{8olsKr%APZ+|ZP!0X(`?`p^*elU|r z&hs7a-w>%)k+Fwy7vp~or^d#PnfvLN{{eGg&?;I*bFer#FhIrJ@6KOvoArk41QNjQ>xE6_1OZ_zgvZh6F6Zt-*lZyzU(&|zQ?KIWjfAu!C`l(2g}J`{CNELla_yPt)f4+%J?I!m+MyY``bj7 zn?c?JC=cIYfzo**QVjUbFiYCjcLo+Jjspg2Uw6vnNxS__T9DG>(E2y0TC z@#d_W)2b<}vfzPErz$< z_I@q`=5spnWHVJDlNVEa8Qc1ZdkCq1qqnO~V~$e5g8*3VYz zELAY3_{%;ah^r(n!n^43pKsj%H8biFoEJmJ4DLS|u 0) + *t1++ = *t2++; + return s1; +} diff --git a/tests/data/test-read-common/test4.so b/tests/data/test-read-common/test4.so new file mode 100755 index 0000000000000000000000000000000000000000..0394bf5cc4404c29b1627258d9b11319035bd671 GIT binary patch literal 16560 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 Ww9?1oO`$gaIeKwITIB=ySn+Q+OAa^y literal 0 HcmV?d00001 diff --git a/tests/data/test-read-ctf/PR26261/PR26261-exe.abi b/tests/data/test-read-ctf/PR26261/PR26261-exe.abi new file mode 100644 index 00000000..cb2e2f13 --- /dev/null +++ b/tests/data/test-read-ctf/PR26261/PR26261-exe.abi @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/PR27700/test-PR27700.abi b/tests/data/test-read-ctf/PR27700/test-PR27700.abi new file mode 100644 index 00000000..62df1017 --- /dev/null +++ b/tests/data/test-read-ctf/PR27700/test-PR27700.abi @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-PR26568-1.o.abi b/tests/data/test-read-ctf/test-PR26568-1.o.abi new file mode 100644 index 00000000..d62474ec --- /dev/null +++ b/tests/data/test-read-ctf/test-PR26568-1.o.abi @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-PR26568-2.o.abi b/tests/data/test-read-ctf/test-PR26568-2.o.abi new file mode 100644 index 00000000..a934d15b --- /dev/null +++ b/tests/data/test-read-ctf/test-PR26568-2.o.abi @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-alias.c b/tests/data/test-read-ctf/test-alias.c new file mode 100644 index 00000000..1b497a18 --- /dev/null +++ b/tests/data/test-read-ctf/test-alias.c @@ -0,0 +1,15 @@ + +// function aliases + +void main_func(void); +void alias_func(void) __attribute__((weak, alias("main_func"))); + +void main_func(void) +{ + +} + +// variables aliases + +int main_var; +extern int alias_var __attribute__((weak, alias("main_var"))); diff --git a/tests/data/test-read-ctf/test-alias.o.abi b/tests/data/test-read-ctf/test-alias.o.abi new file mode 100644 index 00000000..1fe61b8f --- /dev/null +++ b/tests/data/test-read-ctf/test-alias.o.abi @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-ambiguous-struct-A.c b/tests/data/test-read-ctf/test-ambiguous-struct-A.c new file mode 100644 index 00000000..67047c44 --- /dev/null +++ b/tests/data/test-read-ctf/test-ambiguous-struct-A.c @@ -0,0 +1,8 @@ +struct A; +struct B { struct A *a; }; +struct A { struct B b; long foo; long bar; struct B b2; }; + +typedef struct A a_array[50]; +a_array *foo __attribute__((__used__)); + +static struct A a __attribute ((__used__)); diff --git a/tests/data/test-read-ctf/test-ambiguous-struct-A.o.hash.abi b/tests/data/test-read-ctf/test-ambiguous-struct-A.o.hash.abi new file mode 100644 index 00000000..922a1daf --- /dev/null +++ b/tests/data/test-read-ctf/test-ambiguous-struct-A.o.hash.abi @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-ambiguous-struct-B.c b/tests/data/test-read-ctf/test-ambiguous-struct-B.c new file mode 100644 index 00000000..95a93469 --- /dev/null +++ b/tests/data/test-read-ctf/test-ambiguous-struct-B.c @@ -0,0 +1,5 @@ +struct A; +struct B { struct A *a; }; +struct A { struct B b; int foo; struct B b2; }; + +static struct A a __attribute__((__used__)); diff --git a/tests/data/test-read-ctf/test-ambiguous-struct-B.o.hash.abi b/tests/data/test-read-ctf/test-ambiguous-struct-B.o.hash.abi new file mode 100644 index 00000000..28291eb5 --- /dev/null +++ b/tests/data/test-read-ctf/test-ambiguous-struct-B.o.hash.abi @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-conflicting-type-syms-a.c b/tests/data/test-read-ctf/test-conflicting-type-syms-a.c new file mode 100644 index 00000000..65414877 --- /dev/null +++ b/tests/data/test-read-ctf/test-conflicting-type-syms-a.c @@ -0,0 +1,5 @@ +typedef long a_t; +typedef long b_t; + +a_t *a; +b_t ignore2; diff --git a/tests/data/test-read-ctf/test-conflicting-type-syms-a.o.hash.abi b/tests/data/test-read-ctf/test-conflicting-type-syms-a.o.hash.abi new file mode 100644 index 00000000..03dd56b3 --- /dev/null +++ b/tests/data/test-read-ctf/test-conflicting-type-syms-a.o.hash.abi @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-conflicting-type-syms-b.c b/tests/data/test-read-ctf/test-conflicting-type-syms-b.c new file mode 100644 index 00000000..e458021e --- /dev/null +++ b/tests/data/test-read-ctf/test-conflicting-type-syms-b.c @@ -0,0 +1,5 @@ +typedef long a_t; +typedef long b_t; + +a_t b; +b_t ignore1; diff --git a/tests/data/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi b/tests/data/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi new file mode 100644 index 00000000..35bcac7a --- /dev/null +++ b/tests/data/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-dynamic-array.c b/tests/data/test-read-ctf/test-dynamic-array.c new file mode 100644 index 00000000..77a9b5a1 --- /dev/null +++ b/tests/data/test-read-ctf/test-dynamic-array.c @@ -0,0 +1,13 @@ +// test dynamic arrays definitions +// information was detected f field. + +struct S +{ + char *a; + char b[0]; + char c[]; +}; + +void use_struct_s(struct S *) +{ +} diff --git a/tests/data/test-read-ctf/test-dynamic-array.o.abi b/tests/data/test-read-ctf/test-dynamic-array.o.abi new file mode 100644 index 00000000..02b22811 --- /dev/null +++ b/tests/data/test-read-ctf/test-dynamic-array.o.abi @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-enum-many.c b/tests/data/test-read-ctf/test-enum-many.c new file mode 100644 index 00000000..f2297d72 --- /dev/null +++ b/tests/data/test-read-ctf/test-enum-many.c @@ -0,0 +1,10 @@ +/* Looked up item by item. */ +enum e { ENUMSAMPLE_1 = 0, ENUMSAMPLE_2 = 1 }; + +/* Looked up via both sorts of iterator in turn. */ +enum ie { IE_0 = -10, IE_1, IE_2, IE_3, IE_4, IE_5, IE_6, IE_7, IE_8, IE_9, IE_A, IE_B, IE_C, IE_D, IE_E, IE_F, + IE_10, IE_11, IE_12, IE_13, IE_14, IE_15, IE_16, IE_17, IE_18, IE_19, IE_1A, IE_1B, IE_1C, IE_1D, IE_1E, IE_1F, + IE_20, IE_21, IE_22, IE_23, IE_24, IE_25, IE_26, IE_27, IE_28, IE_29, IE_2A, IE_2B, IE_2C, IE_2D, IE_2E, IE_2F}; + +enum e foo; +enum ie bar; diff --git a/tests/data/test-read-ctf/test-enum-many.o.hash.abi b/tests/data/test-read-ctf/test-enum-many.o.hash.abi new file mode 100644 index 00000000..26bc048c --- /dev/null +++ b/tests/data/test-read-ctf/test-enum-many.o.hash.abi @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-enum-symbol.c b/tests/data/test-read-ctf/test-enum-symbol.c new file mode 100644 index 00000000..f7f99c67 --- /dev/null +++ b/tests/data/test-read-ctf/test-enum-symbol.c @@ -0,0 +1 @@ +enum {red1, green1, blue1} primary1; diff --git a/tests/data/test-read-ctf/test-enum-symbol.o.hash.abi b/tests/data/test-read-ctf/test-enum-symbol.o.hash.abi new file mode 100644 index 00000000..d128b5b1 --- /dev/null +++ b/tests/data/test-read-ctf/test-enum-symbol.o.hash.abi @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-enum.c b/tests/data/test-read-ctf/test-enum.c new file mode 100644 index 00000000..aa60d727 --- /dev/null +++ b/tests/data/test-read-ctf/test-enum.c @@ -0,0 +1,8 @@ +/* Looked up item by item. */ +enum e { ENUMSAMPLE_1 = 0, ENUMSAMPLE_2 = 1 }; + +/* Looked up via both sorts of iterator in turn. */ +enum ie { IENUMSAMPLE_1 = -10, IENUMSAMPLE_2, IENUMSAMPLE_3 }; + +enum e foo; +enum ie bar; diff --git a/tests/data/test-read-ctf/test-enum.o.abi b/tests/data/test-read-ctf/test-enum.o.abi new file mode 100644 index 00000000..88e6ad61 --- /dev/null +++ b/tests/data/test-read-ctf/test-enum.o.abi @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-struct-iteration.c b/tests/data/test-read-ctf/test-struct-iteration.c new file mode 100644 index 00000000..7df67ada --- /dev/null +++ b/tests/data/test-read-ctf/test-struct-iteration.c @@ -0,0 +1,28 @@ +#include + +struct foo_t +{ + int foo; + size_t bar; + const char *baz; + struct foo_t *self; + union + { + double should_not_appear; + char *nor_should_this; + } named; + struct + { + long unnamed_sub_member; + union + { + double one_more_level; + long yes_really_one_more; + }; + }; + struct {}; /* Empty ones */ + union {}; + int after_the_end; +}; + +struct foo_t used; diff --git a/tests/data/test-read-ctf/test-struct-iteration.o.abi b/tests/data/test-read-ctf/test-struct-iteration.o.abi new file mode 100644 index 00000000..72e0bdc3 --- /dev/null +++ b/tests/data/test-read-ctf/test-struct-iteration.o.abi @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test0 b/tests/data/test-read-ctf/test0 new file mode 100755 index 0000000000000000000000000000000000000000..aca7fbacdfff7ad2caf0142390710373a8da72a1 GIT binary patch literal 16656 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 t{@1}Z%f8UHspp0J?*zX1~oQd|H4 literal 0 HcmV?d00001 diff --git a/tests/data/test-read-ctf/test0.abi b/tests/data/test-read-ctf/test0.abi new file mode 100644 index 00000000..50ca26f4 --- /dev/null +++ b/tests/data/test-read-ctf/test0.abi @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test0.c b/tests/data/test-read-ctf/test0.c new file mode 100644 index 00000000..eb702312 --- /dev/null +++ b/tests/data/test-read-ctf/test0.c @@ -0,0 +1,32 @@ + +#include + +char* test_pointer = NULL; +int test_array[10] = {0}; +volatile short test_volatile = 1; +float test_float = 0.0; + +struct { + unsigned int status0 : 1; + unsigned int status1 : 1; +} status; + + +struct S +{ + int m0; +}; + +const struct S test_const; +long* restrict test_restrict; + +int +foo_1(struct S* s) +{ + return s->m0; +} + +int main() +{ + +} diff --git a/tests/data/test-read-ctf/test0.hash.abi b/tests/data/test-read-ctf/test0.hash.abi new file mode 100644 index 00000000..b58520ab --- /dev/null +++ b/tests/data/test-read-ctf/test0.hash.abi @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test1.c b/tests/data/test-read-ctf/test1.c new file mode 100644 index 00000000..3a5bac49 --- /dev/null +++ b/tests/data/test-read-ctf/test1.c @@ -0,0 +1,25 @@ +enum opaque_enum; +struct opaque_struct; + +typedef enum opaque_enum opaque_enum; +typedef struct opaque_struct opaque_struct; + +void +fn(opaque_struct *, opaque_enum *e); + +enum opaque_enum +{ + e0, + e1 +}; + +struct opaque_struct +{ + opaque_enum m0; +}; + +void +fn(opaque_struct * s, opaque_enum *e) +{ + s->m0 = *e; +} diff --git a/tests/data/test-read-ctf/test1.so b/tests/data/test-read-ctf/test1.so new file mode 100755 index 0000000000000000000000000000000000000000..df5ef8d38fa53081007cab96424e3d60b512751f GIT binary patch literal 15592 zcmeHOZEPGz8J@euiD?_#r38Y5+HI9eNtEoJT~Y#-nsXdGmtU{|dmTJ7DfeTVMD z-0h`yMMY@we0FMPI-N=>!VdMY+N6}q8NtB^sUf`MY7qDRYE>vi~%VcI*C7LDnU%Su(eA^i~)|m_wct2NgTJ^1zFaO6tWL*#p@>C zhQYK;Lrv^*#x7^MJGW!3{l4Wg&}$*@iz2{(ZQT zFb~Fi)$Qv1osnce6+CaT)~I`}&~JvGr@S+BvtB7^28)$e7&PZ*C##KmFy|MlK_u%h z@ruj7w@|73)ygx0TBxgPrBHNR4fjEHdgjc@NpIX8caI@vO8=#Ck3i@rQDlF$M=S4< ztQU-&!X^0fz)fL&bZR3!0^ci!(2 z$k+21pIuksU7EbS_v>2v^X}U3QdfR_!?<` z8?=1;bJn}v9B>x641E60ZudE0f%ip7rJgybQp+Q${dephyn+vmV*4Rnul%9g)!#OU zMy7}MJu-az(}T~c6Qd6ue&B%qOe^-Ma9xKUzgdFRwx0z48Di>hwG%@lUrbN#+4Teh zh=K*10hT>jP@HFEBImEV>El=t?cnoX>Kd8^wHdDhU}tK2cP*`utUH1utv45&v4 zJB1_IXK-&1Y%XH#HvBIc0qb$i@Ue+k1MTreSl6d)^zk8B)65fo=4$#0BmcXhdvT4w z{}$pt_GCQnCq6wn`7!6<>9g~PoUw5?>t>zt?D*IiF6Usdyc9GmwV)pQ)k8@K30m5} zQ@zRaH}WgWqr8{k_}h zXSd-$0{(q{{HtO!Y=!NG1-Ga+x9xjj%`3{r{g(2)Qo~!UHVS^#D}{|_%k$gIs@SM4 zRf8}nx!L|2vYEf)`OT)k;$a{+SJXn&uLWMIU8}9YBu07A47aF;K`R_Xg*} zKRz|*%}tz~nSw(J{EjCUa1f#2`G$9Kh9MU}w(!Sa?Ud(E1NvbL$cs0AeFO9|E_ngY z;7X(4L@p1UfE>^eA0h)Bma6qS*!;or&15qg+`^Ml-pXV zg?<4zY(}`u(qg^smi<;)xuuml)FK=o(e}1h}M6gCE9#It}Lb-)jOSyP*co*}+w6d6C+{!c(IZQ^s-n-|Rd@Bw2_B(dV~eGqYb$Jh}krkSLBF6JZPzq*{V3ZqIp|nCn2gNVY#(S8V2AIY!gq12i-^Y5#ff zB|iJ_pc5$)e0$z?# I@1C^(7v)NDpa1{> literal 0 HcmV?d00001 diff --git a/tests/data/test-read-ctf/test1.so.abi b/tests/data/test-read-ctf/test1.so.abi new file mode 100644 index 00000000..5b3caf63 --- /dev/null +++ b/tests/data/test-read-ctf/test1.so.abi @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test1.so.hash.abi b/tests/data/test-read-ctf/test1.so.hash.abi new file mode 100644 index 00000000..8019cb54 --- /dev/null +++ b/tests/data/test-read-ctf/test1.so.hash.abi @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test2.c b/tests/data/test-read-ctf/test2.c new file mode 100644 index 00000000..b04490a8 --- /dev/null +++ b/tests/data/test-read-ctf/test2.c @@ -0,0 +1,19 @@ +struct S0 +{ + void* m0; +}; + +typedef const void* POINTER; + +struct S1 +{ + POINTER m0; +}; + +void foo(struct S0* a __attribute__((unused))) +{ +} + +void bar(struct S1* a __attribute__((unused))) +{ +} diff --git a/tests/data/test-read-ctf/test2.so b/tests/data/test-read-ctf/test2.so new file mode 100755 index 0000000000000000000000000000000000000000..d9c07517527553d99951c2129da2f2ae6c1bce03 GIT binary patch literal 15616 zcmeHOZD<_F8J;^^u@WaIxrtL(F3H9uV4HaFq{OLPLwu5a@;Q-YN0y->HJiP=mF~iw zR_v}^Db%#oZLu(J{ilEW0r^!7{SiVS7z)LSi`_yBO8@i&N+g9X z%0IjkW#gst+23_vZ8tRD|0q&j>lE8tzR>koj$JIRme140 z^g`D)R(-v+8r@5EFDUy8*;mNEQa*cTMMSqs@xu0>OY5KGr8hGd|8P}TYf&BF|4g;p zeO7UnJxk^1S2vXxUnoESk3;3mQu!s$tZTlHa&A|_%jCUGmSxJhETTS{^ZZFtU84+^ zbh;k@Nv3|U=Z=p!ea~}UTgcG!+!X?3ZVy$qM1T7;I6cI_#{A;-<@Y~{Vk`Maz-im--bgV?XOoE#q&&J}qNkEB{T&1@`t{Q@u&`gHK|g z?FB8%J>{&>n^k$AE0=F-`%Ov|p{Cd$yhF?FJ+4Ki;JwjYE@=bWaY?BKZPJwm@$^Ml zw&$Gorw_qW22S+ntCS;c|4_^Ayt=;s6~R9CbUy4CJ~BM~4Quz2@soS3{sFsS7p#H8 zKz~17)^2Zp)(aXfZzgh^d(su8WbXfF@lKpl%lVR}{n`hx@mV|Mh_e1CDg9kqkNJoC zzD7(&Y!_BhX@K{z)b|R^CuJ4l31YZ@%xCCNOaGqserxD|N=&ErZ`7|}%6f9*_ZDhc zqn+ycHJP)72A&gmKSNB0{?`TL0sU{Kew#>--*xFgPn`u%MgK;G>j6Hnz9IFu3Q>ec z(T|B_`Ke3cpQR34>s_UE2kATQyWh2ef4}xm@5kT2f&Vem@9L0ORD&pt=BB3Xs#x2$ z??f%9${Y7X+TUOEo$01uahpyp@`KQE=jKJ#Z_PHn$gA0f&K|s(zu~w+;4U~c!Gi@c z6}TMIO-f5897m!bS4LfMoUy7C;r?M3w#J6b-;no zCdfk$U*I4^F?np^-Iq7>Ln#Xl#=639#pHFFWIl<(Z%2N^K1>(I^s&z)baCM~-lXK@ z!4c+AZ7!?yd>=^gIez=|6HR3=zv;*6O4o}wKACcOdy~)YTo30@lpGSmj$a3nulp@8 zUs{HobfpRP%J6!>u%?-9|IdLmcL7ZsbaKU*Ng5ebs16N<8+*j~yMKEKP_L z1#zNZv3;;hYPL9tq_d@MeE?EXXfm>8`gzgTbLm?MWaC2Y&q=(VZ)zUCpcsa zyr#ypO^5*F-=bY`;^@Oe0CB)3d|xd}5-h1epIGdnbkQNVZ2AjHU%$Eq)&{f>;Oe`r)7S8;UTj13-6g5UIUr-*0cz<)>Go^2d>Yw?c&u~UR68Pny8n-no%_^&>hOD^>6djp2*wTav&1Ch zEgc7n>fjF<)J??~v;h?DMLc9sUI!%eV;ur|kd29w62&aplJWTc2F3aiRiyi`)*Ea1 z3rl-y%HL*^B_00*GID;5U%^t|pubRJ`;LA?@nd3mj$wSUF2^~-v_E9fpHXa2A|C6k z12!qCz)wkQGW5S91J51g$9e|mEuYeWqu+?b_KVpLE@OzmiHRV@i~X1e*gdg literal 0 HcmV?d00001 diff --git a/tests/data/test-read-ctf/test2.so.abi b/tests/data/test-read-ctf/test2.so.abi new file mode 100644 index 00000000..eb6aff3e --- /dev/null +++ b/tests/data/test-read-ctf/test2.so.abi @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test2.so.hash.abi b/tests/data/test-read-ctf/test2.so.hash.abi new file mode 100644 index 00000000..6e57333b --- /dev/null +++ b/tests/data/test-read-ctf/test2.so.hash.abi @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test3.so.abi b/tests/data/test-read-ctf/test3.so.abi new file mode 100644 index 00000000..9d55fec5 --- /dev/null +++ b/tests/data/test-read-ctf/test3.so.abi @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test3.so.hash.abi b/tests/data/test-read-ctf/test3.so.hash.abi new file mode 100644 index 00000000..9d55fec5 --- /dev/null +++ b/tests/data/test-read-ctf/test3.so.hash.abi @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test4.so.abi b/tests/data/test-read-ctf/test4.so.abi new file mode 100644 index 00000000..b8e0ead3 --- /dev/null +++ b/tests/data/test-read-ctf/test4.so.abi @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test4.so.hash.abi b/tests/data/test-read-ctf/test4.so.hash.abi new file mode 100644 index 00000000..dbe34d9c --- /dev/null +++ b/tests/data/test-read-ctf/test4.so.hash.abi @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test5.c b/tests/data/test-read-ctf/test5.c new file mode 100644 index 00000000..24ee3cab --- /dev/null +++ b/tests/data/test-read-ctf/test5.c @@ -0,0 +1,41 @@ +// test function declaration passing const volatile modifier. +long +foo(char* c, const volatile long l); + +long +foo(char* c, const volatile long l) +{return *c + l;} + +// test function declaration passing variable arguments. +void +bar(const int c, ...) +{} + +void +baz(int c) +{c = 0;} + +// test function declaration passing an enum type argument. +enum E {e0, e1}; + +void +bar2(enum E e) +{int c = e; ++c;} + +// test function declaration passing a typedef argument. +typedef long long long_long; + +long_long +baz2(int c) +{c = 0; return c;} + +typedef const volatile unsigned long long useless_long_long; + +static useless_long_long +this_should_not_be_seen_by_bidw() +{ + int i = 0; + bar(0); + baz2(i); + return 0; +} diff --git a/tests/data/test-read-ctf/test5.o.abi b/tests/data/test-read-ctf/test5.o.abi new file mode 100644 index 00000000..eb30cf6a --- /dev/null +++ b/tests/data/test-read-ctf/test5.o.abi @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test6.c b/tests/data/test-read-ctf/test6.c new file mode 100644 index 00000000..706c34c0 --- /dev/null +++ b/tests/data/test-read-ctf/test6.c @@ -0,0 +1,35 @@ +struct b0 +{ + long long m0; + char m1; +}; + +struct b1 +{ + double m0; + char m1; +}; + +struct s0; + +typedef int integer; +typedef unsigned char byte; +typedef integer (*mem_fun)(struct s0 *); + +struct s0 +{ + + struct b0 b0; + struct b1 b1; + + integer m0; + byte m1; + mem_fun f; +}; + +integer +fun(struct s0 *s0) +{ + s0->f = fun; + return s0->m0 + s0->m1; +} diff --git a/tests/data/test-read-ctf/test6.o.abi b/tests/data/test-read-ctf/test6.o.abi new file mode 100644 index 00000000..e69de29b diff --git a/tests/data/test-read-ctf/test7.c b/tests/data/test-read-ctf/test7.c new file mode 100644 index 00000000..b9097987 --- /dev/null +++ b/tests/data/test-read-ctf/test7.c @@ -0,0 +1,8 @@ +#include "test7.h" + +void first_type_constructor(struct first_type *ft) +{ + ft->member0 = 0; + ft->member1 = 0; + ft->ctor = first_type_constructor; +} diff --git a/tests/data/test-read-ctf/test7.h b/tests/data/test-read-ctf/test7.h new file mode 100644 index 00000000..1995736d --- /dev/null +++ b/tests/data/test-read-ctf/test7.h @@ -0,0 +1,24 @@ +#include + +typedef int integer; +typedef unsigned char character; +struct first_type; + +void +first_type_constructor(struct first_type *ft); + +typedef void (*constructor)(); + +struct first_type +{ + integer member0; + character member1; + constructor ctor; +}; + +struct second_type +{ + integer member0; + character member1; + constructor ctor; +}; diff --git a/tests/data/test-read-ctf/test7.o.abi b/tests/data/test-read-ctf/test7.o.abi new file mode 100644 index 00000000..b744fac5 --- /dev/null +++ b/tests/data/test-read-ctf/test7.o.abi @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test8.c b/tests/data/test-read-ctf/test8.c new file mode 100644 index 00000000..67580f9a --- /dev/null +++ b/tests/data/test-read-ctf/test8.c @@ -0,0 +1,7 @@ +// Test generic pointer type passed as argument in function. +// Compile this by doing gcc -gctf -Wall -c test8.cc + +void +bar(void*) +{ +} diff --git a/tests/data/test-read-ctf/test8.o.abi b/tests/data/test-read-ctf/test8.o.abi new file mode 100644 index 00000000..68b3af06 --- /dev/null +++ b/tests/data/test-read-ctf/test8.o.abi @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test9.c b/tests/data/test-read-ctf/test9.c new file mode 100644 index 00000000..c4ee0f38 --- /dev/null +++ b/tests/data/test-read-ctf/test9.c @@ -0,0 +1,14 @@ +// test arrays type definitions +struct S +{ + int a[5]; + char *b[7]; + double c[5][3]; + int *(*d[10])[4]; + char e[1]; +}; + +int foo(struct S*) +{ +} + diff --git a/tests/data/test-read-ctf/test9.o.abi b/tests/data/test-read-ctf/test9.o.abi new file mode 100644 index 00000000..746dd77b --- /dev/null +++ b/tests/data/test-read-ctf/test9.o.abi @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-dwarf/PR26261/Makefile b/tests/data/test-read-dwarf/PR26261/Makefile deleted file mode 100644 index f66fa38a..00000000 --- a/tests/data/test-read-dwarf/PR26261/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -SRCS = PR26261-obja.c PR26261-objb.c PR26261-main.c -EXE = PR26261-exe -OBJS = $(SRCS:.c=.o) -CFLAGS = -Wall -g - -all: $(EXE) - -%.o: %.c - $(CC) $(CFLAGS) -c $< - -$(EXE): $(OBJS) - gcc -fPIC $(OBJS) -o $@ - -cleanobjs: - rm -rf $(OBJS) - -cleanexe: - rm $(EXE) - -clean: cleanobjs - rm -rf *~ diff --git a/tests/data/test-read-dwarf/PR26261/PR26261-exe b/tests/data/test-read-dwarf/PR26261/PR26261-exe deleted file mode 100755 index 564a4247643942bbfd91c0e75653dffe80ce5851..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10976 zcmeHNeQX@X6`$Sp$2pGAmk+=pK#q_IL*ujKd|*Id-w#hi*!Q;T0ZRFysgclE0Z|D%68-)_NpEL@pVm zN3ll2k_7CP2*WE>98m>Xk4VyMR(j1!kKu$0j3LjD=0;bKve%=VpolgJhz+uzfh0?9 z%LzA0xJgbWG|OPOq=aC|dY^%wQc)5g4I*lItMYfgyqr<!7FI))6es7iaCy3p##Sg_Q;oe6qqR|6LDEeTk5Ai`^tnZSe80Rk zb~~3hTjfxBBENXjo&ZmMaJ$vg z24Ia%g{|U=d-R>hj*tTi?Cj2GXlQz}amild9U+S4k4_now~D{9j=p`XrA=5bO%P7C@i|Zb4W++#-GlW}Aqw-hL-XWU5y;Nxs&imz?;WH0S!3%yR|f(2s!|9G zw?7jNBf8>=>4}}Ez5bkZf4R`=)jt3t(fXBg8Kj&K9?yvBvJ35^iMQrZfAt zpSAWSriw2XU!9(K-cuSoZ5Ho)!73KUk0&M(H#J>YToCnl}p z@sl}3W9?5&5Izcg-}Z@pnG+*p#dGoP zUBy4fd%E{8w?a{*cz+AQZQa+MSotUG=m!Svn3KQ#0Dc~P*S(5ubQj<5E}q)}8`BG4 zx5kcX){XBJ-lmQ8g`M#)#&^c=irdEy%=ml{`%CUUwbit;U5vfE*tnVQMReag0B45) z#{p@_J@Mi6^f=&CfRlhn0co?J28;sI#7#ijmtUtHiAMJYYTCV9g|<7QEuLE&I-u1? zh)>UgEwFt(38+?CUWjEFC;2n)PfxdzY&fzp+;n?m{XL<*;?~P=zJArRrNkx~Y-@1> zcIOZy9*#VuuWzVHz%fV~PvZLhM~u_z`~u^j0xand%;^6B>}N54w|`v!vJ@cS&*ExE zPEs`98IF8IPlTHuF%seE{;EW{`Qd6S-1bn7748_T-4r&5!yWN(TRhy{8IE>_n;_pA z4#~XDMGm*Xj{m+vCNH*&8Mv5%iy63>fr}aVxD1R}nNs921zBD_o=dgrTs82x;mJ2B zdRdJ}FH$t0uNEtso~hI>_kd_ZrACdOv($L}A0JLFAsfn5YW&QUwE}3aE7WmPTqdQ2*sc6CzgN*5H~YgOKsKiF zSeElKl{`uwNoz{(jG{Z#xMF|efX}f(M{lV(&iUfGZTxiw1wzsWZ z)3&yKRkV3)DjBsL*WRRrRH6=p?IN!4p)Goi(jMnyzps(7DuDaBTnyTt_#`SiMZjfB< zwzz20tM>y9jjR-UEeQi{7ka3Lu+YdVq1VxAI3nt3o?2DVwRZR^@aN<)M2LQH2=04< zi6?PYiHFgv=qG_v^uaW315ZCroj-cwR?l>w2gy^Y)oT66A@Po)7@F!}nsWf!@n`0>;5#-QRGz zBx%Gr_~iZJJPcpi3u*n}mT(@HucAG!A2cz;y(AQpbJFH%%fk!mjqu{|JZ*k$1a~t1 zQelK|s=v9uYXQU>MZH9-F43-Cq=8diEoh)-83t~tH}LzaU7#7E`g&3!flvdCd-@%? z(bmPZTNil-uU$kw%%*R3N=tL9OM-e6&FlXWiwY}@ILgDSD-UbVdBdvzB*H3>C77a_ zpeuy+O)p!4u;%*X?^@s`R*5!X25JQxW1=XNWjhQ=M;4myYQ=3|yeezF8*wVkMJ&?@%Ul@S}?^^yiO~-owo@ z>3Al6Gx0g$-=win3te4!ul+=5@U6n#Pd^>HWrv)|K*k<*bGEx@G-W&OwkygQpz(l< zuK)NaT(o7xEo4&b22+_-F5M5($@LGd^In8TTLwkzPLvp>YO|tzo#?H|pHr&u{7wv1lU(PP^XH0* zigp_Cd@=o^5;sIxaDD6_G(@9lQ+0DWKZ5T7rk^EoL(CHgD)Q%-zH9iE46&e8XP5IA z3VKr-YzC_3N_C+jE*1Pf+pl9#bsVW=r%5zd! z+077F&1QmQh$XZ58aP$rZ_~j6I`?Qe9R%}6=N(-%h_=AGQ{=?&4e(=%A3SGmkoITt zLvc{shD)okj`xC3_QwPEACmI3_rnjtuQacporjOtzZK=rm!FrV-+5xP)&w@wCV^JU z8%b1(=QIuAOAen8C5i3>Tv~4t83VsCq;C}9wc4q(HcSwH2tW!sy!c^eyVY$`3U&rHyF=%z>oS3 zDE!CZ&(j-4N8rBk6!CrcpDHE)9Qc$6`V2%(zMBS|!W9vV1bx==w?~zH@V@s7_#_|9 z&l^fUSo!`%@wrss<05^3oQF~;=yyWOSGYg-=iIzo7#P4K(6(=1zt!&U+SX&+BALpi z2Ge;rg%V)I?jO!(Qh7)uv-aR{w$B;1lWsPbx1GXn(Vra|9ZtEaWNhuKHESvh*#qfJ z+IDg|XOErAxVb%IAm@yv>||kNWDit)lnqI@Oq8F$suc5)^yFqzJ)LcPla5lXf~OVnhu&`5_TY?#aNO2i=@Ea(611PiHe_gpILW zYSLnn<;$BPce>s`G4O3GfvMx z{6z7L@*3BT{J)Rj6P#rI?HUlZxLBX-Oa5O))GrL2?_bPb3B<3@b*QThE@MFjgZdl5 zKZkd7?EjE%O36ct!SPp1F1;EkZ*;oH5xEpU*R@BKzNN%#0BP>5-=z3=0vfp3zc5U1 zgqUa@9w_y}{N05Sde_MMTqk!Zeez3<<7YXBU&0u@yJXr_{!OJHC1tc={2o^bs!u4V ztlz8jdzC)Vll=$h|A5l(R0jF|>u#mb?`ugPRp_kzJpvx(gy+e1{NqYLSaAl|zZlTx zdVeC|A7Zja0`O7Le*dNCqjI#A6BE!=r1*9~pU)4=)P(9-P{CmQk12h2!{>}PrO)xQ z8O}e`j|cS48dDCLO23;06%6|SIrubx_Rr^*14_S#27N8)e;i|Y(<6TaB*yg}|6eI6 z&osjqpwsBn=X$bf^qFU}!-5>oJeYW>!AT(9h=W`YRpN#4kYAPM2 zcz9jj!kFJbpTDMPQfM5fN6pa8e+L78{n9y2IcR1@1zC^b*?>ORo6Sl;xZY|yC9D4i zMz(nVTnDbWKz%xZkJ((ekO4C&oBgpalhye<^O=6>C + - - @@ -16,18 +14,18 @@ - + - - - - + + + + - - - + + + @@ -36,44 +34,44 @@ - + - - - + + + - + - + - + - - + + - + - - + + - + - + - - + + diff --git a/tests/data/test-read-dwarf/PR27700/test-PR27700.abi b/tests/data/test-read-dwarf/PR27700/test-PR27700.abi index e593f79f..fff6ff74 100644 --- a/tests/data/test-read-dwarf/PR27700/test-PR27700.abi +++ b/tests/data/test-read-dwarf/PR27700/test-PR27700.abi @@ -1,15 +1,15 @@ - + - + - - + + diff --git a/tests/data/test-read-dwarf/PR27700/test-PR27700.o b/tests/data/test-read-dwarf/PR27700/test-PR27700.o deleted file mode 100644 index 3f084d2132f0f43a683769ea91e9733fc599700a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3248 zcmb_e&2Jl35TCbe$1dAAAFfJ6in1V}DZ*s*VTGc zLJ^`85>f>cL2!d365@u0#6N(zapR7-AaUhZi37~+&T}@e8x;Yg_|433X5P%3_py2Z zxfeDJAwZFUH8|1~3h-^=NN&Vp1I|Dh_O@>Qwsq^h+lO!b@Cm|s5Jj>YG~7=^nyi#! zc7{VJzc3?a3)A-km^on<*DTB0F0WWmSx;J`43K*WENjg&OSlwAJUwR? z6WfJ33TvFZF-Kk#c~FM!vT+WeFoj{;Xo1J507?yUA7Y6HRqPmG;br7`^u2^!2=QlW zk{GQKe<&;@lc8>)JY}MgB9RwxYV2|L1H;6a{b1yG1L@g*5W(h4d-i&L*{;`}np3lv zYD;zcvln;KVatu!P^n$CD}!i1kgHu8$k1=2>W1y!>cN%EmCKLYl`dfWoAOe^Y6+_+ zYzeBp;Xqcsq4%a=?fOx*@3-8R-*x?db!T^JdAU}rMsgI5s-7FUu~-SE>s7qB-LRuv zfLto<@3jA?N&TSR-}hw2^Fuv>mhW2VUw3){o9pW<_9Axf;y-8`@5UMC;>IqBgK05; zx==jCEj*7n{fOc-aJ4l3p|L(Wv4IW=oH^17$iW|fWf^gkvtTg!Wflnhco9fT_-f4SHZwZmw zgL_a;uUgGaIIT|UvnUf0PQMLOkj^G-jI#>&u|PXEzNjca$~euTY9Q!p3a7kH);Bf0 z!}^OFK4AS74S$vO*EO6~z+)eiUZ?5_)tP4>V$^3M-T%P^9`|97^+z=P3)X8I{x$1Q zX!!T6uW0y>tUt?Kug7MbdY|q;IHPw4k=sHZg$eH|DUt^fIP_A1(;AJy31#1PJlWds zHvOP8L|ZJotyU;#?o>vR+kT5D zmc3>tbO(|b@*mke##4{fzN+aOER639>*SlJ2T&nQe^H)KJEdej{sP+Qy#L$yI>zdA zQaY9YGg4Bd`_lKBUcE-jCl>i|+Z-^1Ao;1gi68lxR&mtlB*QPU6(D4;nC`oS1|1{c z9R}5XI4PdinN`2d8>-@|etNC-`aQ(5^50}oy&LEjlkQ9JQC9vP&VR^pl%L)&J^wYt zXiilpiZT7ni6R9sSNRox7xAq4O}^Ye-6j5`6XMH!AggzY|D5ABH+V)r(CnbIJDv*Y?_8u-Dak z11<=0pddwnR3s!oLU4csHxLI7TtMOg{{VkN&xl(k4luL(p1pqAs8V^7-^~1GelzpF z*6&_@Hl8J6HiJ;F(A{H*75*$mfM zIo*#myv)rp_@;kutqyS{~EQy@X zv=C+9qG^{P{R-%ey^q?QLpIEJ4t-z?k&crr$-ev^EyF<PMp8@r>8L4>X z|Nb}4$x~k#Zm>8?mBZ1KHn@0Hs*gkBu_l}x@(F9Ia+sSM35^3@%9O#Okb+YGc;Qn9 zhsmp(c$ZLHO6Z<~$_~d!tOyE@auCPB6Qq7a>KPzHLlun4>JOMWaPCX|31bcL65IRkiVGzrn)IxV0 zf=zD-?B-|$cHs6MyX`g)y9b`%8KN)Jon|v|-Yfs60Z z_J^TsYB*0 zBEWB>sOhA}?x9P?DEb!xu1%?trpCUEXj=chY)q7V>Yu(=YX5D-)SSfpOMneB5<`tW zKwnz@&qaN?PgI}YwOao+Vw6+%iE1>S5s&dJ2?#0cOZhh9Y5YG0-+l=HuHY+Sz|{*W z0%Tno|ApYsd^-@+1-~W(g_P@;@TaJx?cWb6`$zujH~q_~ hd^(e~rQV~aa6A!<$*iuQ@}}|s5dD8MVaAHe{|}8}$8i7v diff --git a/tests/data/test-read-dwarf/test-PR26568-1.o.abi b/tests/data/test-read-dwarf/test-PR26568-1.o.abi index 5c891200..046d2d45 100644 --- a/tests/data/test-read-dwarf/test-PR26568-1.o.abi +++ b/tests/data/test-read-dwarf/test-PR26568-1.o.abi @@ -1,16 +1,16 @@ - + - + - + - + @@ -18,19 +18,19 @@ - + - + - + - + - - + + diff --git a/tests/data/test-read-dwarf/test-PR26568-2.o b/tests/data/test-read-dwarf/test-PR26568-2.o deleted file mode 100644 index cc94708c9cb10e2f0f5e51aed7e7a713767caaf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2824 zcmbtVQHvW@6h3!mlT3CtF`KB}WqlaI(k^r++wE?Mm9433-4sh%7W$x2)=6@cj3$#Z znXRc(6clk0L_rZnw9p4%efCN4q2P}YU-|=lEBK)2%-owy?oKJ_fw}kG@0{chN+O_GKRy4Hq?F%j|TqV(P`U;xa4eN~h3T zVWxS}e92@L%v%86pvBcn-NdS10Moo=>IRk})FPI0is{CTlPkbgq#6!;c{L`VS*75O zm2X~IrJ(uDG^n-$u=o@PB?g?M;;1aZ1PPJ*NI;SLDvlbQ!I81Qiv=8`*NSJ&AmroF z-apu^ZP)7drqhnO`8Yf-^gR3MN28)?$U5P>cm0O7Yi&7oXWQD`IKRD7+q__%J>VUy z>4q_GUwCodvWMZ3&v$y<=YiM8r5m*SJCl0Nu5DR%532pqkXJjS&f8wK=Y`dQ*K%84 z&-Dh?t~cT1DrFv5J8tMksvU5*V|U(lgDwn4e$S#i0DHT;7p=2c)B2N3!ks-GZxz^k z2f!vJwziZrzQ8ki4sm)&q7%JbEPbNw7P4=lLky>mNX4uC*FR}SJ+*W2bj5pAIXYU> zL>JAX+H^=XVZx|GF0q=aI^<`Igr)=D-W1WHkb+YEc&}4Lhouu}8If}09HzJR#I>UC z#C8!8s7<9#kc>s2w+dz)T&)Yk=0{>k@!Gl5gyuf_VV znAJG4W{Q&$J~WktuKI612Db!GH74r>XMATEx-Fc;AfEeD3;84jhx!Ga)_4p~zz43= z;jN?Iq33r;Xp3~W)e89SIkOwMevi*n2Aad(QDkA$PFl>~ZL}-w}a$ z|F9dlLoN#cpVJ!h>8#{=%5V*#Oz)9clW$U<#|2?(M?J1Ql~3PIx(EN2e_rIrX-;JR zpXSiG)+9t-8fmKU>xib+-^j#7$*211Yo*rTK}?NF%-;prq(wqh-$S&e<-aBJ%X6aq)YoeM zTZmCiStqKIltnZCAOSJU{BnLD@ihL=g6}+m|FPgJZt%z4$6#iac_s3#;H&O`3ZO0> z#Vq$P;jd6hJHJm;&X4{Ek}uDd>QQr3>=n^a`=Vg_e$!t@<C diff --git a/tests/data/test-read-dwarf/test-PR26568-2.o.abi b/tests/data/test-read-dwarf/test-PR26568-2.o.abi index cdb0243a..5240cee3 100644 --- a/tests/data/test-read-dwarf/test-PR26568-2.o.abi +++ b/tests/data/test-read-dwarf/test-PR26568-2.o.abi @@ -1,11 +1,11 @@ - + - + - + @@ -13,19 +13,19 @@ - + - + - + - + - - + + diff --git a/tests/data/test-read-dwarf/test3-alias-1.so.hash.abi b/tests/data/test-read-dwarf/test3-alias-1.so.hash.abi index 02795ad0..b3a4801a 100644 --- a/tests/data/test-read-dwarf/test3-alias-1.so.hash.abi +++ b/tests/data/test-read-dwarf/test3-alias-1.so.hash.abi @@ -1,12 +1,12 @@ - + - - + + diff --git a/tests/data/test-read-dwarf/test3-alias-2.so.hash.abi b/tests/data/test-read-dwarf/test3-alias-2.so.hash.abi index 775a9a97..07a7f2c4 100644 --- a/tests/data/test-read-dwarf/test3-alias-2.so.hash.abi +++ b/tests/data/test-read-dwarf/test3-alias-2.so.hash.abi @@ -1,4 +1,4 @@ - + @@ -9,8 +9,8 @@ - - + + diff --git a/tests/data/test-read-dwarf/test3-alias-3.so.hash.abi b/tests/data/test-read-dwarf/test3-alias-3.so.hash.abi index 6c604948..7908bdb8 100644 --- a/tests/data/test-read-dwarf/test3-alias-3.so.hash.abi +++ b/tests/data/test-read-dwarf/test3-alias-3.so.hash.abi @@ -1,12 +1,12 @@ - + - - + + diff --git a/tests/data/test-read-dwarf/test3-alias-4.so.hash.abi b/tests/data/test-read-dwarf/test3-alias-4.so.hash.abi index 912c710c..22a56fa5 100644 --- a/tests/data/test-read-dwarf/test3-alias-4.so.hash.abi +++ b/tests/data/test-read-dwarf/test3-alias-4.so.hash.abi @@ -1,4 +1,4 @@ - + diff --git a/tests/data/test-read-dwarf/test3.c b/tests/data/test-read-dwarf/test3.c deleted file mode 100644 index 2808db4b..00000000 --- a/tests/data/test-read-dwarf/test3.c +++ /dev/null @@ -1,11 +0,0 @@ -// Test file for creating multiple alias for a symbol - -void __foo(void); -void foo(void) __attribute__((weak, alias("__foo"))); -void foo__(void) __attribute__((weak, alias("__foo"))); -void __foo__(void) __attribute__((alias("__foo"))); - -void __foo(void) -{ - -} diff --git a/tests/data/test-read-dwarf/test3.so b/tests/data/test-read-dwarf/test3.so deleted file mode 100755 index 4c426fc3c202d2f2dd027ffd8825ccfea36b2a09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8851 zcmeHMeQX>@6`#Aa<8$qt9j6VB(~?z48YjZ*k0i!QWMb!H`x5N5xHbh*YqfW~XJ30C zW_K^PO8`p_At|z`5E4P+kAj3i2%#V$l=2~5j4C7$GKET^e??TKc8G-2isFi@=Dpc@ z=iRxz773|;c}}};<~Q$S_RZd#nSEax7#<9VLX1j;eVp;u4j1VY9nHImgRwr=!)oBJ zu!lHr^;TC|?NW^k5oI8S1#O^-)t%Tvs`zMMm^WEMP?EzY%0**te>A4>3egolc*clE zT{cz)6tCZjewiK=d_<8K%cHM32G-vZ{*dW|oQpA{B=<>>6C#4+y-B0!9u@W~`K4L- zgQ$2M{%rSyjtE>s7slCNjaRO$z4^@A^Tx=YOB>H^y!}vh3!1=woD%Z?k6uzD^HqJd zh}{PlPRE&nm+xM+uh#wI)vsSlU$Gl*eeTl_KEHS`R<-=YxjTRUXYBjy{}A2>=717m zwd@DdOM(7T0(fy8LAYK4@2P-~0)7B4xhw+E$R1#=jf$^p23iML9a|NXM052V;Eik# z>yY@rP=Ws&f?w8;^Vt;OhtG4o-0mKZ*RypR2(+;j;c5yPC)2daTp_R7j&3=c#9xn`x$@J34eEZQC6YKzV~XrtKUr%Va6a2a8 z7KS%b{$U?t3qa|AQEbW7G8SexgdoKW`hVXLep?rDgz#zdC&dXN&qVuHgTfJHD}@@U z-}d16pP{nq!Rfz_ed`|F`|59aa2g8oH;eZR|94*fiU;@dCl>BT6JM=vyH8<>FE2UO zs~-Wu#KLc*%cyOuY@X->md!)Q;oh*n4{F$+LWZ^5n@|oN#Ww!!)>fdISgdXZAhFon z0%SaKWFv9ywZy_kY$iOh3l%DxV)HiY1O9smE%x34Li{gmL=xA2lX&6I=|pHH z@u!U<7k=PtT=*sDjfupy7dQWg^7Fkv0gx3BCl-2Vur?0%oO;k_)hKLr0*16Y1-FS8 ztFJ*WgFDRiFF7saAb%8K(6zZTvGzD9XxKlG{A-`! zb#7*2IsGj6qi|bjU*uFX@Zh}v<=xHA<3R5M`x8JhmSPD#J<39}jiG(@HPL6mYXp8 zwgUoVbrrTyw&(NFubeWFck z9Y1^kM*A~dAF)vXzuw&}V0&E*g!WK3#pZ~wq0rwWHfeZP!SYL&zz*3hxSnGXVz7Z! zc$@Zie9Z=g)^~9{Wgp^PjLizegx?gKJR0Yc;DgO5FJuq41AP3~1wSnNyiI;x7i~xM zzb)FOaSDAOG@)~|Z1?ZN4{r%N6px=&TH$1QL^-bZs9j1|N9VE5uFfu{b<{MJgzmU_ z+sBTukAgDS->%o>GnQ;C4uI>HD0f%r2>=YZf&{~O0tiLruF$txXjkY^YAjKI$+}Z@hxa1b*Zj>h_^Nip6=oksRiXdHcEX*10|E0PacW6HAC%fK zS!x*$!(k-^E>Pm{>jR}NJ#CrORv~4=$;nXKa!xUC_D-64)5@fvsavV3-r1h+w(jFf z+a$0*dM;kF+&)#vneFydMPSRckLmVPcDr3DS}9WlrG<8*U_6;=hx3=7%uMQ;Y&#yb z>~=ha@oJl8>PDL}qg!clW@D;7mvi(aP{(rV6xH$t$5bctMKxK>WR13r!FX#*x2KqD z%;iDSrHJlqeR?QqfiK=B*nQ;_`?1v;QCO9rK;%T(bWfzi==?q!Ld0_AxogTd?`jg&98K={-jLW+Mw?D$@G%fSfDS8XX_qdAP+uTCjT0M{u zEB70YB#b*nX?}74iFk*E_X}M9j_^3wzvUnLKczWdK987}L;W`-{omsJl`o7H@+iq`Mqj_2MEgVVfW4wZ%QNV-ppP%CT%k!U~t-!Afe))fq13c)tY`_)yp`iVh3ix*b zKM=tGE5L*Dt1M+Xwo`t8<@sD`pwF*fI1*)i@M$`D=ZSYZu;1tS>`EU%;pL;-XyP^4-U!{qcQTXKLPDa NGxzm*6T@y2`@a>G9{B(O diff --git a/tests/data/test-read-dwarf/test3.so.abi b/tests/data/test-read-dwarf/test3.so.abi index 04032c74..a9bf781f 100644 --- a/tests/data/test-read-dwarf/test3.so.abi +++ b/tests/data/test-read-dwarf/test3.so.abi @@ -1,4 +1,4 @@ - + @@ -10,8 +10,8 @@ - - + + diff --git a/tests/data/test-read-dwarf/test3.so.hash.abi b/tests/data/test-read-dwarf/test3.so.hash.abi index ea9ddc02..f429b22f 100644 --- a/tests/data/test-read-dwarf/test3.so.hash.abi +++ b/tests/data/test-read-dwarf/test3.so.hash.abi @@ -1,4 +1,4 @@ - + @@ -10,8 +10,8 @@ - - + + diff --git a/tests/data/test-read-dwarf/test4.c b/tests/data/test-read-dwarf/test4.c deleted file mode 100644 index 7f0abaa1..00000000 --- a/tests/data/test-read-dwarf/test4.c +++ /dev/null @@ -1,14 +0,0 @@ -// Test file for restrict (needs to be compiled by a GCC that actually emits -// DW_TAG_restrict_type. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59051 -// -// gcc -gdwarf-3 -std=c99 -shared -nostartfiles -o test4.so test4.c - -char * -cpy (char * restrict s1, const char * restrict s2, unsigned int n) -{ - char *t1 = s1; - const char *t2 = s2; - while(n-- > 0) - *t1++ = *t2++; - return s1; -} diff --git a/tests/data/test-read-dwarf/test4.so b/tests/data/test-read-dwarf/test4.so deleted file mode 100755 index 3be3f0d644190425cbb2a08ed7b4f1d164c13ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3364 zcmcImPiP!v6n`_b|JqG9o1{u1Dx+wdh?yj9NYj?oP0~#_x@}TzARc6#-JR?%W+!20 zViQq%s7hlABqHiTu!08#!HX0H4*_pIdGgf5UIIcd@mBN@-<$c~c6PF>i1@*L?|r}b zdvCsZ-}k-wZe;T_vLpdF1ug)MGO~|kgkd`-6cia4hbZ>lkn*_EN2WtsUBqDtpn4p7 z2Zdz3F8eskU9?f#^?K@5Por@E#xLP{0nG2Yr3mUDi}{4*F~MU=TxwU*FYxI;_&0r8 z*c6oHN0MT-%aNE4GTJu{+8QZt8Xsc&)v?Vnth0}j&lFOlc+t+ zZOu!$%>_gk_H$b=p?-P4>u%4j^zH2Zt@#7=dw+NBSMq)RXPl4Jr<|ue(l>s4aB%Pf zN?sS~?N>lrPfL9r@x(R~o&WwRFquk!AWwJ3fd{MKH?%PLSf{cO2kE0^c!#R21FB|p%#;3H&Dch5+_qM z@g4TQEfRkWb&$HH=Tf~%CDoVemU^T#u9~b#FLo%2bIJ3`lO40Y1ZR$ZI@KZd;%7#| zx6Jm+xS)~IreU-TlF3=5#hyjw0!GCbp8-M=Cp-ZY_)Zy~qBl!_raH0rN+#|R30%{0 zN3|kN3*d;%$vL)n^X5?E$9pf!GSY`CD>ZYdX4r2IId*Y~d>mM_oNC!JOKR0}0hd^v z{)aVI2W#${Wloe$3m3kKL&GjsCf3Kt2FFI#!E))kVJ{7yRtFuoG*LWzwlTM2#jpW1 zXQSpC1(dGs%L;21!>NE)+OUw~OVCx%!Q$1-ZwB51{x8f`*E z%)(k(H*CWyn+^}F*3t^=MxkJvZ}DikYMHF#MEnf?$G#8!sn+t|<#W!GP6;)(^Z$YC z!qaG@GtPFd11z`685^A(;;=v0gMokzRp7e9lIsZBsEIP;53nB*7}ueUm$NaE=Hst@c2*h%n9fjoYXLt@3{_hdS|MR+tvr8a0zw$iFAOANO(MCBL zCQ_i?5f0A>Fj6^xER6sbq}~($;kfL_+|@Sze+d7dm?&h}|D87ecSWKpez1l8KSW~~ zBmN0-ftU&FQXdHaFM}ZJ?8h*TdG9es@)z+VO$%ch zu^xPQ|M2-af>^8f*E`UF?V>Llefa$iLkmU0*>W8SniZTepYLW|X`J6?{P2B@>>O?ih~$P$idV@(APyA}$qbnk=nNtL`bOaQgF^-c zTH!Q93GbhES#5HmwI)2=`VnY#kEJ@@>K=Q#4Ni5b6~FNd)GxkvW%BauH0YP|b5oOf ceQsvv)$BF>+T>I|t9#d7zU0!yHh9zh3+b%7 diff --git a/tests/data/test-read-dwarf/test4.so.abi b/tests/data/test-read-dwarf/test4.so.abi index 71f64da3..c38fff66 100644 --- a/tests/data/test-read-dwarf/test4.so.abi +++ b/tests/data/test-read-dwarf/test4.so.abi @@ -1,11 +1,11 @@ - + - + @@ -13,10 +13,10 @@ - - - - + + + + diff --git a/tests/data/test-read-dwarf/test4.so.hash.abi b/tests/data/test-read-dwarf/test4.so.hash.abi index 471ff895..7223f5eb 100644 --- a/tests/data/test-read-dwarf/test4.so.hash.abi +++ b/tests/data/test-read-dwarf/test4.so.hash.abi @@ -1,11 +1,11 @@ - + - + @@ -13,10 +13,10 @@ - - - - + + + + diff --git a/tests/test-annotate.cc b/tests/test-annotate.cc index bc4ce852..174de483 100644 --- a/tests/test-annotate.cc +++ b/tests/test-annotate.cc @@ -42,12 +42,12 @@ InOutSpec in_out_specs[] = "output/test-annotate/test2.so.abi" }, { - "data/test-read-dwarf/test3.so", + "data/test-read-common/test3.so", "data/test-annotate/test3.so.abi", "output/test-annotate/test3.so.abi" }, { - "data/test-read-dwarf/test4.so", + "data/test-read-common/test4.so", "data/test-annotate/test4.so.abi", "output/test-annotate/test4.so.abi" }, diff --git a/tests/test-read-common.cc b/tests/test-read-common.cc new file mode 100644 index 00000000..9681ac27 --- /dev/null +++ b/tests/test-read-common.cc @@ -0,0 +1,264 @@ +// -*- Mode: C++ -*- +// + +/// @file +/// +/// This file implements the common functionality for the tests in +/// CTF and DWARF readers, it does the abstraction in the `act` test +/// stage. + +#include +#include +#include "test-read-common.h" + +using std::ofstream; +using std::cerr; +using std::dynamic_pointer_cast; + +using abigail::tools_utils::emit_prefix; +using abigail::tests::get_build_dir; +using abigail::xml_writer::write_context_sptr; +using abigail::xml_writer::create_write_context; +using abigail::xml_writer::write_corpus; + +namespace abigail +{ +namespace tests +{ +namespace read_common +{ + +/// Constructor. +/// +/// Task to be executed for each test entry in @ref +/// abigail::tests::read_common::InOutSpec. +/// +/// @param InOutSpec the set of tests. +/// +/// @param a_out_abi_base the output base directory for abixml files. +/// +/// @param a_in_elf_base the input base directory for object files. +/// +/// @param a_in_elf_base the input base directory for expected +/// abixml files. +test_task::test_task(const InOutSpec &s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base) + : is_ok(true), + spec(s), + out_abi_base(a_out_abi_base), + in_elf_base(a_in_elf_base), + in_abi_base(a_in_abi_base) + {} + +/// Serialize the abixml @p out_abi_path file. +/// +/// @param out_abi_path the abixml path file. +/// +/// @param corp the ABI @ref abigail::ir::corpus. +/// +/// @return true if abixml file was serialized successfully. Otherwise +/// `error_message` is set with @p out_abi_path and false is returned. +bool +test_task::serialize_corpus(const string& out_abi_path, + corpus_sptr corp) +{ + ofstream of(out_abi_path.c_str(), std::ios_base::trunc); + if (!of.is_open()) + { + error_message = string("failed to read ") + out_abi_path + "\n"; + return false; + } + + write_context_sptr write_ctxt + = create_write_context(corp->get_environment(), of); + set_type_id_style(*write_ctxt, spec.type_id_style); + is_ok = write_corpus(*write_ctxt, corp, /*indent=*/0); + of.close(); + + return is_ok; +} + +/// Spawn `abidw --abidiff` tool appending @p extargs argument. +/// +/// Thew input file object used by `abidw` will be specified by +/// `in_elf_path'. +/// +/// @param extargs the extra argument(s) passed to `abidw` tool. +/// +/// @return true if `abidw` tool was executed correctly. Otherwise +/// `error_message` shows the full path of the input file object and +/// the full output path for the abixml file. +bool +test_task::run_abidw(const string& extargs) +{ + string abidw = string(get_build_dir()) + "/tools/abidw"; + string drop_private_types; + if (!in_public_headers_path.empty()) + drop_private_types += "--headers-dir " + in_public_headers_path + + " --drop-private-types"; + string cmd = abidw + " " + drop_private_types + " --abidiff " + extargs + + in_elf_path; + if (system(cmd.c_str())) + { + error_message = string("ABIs differ:\n") + + in_elf_path + + "\nand:\n" + + out_abi_path + + "\n"; + + return false; + } + + return true; +} + +/// Spawn external `diff` command. +/// +/// The files to be compared are: abixml generated by the input +/// object file and the expected abixml file stored in `in_abi_path`. +/// +/// @return true if `diff` command didn't find defences. Otherwise +/// `error_message` shows the full path of the input file object and +/// the full output path for the abixml file. +bool +test_task::run_diff() +{ + set_in_abi_path(); + string cmd = "diff -u " + in_abi_path + " " + out_abi_path; + if (system(cmd.c_str())) + { + error_message = string("ABIs differ:\n") + + in_abi_path + + "\nand:\n" + + out_abi_path + + "\n"; + + return false; + } + + return true; +} + +/// Write the usage message to @p out stream object. +/// +/// @param prog_name the program name. +/// +/// @param out the stream object to which want to write. +void +display_usage(const string& prog_name, ostream& out) +{ + emit_prefix(prog_name, out) + << "usage: " << prog_name << " [options]\n" + << " where options can be: \n" + << " --help|-h display this message\n" + << " --no-parallel execute testsuite is a sigle thread\n" + ; +} + +/// Parse and process test options. +/// +/// @param argc the arguments number. +/// +/// @param argv the pointer to the arguments. +/// +/// @param opts the valid @ref options to be processed/parsed. +/// +/// @return true if options was processed/parsed successfully. It returns +/// false when help is requested or an invalid option is supplied. +bool +parse_command_line(int argc, char* argv[], options& opts) +{ + for (int i = 1; i < argc; ++i) + { + if (!strcmp(argv[i], "--no-parallel")) + opts.parallel = false; + else if (!strcmp(argv[i], "--help") + || !strcmp(argv[i], "--h")) + return false; + else + { + if (strlen(argv[i]) >= 2 && argv[i][0] == '-' && argv[i][1] == '-') + opts.wrong_option = argv[i]; + return false; + } + } + + return true; +} + +/// The main entry point to execute the testsuite. +/// +/// @param num_tests the number of tests to be executed. +/// +/// @param specs the @ref abigail::tests::read_common::InOutSpec +/// tests container. +/// +/// @param opts the test execution @ref abigail::tests::read_common::options. +/// +/// @param new_test the @ref create_new_test callback function to create +/// a new test task object. +/// +/// @return true if `all` tests were performed successfully. Otherwise +/// false is returned. +bool +run_tests(const size_t num_tests, const InOutSpec* specs, + const options& opts, create_new_test new_test) +{ + size_t num_workers = (opts.parallel + ? std::min(abigail::workers::get_number_of_threads(), + num_tests) + : 1); + + // Create a task queue. The max number of worker threads of the + // queue is the number of the concurrent threads supported by the + // processor of the machine this code runs on. But if + // --no-parallel was provided then the number of worker threads + // equals 1. + abigail::workers::queue task_queue(num_workers); + bool is_ok = true; + + string out_abi_base = string(get_build_dir()) + "/tests/"; + string in_elf_base = string(abigail::tests::get_src_dir()) + "/tests/"; + string in_abi_base = in_elf_base; + + for (const InOutSpec *s = specs; s->in_elf_path; ++s) + { + test_task_sptr t(new_test(s, out_abi_base, + in_elf_base, + in_abi_base)); + ABG_ASSERT(task_queue.schedule_task(t)); + } + + // Wait for all worker threads to finish their job, and wind down. + task_queue.wait_for_workers_to_complete(); + + // Now walk the results and print whatever error messages need to be + // printed. + + const vector& completed_tasks = + task_queue.get_completed_tasks(); + + ABG_ASSERT(completed_tasks.size() == num_tests); + + for (vector::const_iterator ti = + completed_tasks.begin(); + ti != completed_tasks.end(); + ++ti) + { + test_task_sptr t = dynamic_pointer_cast(*ti); + if (!t->is_ok) + { + is_ok = false; + if (!t->error_message.empty()) + cerr << t->error_message << '\n'; + } + } + + return !is_ok; +} + +}//end namespace read_common +}//end namespace tests +}//end namespace abigail diff --git a/tests/test-read-common.h b/tests/test-read-common.h new file mode 100644 index 00000000..00d4d1d1 --- /dev/null +++ b/tests/test-read-common.h @@ -0,0 +1,179 @@ +// -*- Mode: C++ -*- +// + +/// @file +/// +/// This file declares the common functionality for tests in +/// CTF and DWARF readers, it declares abstractions for `act` test +/// stage. + +#ifndef __TEST_READ_COMMON_H__ +#define __TEST_READ_COMMON_H__ + +#include +#include "abg-ir.h" +#include "abg-corpus.h" +#include "abg-workers.h" +#include "abg-writer.h" +#include "test-utils.h" +#include "abg-tools-utils.h" + +using std::string; + +using abigail::xml_writer::type_id_style_kind; +using abigail::ir::corpus_sptr; + +namespace abigail +{ +namespace tests +{ +namespace read_common +{ + +/// This is an aggregate that specifies where a test shall get its +/// input from, and where it shall write its output to. +struct InOutSpec +{ + const char* in_elf_path; + const char* in_suppr_spec_path; + const char* in_public_headers_path; + type_id_style_kind type_id_style; + const char* in_abi_path; + const char* out_abi_path; +};// end struct InOutSpec + +/// The task that performs the tests. +struct test_task : public abigail::workers::task +{ + bool is_ok; + InOutSpec spec; + string error_message; + string out_abi_base; + string in_elf_base; + string in_abi_base; + + string in_elf_path; + string in_abi_path; + string in_suppr_spec_path; + string in_public_headers_path; + string out_abi_path; + + + /// A setter for `in_elf_path` field. + /// The `in_elf_path` is the full path for input object + /// in the tests container @ref + /// abigail::tests::read_common::InOutSpec. + void + set_in_elf_path() + { + in_elf_path = in_elf_base + spec.in_elf_path; + } + + /// A setter for `in_suppr_spec_path` field. + /// The `in_suppr_spec_path` is the full path for suppression + /// entry in the tests container @ref + /// abigail::tests::read_common::InOutSpec. + void + set_in_suppr_spec_path() + { + if (spec.in_suppr_spec_path) + in_suppr_spec_path = in_elf_base + spec.in_suppr_spec_path; + else + in_suppr_spec_path.clear(); + } + + /// A setter for `in_public_headers_path` field. + /// The `in_public_headers_path` is the full path for headers + /// entry in the tests container @ref + /// abigail::tests::read_common::InOutSpec. + void + set_in_public_headers_path() + { + if (spec.in_public_headers_path) + in_public_headers_path = spec.in_public_headers_path; + if (!in_public_headers_path.empty()) + in_public_headers_path = in_elf_base + spec.in_public_headers_path; + } + + /// A setter for `out_abi_path` field. + /// The `out_abi_path` is the full path for output of abixml file. + /// @return true if `out_abi_path` is a valid directory. + bool + set_out_abi_path() + { + out_abi_path = out_abi_base + spec.out_abi_path; + if (!abigail::tools_utils::ensure_parent_dir_created(out_abi_path)) + { + error_message = + string("Could not create parent directory for ") + out_abi_path; + return false; + } + return true; + } + + /// A setter for `in_abi_path` field. + /// The `in_abi_path` is the full path for the expected abixml file. + void + set_in_abi_path() + { + in_abi_path = in_abi_base + spec.in_abi_path; + } + + test_task(const InOutSpec &s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base); + bool + serialize_corpus(const string& out_abi_path, + corpus_sptr corp); + bool + run_abidw(const string& extargs = ""); + + bool + run_diff(); + + virtual + ~test_task() + {} +}; // end struct test_task + +typedef shared_ptr test_task_sptr; + +/// An abstraction for valid test options. +struct options +{ + // saves a wrong option string passed to test-harness. + string wrong_option; + // parallel test execution. + bool parallel; + + options() + : parallel(true) + {} + + ~options() + { + } +}; // end struct options + +void +display_usage(const string& prog_name, ostream& out); + +bool +parse_command_line(int argc, char* argv[], options& opts); + +/// A convenience typedef for a callback to create_new_test +/// instances. +typedef test_task* (*create_new_test)(const InOutSpec* s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base); +bool +run_tests(const size_t num_test, const InOutSpec* specs, + const options& opts, create_new_test new_test); + +}//end namespace read_common +}//end namespace tests +}//end namespace abigail + +#endif //__TEST_READ_COMMON_H__ diff --git a/tests/test-read-ctf.cc b/tests/test-read-ctf.cc new file mode 100644 index 00000000..b448ddc5 --- /dev/null +++ b/tests/test-read-ctf.cc @@ -0,0 +1,353 @@ +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// -*- Mode: C++ -*- +// +// Copyright (C) 2021 Oracle, Inc. +// +// Author: Guillermo E. Martinez + +/// @file +/// +/// This file implement the CTF testsuite. It reads ELF binaries +/// containing CTF, save them in XML corpus files and diff the +/// corpus files against reference XML corpus files. + +#include +#include +#include +#include +#include +#include +#include "abg-ctf-reader.h" +#include "test-read-common.h" + +using std::string; +using std::cerr; + +using abigail::tests::read_common::InOutSpec; +using abigail::tests::read_common::test_task; +using abigail::tests::read_common::display_usage; +using abigail::tests::read_common::options; + +using abigail::ctf_reader::read_context_sptr; +using abigail::ctf_reader::create_read_context; +using abigail::xml_writer::SEQUENCE_TYPE_ID_STYLE; +using abigail::xml_writer::HASH_TYPE_ID_STYLE; +using abigail::tools_utils::emit_prefix; + +static InOutSpec in_out_specs[] = +{ + { + "data/test-read-ctf/test0", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test0.abi", + "output/test-read-ctf/test0.abi" + }, + { + "data/test-read-ctf/test0", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test0.hash.abi", + "output/test-read-ctf/test0.hash.abi" + }, + { + "data/test-read-ctf/test1.so", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test1.so.abi", + "output/test-read-ctf/test1.so.abi" + }, + { + "data/test-read-ctf/test1.so", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test1.so.hash.abi", + "output/test-read-ctf/test1.so.hash.abi" + }, + { + "data/test-read-ctf/test2.so", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test2.so.abi", + "output/test-read-ctf/test2.so.abi" + }, + { + "data/test-read-ctf/test2.so", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test2.so.hash.abi", + "output/test-read-ctf/test2.so.hash.abi" + }, + { + "data/test-read-common/test3.so", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test3.so.abi", + "output/test-read-ctf/test3.so.abi" + }, + { + "data/test-read-common/test3.so", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test3.so.hash.abi", + "output/test-read-ctf/test3.so.hash.abi" + }, + { + "data/test-read-ctf/test-enum-many.o", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test-enum-many.o.hash.abi", + "output/test-read-ctf/test-enum-many.o.hash.abi" + }, + { + "data/test-read-ctf/test-ambiguous-struct-A.o", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test-ambiguous-struct-A.o.hash.abi", + "output/test-read-ctf/test-ambiguous-struct-A.o.hash.abi" + }, + { + "data/test-read-ctf/test-ambiguous-struct-B.o", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test-ambiguous-struct-B.o.hash.abi", + "output/test-read-ctf/test-ambiguous-struct-B.o.hash.abi" + }, + { + "data/test-read-ctf/test-conflicting-type-syms-a.o", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test-conflicting-type-syms-a.o.hash.abi", + "output/test-read-ctf/test-conflicting-type-syms-a.o.hash.abi" + }, + { + "data/test-read-ctf/test-conflicting-type-syms-b.o", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi", + "output/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi" + }, + { + "data/test-read-common/test4.so", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test4.so.abi", + "output/test-read-ctf/test4.so.abi" + }, + { + "data/test-read-common/test4.so", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test4.so.hash.abi", + "output/test-read-ctf/test4.so.hash.abi" + }, + { + "data/test-read-ctf/test5.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test5.o.abi", + "output/test-read-ctf/test5.o.abi" + }, + { + "data/test-read-ctf/test7.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test7.o.abi", + "output/test-read-ctf/test7.o.abi" + }, + { + "data/test-read-ctf/test8.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test8.o.abi", + "output/test-read-ctf/test8.o.abi" + }, + { + "data/test-read-ctf/test9.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test9.o.abi", + "output/test-read-ctf/test9.o.abi" + }, + { + "data/test-read-ctf/test-enum.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test-enum.o.abi", + "output/test-read-ctf/test-enum.o.abi" + }, + { + "data/test-read-ctf/test-enum-symbol.o", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test-enum-symbol.o.hash.abi", + "output/test-read-ctf/test-enum-symbol.o.hash.abi" + }, + { + "data/test-read-ctf/test-dynamic-array.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test-dynamic-array.o.abi", + "output/test-read-ctf/test-dynamic-array.o.abi" + }, + { + "data/test-read-common/PR27700/test-PR27700.o", + "", + "data/test-read-common/PR27700/pub-incdir", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/PR27700/test-PR27700.abi", + "output/test-read-ctf/PR27700/test-PR27700.abi", + }, + // This should be the last entry. + {NULL, NULL, NULL, SEQUENCE_TYPE_ID_STYLE, NULL, NULL} +}; + +/// Task specialization to perform CTF tests. +struct test_task_ctf : public test_task +{ + test_task_ctf(const InOutSpec &s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base); + virtual void + perform(); + + virtual + ~test_task_ctf() + {} +}; // end struct test_task_ctf + +/// Constructor. +/// +/// Task to be executed for each CTF test entry in @ref +/// abigail::tests::read_common::InOutSpec. +/// @param InOutSpec the array containing set of tests. +/// +/// @param a_out_abi_base the output base directory for abixml files. +/// +/// @param a_in_elf_base the input base directory for object files. +/// +/// @param a_in_elf_base the input base directory for expected +/// abixml files. +test_task_ctf::test_task_ctf(const InOutSpec &s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base) + : test_task(s, a_out_abi_base, a_in_elf_base, a_in_abi_base) + {} + +/// The thread function to execute each CTF test entry in @ref +/// abigail::tests::read_common::InOutSpec. +/// +/// This reads the corpus into memory, saves it to disk, loads it +/// again and compares the new in-memory representation against the +void +test_task_ctf::perform() +{ + abigail::ir::environment_sptr env; + + set_in_elf_path(); + set_in_suppr_spec_path(); + + env.reset(new abigail::ir::environment); + abigail::elf_reader::status status = + abigail::elf_reader::STATUS_UNKNOWN; + ABG_ASSERT(abigail::tools_utils::file_exists(in_elf_path)); + + read_context_sptr ctxt = create_read_context(in_elf_path, + env.get()); + ABG_ASSERT(ctxt); + + corpus_sptr corp = read_corpus(ctxt.get(), status); + // if there is no output and no input, assume that we do not care about the + // actual read result, just that it succeeded. + if (!spec.in_abi_path && !spec.out_abi_path) + { + // Phew! we made it here and we did not crash! yay! + return; + } + if (!corp) + { + error_message = string("failed to read ") + in_elf_path + "\n"; + is_ok = false; + return; + } + corp->set_path(spec.in_elf_path); + // Do not take architecture names in comparison so that these + // test input binaries can come from whatever arch the + // programmer likes. + corp->set_architecture_name(""); + + if (!(is_ok = set_out_abi_path())) + return; + + if (!(is_ok = serialize_corpus(out_abi_path, corp))) + return; + + if (!(is_ok = run_abidw("--ctf "))) + return; + + if (!(is_ok = run_diff())) + return; +} + +/// Create a new CTF instance for task to be execute by the testsuite. +/// +/// @param s the @ref abigail::tests::read_common::InOutSpec +/// tests container. +/// +/// @param a_out_abi_base the output base directory for abixml files. +/// +/// @param a_in_elf_base the input base directory for object files. +/// +/// @param a_in_abi_base the input base directory for abixml files. +/// +/// @return abigail::tests::read_common::test_task instance. +static test_task* +new_task(const InOutSpec* s, string& a_out_abi_base, + string& a_in_elf_base, string& a_in_abi_base) +{ + return new test_task_ctf(*s, a_out_abi_base, + a_in_elf_base, a_in_abi_base); +} + +int +main(int argc, char *argv[]) +{ + options opts; + if (!parse_command_line(argc, argv, opts)) + { + if (!opts.wrong_option.empty()) + emit_prefix(argv[0], cerr) + << "unrecognized option: " << opts.wrong_option << "\n"; + display_usage(argv[0], cerr); + return 1; + } + + // compute number of tests to be executed. + const size_t num_tests = sizeof(in_out_specs) / sizeof(InOutSpec) - 1; + + return run_tests(num_tests, in_out_specs, opts, new_task); +} diff --git a/tests/test-read-dwarf.cc b/tests/test-read-dwarf.cc index 585aca5e..79fdc3d3 100644 --- a/tests/test-read-dwarf.cc +++ b/tests/test-read-dwarf.cc @@ -15,45 +15,27 @@ #include #include #include -#include "abg-ir.h" +#include "test-read-common.h" #include "abg-dwarf-reader.h" -#include "abg-workers.h" -#include "abg-writer.h" -#include "abg-tools-utils.h" -#include "test-utils.h" using std::vector; using std::string; -using std::ofstream; using std::cerr; -using std::dynamic_pointer_cast; -using abigail::tests::get_build_dir; + +using abigail::tests::read_common::InOutSpec; +using abigail::tests::read_common::test_task; +using abigail::tests::read_common::display_usage; +using abigail::tests::read_common::options; + using abigail::dwarf_reader::read_corpus_from_elf; using abigail::dwarf_reader::read_context; using abigail::dwarf_reader::read_context_sptr; using abigail::dwarf_reader::create_read_context; using abigail::xml_writer::SEQUENCE_TYPE_ID_STYLE; using abigail::xml_writer::HASH_TYPE_ID_STYLE; -using abigail::xml_writer::create_write_context; -using abigail::xml_writer::set_type_id_style; -using abigail::xml_writer::type_id_style_kind; -using abigail::xml_writer::write_context_sptr; -using abigail::xml_writer::write_corpus; - -/// This is an aggregate that specifies where a test shall get its -/// input from, and where it shall write its ouput to. -struct InOutSpec -{ - const char* in_elf_path; - const char* in_suppr_spec_path; - const char* in_public_headers_path; - type_id_style_kind type_id_style; - const char* in_abi_path; - const char* out_abi_path; -};// end struct InOutSpec - +using abigail::tools_utils::emit_prefix; -InOutSpec in_out_specs[] = +static InOutSpec in_out_specs[] = { { "data/test-read-dwarf/test0", @@ -104,7 +86,7 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/test2.so.hash.abi" }, { - "data/test-read-dwarf/test3.so", + "data/test-read-common/test3.so", "", "", SEQUENCE_TYPE_ID_STYLE, @@ -112,7 +94,7 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/test3.so.abi" }, { - "data/test-read-dwarf/test3.so", + "data/test-read-common/test3.so", "", "", HASH_TYPE_ID_STYLE, @@ -121,8 +103,8 @@ InOutSpec in_out_specs[] = }, // suppress all except the main symbol of a group of aliases { - "data/test-read-dwarf/test3.so", - "data/test-read-dwarf/test3-alias-1.suppr", + "data/test-read-common/test3.so", + "data/test-read-common/test3-alias-1.suppr", "", HASH_TYPE_ID_STYLE, "data/test-read-dwarf/test3-alias-1.so.hash.abi", @@ -130,8 +112,8 @@ InOutSpec in_out_specs[] = }, // suppress the main symbol of a group of aliases { - "data/test-read-dwarf/test3.so", - "data/test-read-dwarf/test3-alias-2.suppr", + "data/test-read-common/test3.so", + "data/test-read-common/test3-alias-2.suppr", "", HASH_TYPE_ID_STYLE, "data/test-read-dwarf/test3-alias-2.so.hash.abi", @@ -139,8 +121,8 @@ InOutSpec in_out_specs[] = }, // suppress all except one non main symbol of a group of aliases { - "data/test-read-dwarf/test3.so", - "data/test-read-dwarf/test3-alias-3.suppr", + "data/test-read-common/test3.so", + "data/test-read-common/test3-alias-3.suppr", "", HASH_TYPE_ID_STYLE, "data/test-read-dwarf/test3-alias-3.so.hash.abi", @@ -148,8 +130,8 @@ InOutSpec in_out_specs[] = }, // suppress all symbols of a group of aliases { - "data/test-read-dwarf/test3.so", - "data/test-read-dwarf/test3-alias-4.suppr", + "data/test-read-common/test3.so", + "data/test-read-common/test3-alias-4.suppr", "", HASH_TYPE_ID_STYLE, "data/test-read-dwarf/test3-alias-4.so.hash.abi", @@ -165,7 +147,7 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/test-suppressed-alias.o.abi", }, { - "data/test-read-dwarf/test4.so", + "data/test-read-common/test4.so", "", "", SEQUENCE_TYPE_ID_STYLE, @@ -173,7 +155,7 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/test4.so.abi" }, { - "data/test-read-dwarf/test4.so", + "data/test-read-common/test4.so", "", "", HASH_TYPE_ID_STYLE, @@ -449,7 +431,7 @@ InOutSpec in_out_specs[] = NULL, }, { - "data/test-read-dwarf/PR26261/PR26261-exe", + "data/test-read-common/PR26261/PR26261-exe", "", "", SEQUENCE_TYPE_ID_STYLE, @@ -457,7 +439,7 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/PR26261/PR26261-exe.abi", }, { - "data/test-read-dwarf/test-PR26568-1.o", + "data/test-read-common/test-PR26568-1.o", "", "", SEQUENCE_TYPE_ID_STYLE, @@ -465,7 +447,7 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/test-PR26568-1.o.abi", }, { - "data/test-read-dwarf/test-PR26568-2.o", + "data/test-read-common/test-PR26568-2.o", "", "", SEQUENCE_TYPE_ID_STYLE, @@ -481,9 +463,9 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/test-libandroid.so.abi", }, { - "data/test-read-dwarf/PR27700/test-PR27700.o", + "data/test-read-common/PR27700/test-PR27700.o", "", - "data/test-read-dwarf/PR27700/pub-incdir", + "data/test-read-common/PR27700/pub-incdir", HASH_TYPE_ID_STYLE, "data/test-read-dwarf/PR27700/test-PR27700.abi", "output/test-read-dwarf/PR27700/test-PR27700.abi", @@ -552,198 +534,138 @@ set_suppressions_from_headers(read_context& read_ctxt, const string& path) } } -/// The task that peforms the tests. -struct test_task : public abigail::workers::task +/// Task specialization to perform DWARF tests. +struct test_task_dwarf : public test_task { - bool is_ok; - InOutSpec spec; - string error_message; - string out_abi_base; - string in_elf_base; - string in_abi_base; + test_task_dwarf(const InOutSpec &s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base); + virtual void + perform(); - test_task(const InOutSpec &s, - string& a_out_abi_base, - string& a_in_elf_base, - string& a_in_abi_base) - : is_ok(true), - spec(s), - out_abi_base(a_out_abi_base), - in_elf_base(a_in_elf_base), - in_abi_base(a_in_abi_base) + virtual + ~test_task_dwarf() {} +}; // end struct test_task_dwarf - /// The actual test. - /// - /// This reads the corpus into memory, saves it to disk, loads it - /// again and compares the new in-memory representation against the - /// saved one. - virtual void - perform() - { - string in_elf_path, in_abi_path, in_suppr_spec_path, in_public_headers_path, - out_abi_path; - abigail::ir::environment_sptr env; +/// Constructor. +/// +/// Task to be executed for each DWARF test entry in @ref +/// abigail::tests::read_common::InOutSpec. +/// +/// @param InOutSpec the array containing set of tests. +/// +/// @param a_out_abi_base the output base directory for abixml files. +/// +/// @param a_in_elf_base the input base directory for object files. +/// +/// @param a_in_elf_base the input base directory for expected +/// abixml files. +test_task_dwarf::test_task_dwarf(const InOutSpec &s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base) + : test_task(s, a_out_abi_base, a_in_elf_base, a_in_abi_base) + {} - in_elf_path = in_elf_base + spec.in_elf_path; - if (spec.in_suppr_spec_path) - in_suppr_spec_path = in_elf_base + spec.in_suppr_spec_path; - else - in_suppr_spec_path.clear(); +/// The thread function to execute each DWARF test entry in @ref +/// abigail::tests::read_common::InOutSpec. +/// +/// This reads the corpus into memory, saves it to disk, loads it +/// again and compares the new in-memory representation against the +void +test_task_dwarf::perform() +{ + abigail::ir::environment_sptr env; - if (spec.in_public_headers_path) - in_public_headers_path = spec.in_public_headers_path; - if (!in_public_headers_path.empty()) - in_public_headers_path = in_elf_base + spec.in_public_headers_path; + set_in_elf_path(); + set_in_suppr_spec_path(); + set_in_public_headers_path(); - env.reset(new abigail::ir::environment); - abigail::elf_reader::status status = + env.reset(new abigail::ir::environment); + abigail::elf_reader::status status = abigail::elf_reader::STATUS_UNKNOWN; - vector di_roots; - ABG_ASSERT(abigail::tools_utils::file_exists(in_elf_path)); - read_context_sptr ctxt = create_read_context(in_elf_path, - di_roots, - env.get()); - ABG_ASSERT(ctxt); - if (!in_suppr_spec_path.empty()) - set_suppressions(*ctxt, in_suppr_spec_path); - - if (!in_public_headers_path.empty()) - set_suppressions_from_headers(*ctxt, in_public_headers_path); - - abigail::corpus_sptr corp = read_corpus_from_elf(*ctxt, status); - // if there is no output and no input, assume that we do not care about the - // actual read result, just that it succeeded. - if (!spec.in_abi_path && !spec.out_abi_path) - { - // Phew! we made it here and we did not crash! yay! - return; - } - if (!corp) - { - error_message = string("failed to read ") + in_elf_path + "\n"; - is_ok = false; - return; - } - corp->set_path(spec.in_elf_path); - // Do not take architecture names in comparison so that these - // test input binaries can come from whatever arch the - // programmer likes. - corp->set_architecture_name(""); + vector di_roots; + ABG_ASSERT(abigail::tools_utils::file_exists(in_elf_path)); + read_context_sptr ctxt = create_read_context(in_elf_path, + di_roots, + env.get()); + ABG_ASSERT(ctxt); + if (!in_suppr_spec_path.empty()) + set_suppressions(*ctxt, in_suppr_spec_path); + + if (!in_public_headers_path.empty()) + set_suppressions_from_headers(*ctxt, in_public_headers_path); + + abigail::corpus_sptr corp = read_corpus_from_elf(*ctxt, status); + // if there is no output and no input, assume that we do not care about the + // actual read result, just that it succeeded. + if (!spec.in_abi_path && !spec.out_abi_path) + { + // Phew! we made it here and we did not crash! yay! + return; + } + if (!corp) + { + error_message = string("failed to read ") + in_elf_path + "\n"; + is_ok = false; + return; + } + corp->set_path(spec.in_elf_path); + // Do not take architecture names in comparison so that these + // test input binaries can come from whatever arch the + // programmer likes. + corp->set_architecture_name(""); - out_abi_path = out_abi_base + spec.out_abi_path; - if (!abigail::tools_utils::ensure_parent_dir_created(out_abi_path)) - { - error_message = - string("Could not create parent directory for ") + out_abi_path; - is_ok = false; - return; - } + if (!(is_ok = set_out_abi_path())) + return; - ofstream of(out_abi_path.c_str(), std::ios_base::trunc); - if (!of.is_open()) - { - error_message = string("failed to read ") + out_abi_path + "\n"; - is_ok = false; - return; - } - write_context_sptr write_ctxt - = create_write_context(corp->get_environment(), of); - set_type_id_style(*write_ctxt, spec.type_id_style); - is_ok = write_corpus(*write_ctxt, corp, /*indent=*/0); - of.close(); + if (!(is_ok = serialize_corpus(out_abi_path, corp))) + return; - string abidw = string(get_build_dir()) + "/tools/abidw"; - string drop_private_types; - if (!in_public_headers_path.empty()) - drop_private_types += "--headers-dir " + in_public_headers_path + - " --drop-private-types"; - string cmd = abidw + " " + drop_private_types + " --abidiff " + in_elf_path; - if (system(cmd.c_str())) - { - error_message = string("ABIs differ:\n") - + in_elf_path - + "\nand:\n" - + out_abi_path - + "\n"; - is_ok = false; - } + if (!(is_ok = run_abidw())) + return; - in_abi_path = in_abi_base + spec.in_abi_path; - cmd = "diff -u " + in_abi_path + " " + out_abi_path; - if (system(cmd.c_str())) - is_ok = false; - } -}; // end struct test_task + if (!(is_ok = run_diff())) + return; +} -typedef shared_ptr test_task_sptr; +/// Create a new DWARF instance for task to be execute by the testsuite. +/// +/// @param s the @ref abigail::tests::read_common::InOutSpec +/// tests container. +/// +/// @param a_out_abi_base the output base directory for abixml files. +/// +/// @param a_in_elf_base the input base directory for object files. +/// +/// @param a_in_abi_base the input base directory for abixml files. +/// +/// @return abigail::tests::read_common::test_task instance. +static test_task* +new_task(const InOutSpec* s, string& a_out_abi_base, + string& a_in_elf_base, string& a_in_abi_base) +{ + return new test_task_dwarf(*s, a_out_abi_base, + a_in_elf_base, a_in_abi_base); +} int main(int argc, char *argv[]) { - bool no_parallel = false; - - if (argc == 2) + options opts; + if (!parse_command_line(argc, argv, opts)) { - if (argv[1] == string("--no-parallel")) - no_parallel = true; - else - { - cerr << "unrecognized option\n"; - cerr << "usage: " << argv[0] << " [--no-parallel]\n" ; - return 1; - } + if (!opts.wrong_option.empty()) + emit_prefix(argv[0], cerr) + << "unrecognized option: " << opts.wrong_option << "\n"; + display_usage(argv[0], cerr); + return 1; } - /// Create a task queue. The max number of worker threads of the - /// queue is the number of the concurrent threads supported by the - /// processor of the machine this code runs on. But if - /// --no-parallel was provided then the number of worker threads - /// equals 1. - const size_t num_tests = sizeof(in_out_specs) / sizeof (InOutSpec) - 1; - size_t num_workers = (no_parallel - ? 1 - : std::min(abigail::workers::get_number_of_threads(), - num_tests)); - abigail::workers::queue task_queue(num_workers); - bool is_ok = true; - - string out_abi_base = string(get_build_dir()) + "/tests/"; - string in_elf_base = string(abigail::tests::get_src_dir()) + "/tests/"; - string in_abi_base = in_elf_base; - - for (InOutSpec *s = in_out_specs; s->in_elf_path; ++s) - { - test_task_sptr t(new test_task(*s, out_abi_base, - in_elf_base, - in_abi_base)); - ABG_ASSERT(task_queue.schedule_task(t)); - } - - /// Wait for all worker threads to finish their job, and wind down. - task_queue.wait_for_workers_to_complete(); - - // Now walk the results and print whatever error messages need to be - // printed. - - const vector& completed_tasks = - task_queue.get_completed_tasks(); - - ABG_ASSERT(completed_tasks.size() == num_tests); - - for (vector::const_iterator ti = - completed_tasks.begin(); - ti != completed_tasks.end(); - ++ti) - { - test_task_sptr t = dynamic_pointer_cast(*ti); - if (!t->is_ok) - { - is_ok = false; - if (!t->error_message.empty()) - cerr << t->error_message << '\n'; - } - } + // compute number of tests to be executed. + const size_t num_tests = sizeof(in_out_specs) / sizeof(InOutSpec) - 1; - return !is_ok; + return run_tests(num_tests, in_out_specs, opts, new_task); }