From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 96B9A3858D28 for ; Tue, 23 Nov 2021 15:49:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 96B9A3858D28 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 1ANFC4F3008367 for ; Tue, 23 Nov 2021 15:49:10 GMT Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by mx0b-00069f02.pphosted.com with ESMTP id 3cg461j27v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 23 Nov 2021 15:49:02 +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 1ANFac03053852 for ; Tue, 23 Nov 2021 15:48:59 GMT Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2101.outbound.protection.outlook.com [104.47.55.101]) by userp3030.oracle.com with ESMTP id 3cep4ymk5p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 23 Nov 2021 15:48:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ERLM66J5tyPBZUL8g3G7DrdGCmi29PiHV1Mub2wsE7SFWT/g/gTZqfY/Ir7BDcgZzDYDZEolZWG/k6qrQeUGRUtI6+Hzw/x5ej16z3ewo52L+pUDOBEYHbCSGwP7yrFxhyxJ+zDtDrzzEurL1BT16ZtT0dzks1e0OhPE5J7dWa2mTXNVoOQd939ZDCJznDuU1wnSMBHTZQnU15x2iRDEZYZZKbtL6AzXXbHgq5w57Qi8HoTzkVAX4E2ezQjchP09Tc/1Di7Nt8Aw5LlNmzYxFxUwHTVhkxLpI8r3bNrxi8CsehV/2EkKqB0yvew543uOfE3F8EF4idRsGL1mgk2gXA== 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=UPAFJIJW23a4jX8pwqxSEL/pBJXEYWDj0EjkqrFZH34=; b=VbTlqFrp5YO6f7pL+8dKzSmcm/pRkvlCxdLGQF0m0hVRgVOJI6CiBr2MQozjamD41ykrgsNZCxTzepZlMNYGrwgVQeRknRmhxcB1i05aP5eHNVisduP1rKo/JyrExtFF9ZVfPC0elyiHQztoYBWBXLNaeZBDVFg7GeF7MjWXWHOugDE8C+WMKGy40xHUbxgsQTg/wKrAVeCeM3KMz71uyiJPsWo2A3vbNA/NpJJ7N/w3V4/KtKTevq1LKj9aSKwR0nOQqUT07K0jz6xTfgRCVAXKlJLpweDiVcF3iRcfRNgh1eLHb8/CcclL3NPhn2YJyliPjP5+gJtUk1E4r2MfdQ== 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 BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) by BYAPR10MB2807.namprd10.prod.outlook.com (2603:10b6:a03:8e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4713.19; Tue, 23 Nov 2021 15:48:45 +0000 Received: from BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::48bf:86b4:32e1:6574]) by BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::48bf:86b4:32e1:6574%4]) with mapi id 15.20.4713.025; Tue, 23 Nov 2021 15:48:45 +0000 From: "Jose E. Marchesi" To: "Guillermo E. Martinez via Libabigail" Subject: Re: [PATCH v2] Add regression tests for ctf reading References: <20211118041625.622972-1-guillermo.e.martinez@oracle.com> <20211122213353.2456208-1-guillermo.e.martinez@oracle.com> Date: Tue, 23 Nov 2021 16:48:35 +0100 In-Reply-To: <20211122213353.2456208-1-guillermo.e.martinez@oracle.com> (Guillermo E. Martinez via Libabigail's message of "Mon, 22 Nov 2021 15:33:53 -0600") Message-ID: <87fsrmhnzg.fsf@oracle.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Content-Type: text/plain X-ClientProxiedBy: LO4P123CA0400.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:189::9) To BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) MIME-Version: 1.0 Received: from termi.oracle.com (141.143.193.73) by LO4P123CA0400.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:189::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4713.22 via Frontend Transport; Tue, 23 Nov 2021 15:48:42 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9e837487-8bc1-413e-a525-08d9ae98ba2d X-MS-TrafficTypeDiagnostic: BYAPR10MB2807: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4502; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kw+mAj7ESk8aWx2iT6LIBAbltB3Loxl6cywNli45ncQFVyV/jcAA6J3EYB9WxSfNPBuyDNGPPhFUFrDHKCtRDu++xUs/Ims4aw45n4y65AG9exsr5FPSF4CipVvM77iBxXaS8lcvKax/y8IC0N5taC9+hJX3G8UwLEoYvFABTSG0wR+Ylki/Gd5EUxWtj255Pz/If1GdBia2/aieE+2HmKif+MvjGbwUCPAsVigHUNzDDykg3oJYLWJ07sBBdF3REmx5LVOHz+jVZWpRqnepLdwzaqi4JxYoqoWcjtuQDQQlJF25TzkQUfblWjibJkY8OKt9u4DLXEQq3NnsgZNamTa9kzKGoLc1LK+u2Zq+mZc+fMKtWJ3glkkC/jQGQ+eSvXPcJSNqfcsXa3RUwEGO6NDhQiTRtca4+wtd0P0IeyWVY86nGDzKyX/votvtCbmo7Eh7pOLLanfttwl6GcPUjRJvYhMg3kcQmnaaX68X/34MtfHOpAy87YSC3UGjcSnI6JJg0LfYBb0z+lzjgPXx4LYu54MW2tOhYHjffgfL5X+056BHfRpJfa4BXUSEot4mDwu8NMS5Lh62yf/2TqO1YV3QbAuFRBCL0EhKK9pn06jvnyYVuoXX7SUUXU8q/diiE9EihUVIniCxc64ywpcBfYuxhIarpJ6AxpRxP+I7uqnAz418QoFCNJAia0dR8OmHuIpD4W3H4G+rjKKhrInJ1U5Q729Tlf1UcRFom3om4UryUMh65CN20wanyoYh536x7/WenQcE3pTm6127TgrdjIc0IhwHFLOUHnHEo0GMeGd7XBrCIOM9KUE7kdBl4+2dMQUtst8HAsk+5xS5USpTww== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB2888.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(2906002)(107886003)(316002)(966005)(2616005)(36756003)(508600001)(8936002)(956004)(6486002)(83380400001)(86362001)(38350700002)(6916009)(38100700002)(52116002)(7696005)(19627235002)(26005)(8676002)(66946007)(66476007)(186003)(4326008)(5660300002)(66556008)(30864003)(6666004)(579004)(559001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Hi1TId75Du9e60efuAy0zUyrbBl6lOENx8HZ1Cpq6G66CK5rAFOi8WWdJf0R?= =?us-ascii?Q?Dia//Siqw5Dt2BC1qzVM1mp4/puLN3ZXQHTPs+eawTxspvubG1UVjWE+jPRv?= =?us-ascii?Q?8ZkY4+UXm+GGGsG97uFQDO6HghEVMGigtJeZXvI1g9kLVJ8m04gfMtDQifyS?= =?us-ascii?Q?2goAH0XnVPMEWSbWDZVY/3SdxFms7PzCfdHTFZfSMoHTLpKE7NOE022AG8/B?= =?us-ascii?Q?5PArizXAX3CbV+WnZptaUK7SiQyWd3nIFgSBS83kSKD8b2UM9MZssbzM8xOl?= =?us-ascii?Q?26PruHGqYBPbBMCwwYWgeN6u9bX4CguyeQ7+100oz7nDTSnD+e4DuX5hd1g8?= =?us-ascii?Q?UdbsESrLfCo+JtuO8p17bB+4bXBjTjEws5AMHV9hbG7hbzTqgP4DN6qxqoiF?= =?us-ascii?Q?VSbn9O4PuYYolsL5Fq+cjjRYhC75Zz9ad5S2zkY7DJOPal4QYbzSHkrGP+tm?= =?us-ascii?Q?t6QUoLJC+g9n0cZtRg5pIQ5gHWS4pbH4VH8zP/x/r1exAfddm9Ow7FhQBaVe?= =?us-ascii?Q?qR1EwU+bJ7+cXOAvrMbG32O76HxIdwBcHcVWFy8HSccR33iNn6w22fM0djGe?= =?us-ascii?Q?UKtgAgr7rcCz5VFM9brusmGpJTDwUdqLCm3ycoAamFZXPwGv11vzcyTd4xCm?= =?us-ascii?Q?K+/JWPCkhv3+qwNul31ybMN4rTIhSim79OkfI2qeGzvw1WPdP+8ugxQMPh37?= =?us-ascii?Q?3l/VQQ67+WjzZjudLjAjwUnVr9dSa19+I3Wx4NOzrngjHHnA17bN7C3n65F8?= =?us-ascii?Q?Q2DEP3EzfKn00ciaPXeVm19VtKH+aT32EJBqHw0RJssciqHIQ6vJ7913Y6lB?= =?us-ascii?Q?ie1JANFTxcCHFDTvzc3MLDM62+AgmCHBfs1yiCeBKHJoZcSSvljJ/Ey4JEl+?= =?us-ascii?Q?rIySxcUp6Ki+ZrHPH5XWXU2pfiEUiXY5eVmBjhrlzv0aZkS8G5cqHSemnZHi?= =?us-ascii?Q?oaO9g0nwIxeGH1kxo1ZEDRRk2k0MDbsdZzXRgbsUvLWx57o/3ZO3hkhYf8Ko?= =?us-ascii?Q?GIFdjLkx5NVMK1P2Apm35cxdP3EzYhPyI/Q+8zx3gGMg+1h59BleagYg3WbM?= =?us-ascii?Q?p4xmIwbdy+ZB0AVp4+uf/rpDuhr8gdIN+n1FXGn0wVBebtiNgC18Zcw152wq?= =?us-ascii?Q?vLGIa7ESp2IruY1I1ZvYwCpgfXl0XFKbvKmAX5KM2YCrVZ+cRoR8S0KSBbRs?= =?us-ascii?Q?nFL8QZUiNCsNXOWNZ1XJU2QPiAABNCwwaXrloxuVwHuzJHZXj/iWRf3mFftN?= =?us-ascii?Q?oWvDvm6vrsSUqRsc4iJjJfUFOsObD72LE/foIBuRvGqlaab3E4LtNRytyJGc?= =?us-ascii?Q?wRFf1Z/sFfPHeqZ0rTa4t55rkNLta5ul6EWSvcUO8Tw8/Yzb3c6NaD0O6bSS?= =?us-ascii?Q?wDhkNWv9kNTyiS3YBVosQYmRWAQiPCQQ/7FmUPLWr0ObZXETVJOxEahATlOX?= =?us-ascii?Q?u0jpKb58GMy9zzwS2C6Q1F8dlvDOf16XXY4G/YZufz/3TkBneW7vZ/2NcuZu?= =?us-ascii?Q?0Md+NZ762WKdxFoAXeONSzdm1uh+JMICdij8feoM6jUXxFRyf/1f9RMy18gf?= =?us-ascii?Q?WmZN7fJLNCodyndfjRrnos39C41P0UhE/TOiZJGnuYmMXlOyi0hXKHt4m3dX?= =?us-ascii?Q?kOscyO1LchmEmHW6qJWz1xFFen8kzJ+LDQu49ZzINuLA+95Z4vlyEIxOUeiB?= =?us-ascii?Q?9yFw3UL4KmMpz/EBAoZy3WaDPPI=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9e837487-8bc1-413e-a525-08d9ae98ba2d X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2888.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2021 15:48:45.5507 (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: K7z/yO2mXDK5znyiwdSXG0mQaLyQxz/Hzc2kpIV4bZc17wi2zF0KsHj6NPE1n5/NqWw932/0sYN/qjXI9qyt4+b4/IX866tkcIyKIa2JoLY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR10MB2807 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10176 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 phishscore=0 malwarescore=0 mlxlogscore=999 bulkscore=0 mlxscore=0 suspectscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2111230081 X-Proofpoint-GUID: PUM-CrqTphzM_RyJurfDw1UfTnejQJnq X-Proofpoint-ORIG-GUID: PUM-CrqTphzM_RyJurfDw1UfTnejQJnq X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, LIKELY_SPAM_BODY, MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: 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-List-Received-Date: Tue, 23 Nov 2021 15:49:17 -0000 I have a couple of general comments/questions regarding libabigail testing and DWARF/CTF. 1) The usage of diff in the testsuite puzzles me. I would have expected to find at least two kinds of tests in the testsuite: a) Tests testing the frontend/readers, which can assume the XML reader and comparison algorithm works properly. b) Tests testing the comparison algorithm, which can assume the frontend/readers work properly. This way no external comparison (like diffing) would be necessary. Is this not the case? 2) I am surprised by the fact the CTF reader seems to be working as good as the DWARF reader re. the testsuite. Not buying it. I think that the testsuite skips .cc tests when testing CTF support. So I wonder... to what extent are C features (not C++) tested using .cc files? If we want good coverage for both DWARF and CTF (and eventually BTF or other formats not supporting C++) then we would need to turn these .cc files into .c files... > Hello libabigail team, > > This patch includes regression tests v2 for CTF. > > The change from v1 is disable CTF test alias, because > currently is is not supported. > > Dependencies/limitations: > > * It was worked on the top of the following patches: > https://sourceware.org/pipermail/libabigail/2021q4/003853.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*: Likewise. > * tests/data/test-read-common/test4*: 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-ctf.c: Likewise. > * tests/data/test-read-ctf/test-enum-many-ctf.c: Likewise. > * tests/data/test-read-ctf/test-enum-symbol-ctf.c: Likewise. > * tests/data/test-read-ctf/test-struct-iteration-ctf.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/test-ambiguous-struct-A.o.hash.abi: > Testcase expected result. > * 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-ctf.o.abi: Likewise. > * tests/data/test-read-ctf/test-enum-many-ctf.o.hash.abi: Likewise. > * tests/data/test-read-ctf/test-enum-symbol-ctf.o.hash.abi: Likewise. > * tests/data/test-read-ctf/test-struct-iteration-ctf.o.abi: Likewise. > * tests/data/test-read-ctf/test0: Likewise. > * tests/data/test-read-ctf/test0.abi: Likewise. > * tests/data/test-read-ctf/test0.hash.abi: Likewise. > * tests/data/test-read-ctf/test1.so: Likewise. > * tests/data/test-read-ctf/test1.so.abi: Likewise. > * tests/data/test-read-ctf/test1.so.hash.abi: Likewise. > * tests/data/test-read-ctf/test2.so: Likewise. > * tests/data/test-read-ctf/test2.so.abi: Likewise. > * tests/data/test-read-ctf/test2.so.hash.abi: Likewise. > > Signed-off-by: Guillermo E. Martinez > --- > 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-exe-ctf.abi | 58 +++ > .../PR26261/PR26261-exe-dwarf.abi} | 52 ++- > .../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-ctf.abi | 22 ++ > .../PR27700/test-PR27700-dwarf.abi} | 8 +- > .../PR27700/test-PR27700.c | 2 + > tests/data/test-read-common/crti.c | 22 ++ > .../test-read-common/test-PR26568-1-ctf.o.abi | 56 +++ > .../test-PR26568-1-dwarf.o.abi} | 20 +- > .../test-PR26568-1.c | 3 + > .../test-read-common/test-PR26568-2-ctf.o.abi | 39 ++ > .../test-PR26568-2-dwarf.o.abi} | 18 +- > .../test-PR26568-2.c | 3 + > .../test3-alias-1-dwarf.so.hash.abi} | 6 +- > .../test3-alias-1.suppr | 0 > .../test3-alias-2-dwarf.so.hash.abi} | 6 +- > .../test3-alias-2.suppr | 0 > .../test3-alias-3-dwarf.so.hash.abi} | 6 +- > .../test3-alias-3.suppr | 0 > .../test3-alias-4-dwarf.so.hash.abi} | 2 +- > .../test3-alias-4.suppr | 0 > tests/data/test-read-common/test3-ctf.so.abi | 12 + > .../test-read-common/test3-ctf.so.hash.abi | 12 + > .../test3-dwarf.so.abi} | 6 +- > .../test3-dwarf.so.hash.abi} | 6 +- > 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-ctf.so.abi | 14 + > .../test-read-common/test4-ctf.so.hash.abi | 14 + > .../test4-dwarf.so.abi} | 12 +- > .../test4-dwarf.so.hash.abi} | 12 +- > tests/data/test-read-common/test4.c | 11 + > tests/data/test-read-common/test4.so | Bin 0 -> 16560 bytes > 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-enum-ctf.c | 8 + > tests/data/test-read-ctf/test-enum-ctf.o.abi | 24 ++ > tests/data/test-read-ctf/test-enum-many-ctf.c | 10 + > .../test-enum-many-ctf.o.hash.abi | 69 ++++ > .../data/test-read-ctf/test-enum-symbol-ctf.c | 1 + > .../test-enum-symbol-ctf.o.hash.abi | 16 + > .../test-read-ctf/test-struct-iteration-ctf.c | 28 ++ > .../test-struct-iteration-ctf.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-dwarf/PR26261/Makefile | 21 - > .../data/test-read-dwarf/PR26261/PR26261-exe | Bin 10976 -> 0 bytes > .../test-read-dwarf/PR27700/test-PR27700.o | Bin 3248 -> 0 bytes > tests/data/test-read-dwarf/test-PR26568-1.o | Bin 2864 -> 0 bytes > tests/data/test-read-dwarf/test-PR26568-2.o | Bin 2824 -> 0 bytes > tests/data/test-read-dwarf/test3.c | 11 - > tests/data/test-read-dwarf/test3.so | Bin 8851 -> 0 bytes > tests/data/test-read-dwarf/test4.c | 14 - > tests/data/test-read-dwarf/test4.so | Bin 3364 -> 0 bytes > tests/test-annotate.cc | 4 +- > tests/test-read-common.cc | 184 +++++++++ > tests/test-read-common.h | 148 +++++++ > tests/test-read-ctf.cc | 290 ++++++++++++++ > tests/test-read-dwarf.cc | 362 +++++++----------- > 88 files changed, 1829 insertions(+), 366 deletions(-) > create mode 100755 tests/data/test-read-common/PR26261/PR26261-exe > create mode 100644 tests/data/test-read-common/PR26261/PR26261-exe-ctf.abi > rename tests/data/{test-read-dwarf/PR26261/PR26261-exe.abi => test-read-common/PR26261/PR26261-exe-dwarf.abi} (53%) > 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%) > create mode 100644 tests/data/test-read-common/PR27700/test-PR27700-ctf.abi > rename tests/data/{test-read-dwarf/PR27700/test-PR27700.abi => test-read-common/PR27700/test-PR27700-dwarf.abi} (60%) > rename tests/data/{test-read-dwarf => test-read-common}/PR27700/test-PR27700.c (55%) > create mode 100644 tests/data/test-read-common/crti.c > create mode 100644 tests/data/test-read-common/test-PR26568-1-ctf.o.abi > rename tests/data/{test-read-dwarf/test-PR26568-1.o.abi => test-read-common/test-PR26568-1-dwarf.o.abi} (58%) > rename tests/data/{test-read-dwarf => test-read-common}/test-PR26568-1.c (61%) > create mode 100644 tests/data/test-read-common/test-PR26568-2-ctf.o.abi > rename tests/data/{test-read-dwarf/test-PR26568-2.o.abi => test-read-common/test-PR26568-2-dwarf.o.abi} (59%) > rename tests/data/{test-read-dwarf => test-read-common}/test-PR26568-2.c (56%) > rename tests/data/{test-read-dwarf/test3-alias-1.so.hash.abi => test-read-common/test3-alias-1-dwarf.so.hash.abi} (57%) > rename tests/data/{test-read-dwarf => test-read-common}/test3-alias-1.suppr (100%) > rename tests/data/{test-read-dwarf/test3-alias-2.so.hash.abi => test-read-common/test3-alias-2-dwarf.so.hash.abi} (73%) > rename tests/data/{test-read-dwarf => test-read-common}/test3-alias-2.suppr (100%) > rename tests/data/{test-read-dwarf/test3-alias-3.so.hash.abi => test-read-common/test3-alias-3-dwarf.so.hash.abi} (57%) > rename tests/data/{test-read-dwarf => test-read-common}/test3-alias-3.suppr (100%) > rename tests/data/{test-read-dwarf/test3-alias-4.so.hash.abi => test-read-common/test3-alias-4-dwarf.so.hash.abi} (74%) > rename tests/data/{test-read-dwarf => test-read-common}/test3-alias-4.suppr (100%) > create mode 100644 tests/data/test-read-common/test3-ctf.so.abi > create mode 100644 tests/data/test-read-common/test3-ctf.so.hash.abi > rename tests/data/{test-read-dwarf/test3.so.abi => test-read-common/test3-dwarf.so.abi} (75%) > rename tests/data/{test-read-dwarf/test3.so.hash.abi => test-read-common/test3-dwarf.so.hash.abi} (75%) > 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-ctf.so.abi > create mode 100644 tests/data/test-read-common/test4-ctf.so.hash.abi > rename tests/data/{test-read-dwarf/test4.so.abi => test-read-common/test4-dwarf.so.abi} (56%) > rename tests/data/{test-read-dwarf/test4.so.hash.abi => test-read-common/test4-dwarf.so.hash.abi} (55%) > 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/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-enum-ctf.c > create mode 100644 tests/data/test-read-ctf/test-enum-ctf.o.abi > create mode 100644 tests/data/test-read-ctf/test-enum-many-ctf.c > create mode 100644 tests/data/test-read-ctf/test-enum-many-ctf.o.hash.abi > create mode 100644 tests/data/test-read-ctf/test-enum-symbol-ctf.c > create mode 100644 tests/data/test-read-ctf/test-enum-symbol-ctf.o.hash.abi > create mode 100644 tests/data/test-read-ctf/test-struct-iteration-ctf.c > create mode 100644 tests/data/test-read-ctf/test-struct-iteration-ctf.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 > 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/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 > zcmeHPeQX@X6`$Sn+2^nGC63cH0di5PNJxGD0D=P~>^X6AZk@#BqZAcb)^}(7==sjv > z?S;5)1g%rb$qgh@Mb!^gQCp#?{iCRAX$43PO+)}yl>rGMRS1fJT2QF@l*QNe_h#q$ > z?$$O$Rf{ThN7{Mw-n`$NH*aQVXZLpRw!VQKx~2(Ey4Wg+3x^CTa&i=VC97mTqEQ%P > zod}CsNNR8xvWBQrVmhij6-)z4&j(7lldArtZh#}+AR^9_d6}|@L z6(NTwoS%w{7pi|u$CMvTS#Q3*FoBW6h9peyRE{yN#8GUFh@)<7b#P2)6mC{g#*rI@ > z8&tSKg=2a`=`-bcQcUPLqxx}1H^32Z5D{USmnrE|8hpu4P`M^d98sf+4oFT2ri{A= > zIP&vc6Ni1TYHz8yoKpQ`%Hioqr-n9N+L2DQr&F22q4q;Po7y*B8p&rP-Ll_gpLBQb > zJ|JD9X`n(Od8%7XMshx+;yGr7S-yzw2FSvT$c1U52XQlRTRGbtvr-vBJau4`*g4SO > zyUpy5bVn|O-pE)sqx4Kz(v^RjXa&b{EUZq|Q{DNht=X#$S)wr^-#E=x$SdQ)^&a&i > z;6=cTfENKT0$v2X2zU|jBH%^f|0e>m$$tc5Q~uXFgou6Tl&zPhW0PkBr{@FE^;&=N > zi5p|Z7h;ny&JOPHKYQw?<%WozeOO3x_V#6lD7D=S_}eXOw+nIlK& zP@U?VixqKv>#*eQ3sEym_E9s7n%UUo;aOn^iTxuXO4F}u#~x!t;RS}sV7oN^@SHDJ > z{8Q}VSFVm})3GP09c67JP&2BL8Hi`l$c(VtWSdh5AbP}U>q*(xTP+v7M~=7L?{7s{ > zTJArEU=)Hg9i>v~5q}By;u`dBIL&%9CMv+o&K3{PEmEWqpr%-OyLf<{niFcH$& > z-`laNU30~!i)TwulzV9u5C1t zNBgF!oI!c&!1UCv=h5St;$KLXgzOIlf9&*dq-E_9DvIc}14p-9{sk1i++Tb;dZ54f > zPIP~?_`!kL(f0Ka?;F_gA zZ1b~)S7`2h^@iy6(Ho*SM$OaEqnRY zUIe@de2Nj!==a4nzAIyBlYUD+Z?;rQfDV8j1HIynQt20 z^g__<-z=5Vpes;EN&EUncWH%`+1Ep+*} > zOyWCn+y%cHK}9qexTz3J#*dWo#~>a@{lUt5{T8XP > z9kTmyOr!n=s_zYk?$-N*tM2mk1;a;c`hx4f=ieUeyrVW2?3t|F88mJV_C$l7(ct>t > zV7NE93i`dlfc*V-4)7V+;l7bMFL@F0BH%^9i+~paF9Kc!ya;#^@FL(v;D0>=5&Zs3 > zsa8?Gr=fRMDK$9+H+6jpFH^j?!v}h}c#`mgqi@64%!_teDXa > zS$gNAQdSmx4lm#NhG10j{LXS%@eNX0h#p1dy(P-46yK&OlR8y+RN>i=P9?`nxiT^S > zqmtv#Nu`h9V5NVW(!*__ zaD>+<4~-{tsj+0nw$d8}-Ca9x8auJss%8d9*4>h$|2V{se*Zb?--!S^`umms&)kL; > z{|G3(`3-#;bd7$J9>c+oaf76y)4jc}g*Jou0#_ri(FT$G=QB}T<4 zUsSBp{eka86d3CgdR-mqqued@Kx;b{17nv6y?({DD2GJ7_8h2IqiJp@w4X@-8uF-Z > zBTx0?qwpk-l6U}zPuzoC^@P6Lpq_9KI27~>ygox&bx%m{FK5?- zeStesQ%^nd*O5NT=t-^96Vag26Abd+-7viWJ*pa|_f)Fzej4U|;&N&P2k@&w$b0ts > zT{V!uB;2Pn4l+nSEp!4+`U3YNuhAYtULI~gu^2BIojQt+&ljN3(m4D4<#G1aw#wmG > z(ec&SYTAcniZU3dv22jTt~a4-6*}*yObu?M)&@pfqsi$;Z`DxZkRYzNqq=E>)M=o} > z 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 > > literal 0 > HcmV?d00001 > > diff --git a/tests/data/test-read-common/PR26261/PR26261-exe-ctf.abi b/tests/data/test-read-common/PR26261/PR26261-exe-ctf.abi > new file mode 100644 > index 00000000..cb2e2f13 > --- /dev/null > +++ b/tests/data/test-read-common/PR26261/PR26261-exe-ctf.abi > @@ -0,0 +1,58 @@ > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > diff --git a/tests/data/test-read-dwarf/PR26261/PR26261-exe.abi b/tests/data/test-read-common/PR26261/PR26261-exe-dwarf.abi > similarity index 53% > rename from tests/data/test-read-dwarf/PR26261/PR26261-exe.abi > rename to tests/data/test-read-common/PR26261/PR26261-exe-dwarf.abi > index a24f3a44..cd631bf1 100644 > --- a/tests/data/test-read-dwarf/PR26261/PR26261-exe.abi > +++ b/tests/data/test-read-common/PR26261/PR26261-exe-dwarf.abi > @@ -1,12 +1,10 @@ > - > + > > > > > > > - > - > > > > @@ -16,18 +14,18 @@ > > > > - > + > > > - > - > - > - > + > + > + > + > > > - > - > - > + > + > + > > > > @@ -36,44 +34,44 @@ > > > > - > + > > - > - > - > + > + > + > > - > + > > > - > + > > > - > + > > > > > - > - > + > + > > > > > - > + > > - > - > + > + > > - > + > > > - > + > > > > > - > - > + > + > > > > 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-common/PR27700/test-PR27700-ctf.abi b/tests/data/test-read-common/PR27700/test-PR27700-ctf.abi > new file mode 100644 > index 00000000..62df1017 > --- /dev/null > +++ b/tests/data/test-read-common/PR27700/test-PR27700-ctf.abi > @@ -0,0 +1,22 @@ > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > diff --git a/tests/data/test-read-dwarf/PR27700/test-PR27700.abi b/tests/data/test-read-common/PR27700/test-PR27700-dwarf.abi > similarity index 60% > rename from tests/data/test-read-dwarf/PR27700/test-PR27700.abi > rename to tests/data/test-read-common/PR27700/test-PR27700-dwarf.abi > index e593f79f..fff6ff74 100644 > --- a/tests/data/test-read-dwarf/PR27700/test-PR27700.abi > +++ b/tests/data/test-read-common/PR27700/test-PR27700-dwarf.abi > @@ -1,15 +1,15 @@ > - > + > > > > - > + > > > > > > - > - > + > + > > > > 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-common/test-PR26568-1-ctf.o.abi b/tests/data/test-read-common/test-PR26568-1-ctf.o.abi > new file mode 100644 > index 00000000..d62474ec > --- /dev/null > +++ b/tests/data/test-read-common/test-PR26568-1-ctf.o.abi > @@ -0,0 +1,56 @@ > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > diff --git a/tests/data/test-read-dwarf/test-PR26568-1.o.abi b/tests/data/test-read-common/test-PR26568-1-dwarf.o.abi > similarity index 58% > rename from tests/data/test-read-dwarf/test-PR26568-1.o.abi > rename to tests/data/test-read-common/test-PR26568-1-dwarf.o.abi > index 5c891200..046d2d45 100644 > --- a/tests/data/test-read-dwarf/test-PR26568-1.o.abi > +++ b/tests/data/test-read-common/test-PR26568-1-dwarf.o.abi > @@ -1,16 +1,16 @@ > - > + > > > > - > + > > > - > + > > > > > - > + > > > > @@ -18,19 +18,19 @@ > > > > - > + > > - > + > > > - > + > > - > + > > > > - > - > + > + > > > > 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-common/test-PR26568-2-ctf.o.abi b/tests/data/test-read-common/test-PR26568-2-ctf.o.abi > new file mode 100644 > index 00000000..a934d15b > --- /dev/null > +++ b/tests/data/test-read-common/test-PR26568-2-ctf.o.abi > @@ -0,0 +1,39 @@ > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > diff --git a/tests/data/test-read-dwarf/test-PR26568-2.o.abi b/tests/data/test-read-common/test-PR26568-2-dwarf.o.abi > similarity index 59% > rename from tests/data/test-read-dwarf/test-PR26568-2.o.abi > rename to tests/data/test-read-common/test-PR26568-2-dwarf.o.abi > index cdb0243a..5240cee3 100644 > --- a/tests/data/test-read-dwarf/test-PR26568-2.o.abi > +++ b/tests/data/test-read-common/test-PR26568-2-dwarf.o.abi > @@ -1,11 +1,11 @@ > - > + > > > > - > + > > > - > + > > > > @@ -13,19 +13,19 @@ > > > > - > + > > - > + > > > - > + > > - > + > > > > - > - > + > + > > > > 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.so.hash.abi b/tests/data/test-read-common/test3-alias-1-dwarf.so.hash.abi > similarity index 57% > rename from tests/data/test-read-dwarf/test3-alias-1.so.hash.abi > rename to tests/data/test-read-common/test3-alias-1-dwarf.so.hash.abi > index 02795ad0..b3a4801a 100644 > --- a/tests/data/test-read-dwarf/test3-alias-1.so.hash.abi > +++ b/tests/data/test-read-common/test3-alias-1-dwarf.so.hash.abi > @@ -1,12 +1,12 @@ > - > + > > > > > > > - > - > + > + > > > > 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.so.hash.abi b/tests/data/test-read-common/test3-alias-2-dwarf.so.hash.abi > similarity index 73% > rename from tests/data/test-read-dwarf/test3-alias-2.so.hash.abi > rename to tests/data/test-read-common/test3-alias-2-dwarf.so.hash.abi > index 775a9a97..07a7f2c4 100644 > --- a/tests/data/test-read-dwarf/test3-alias-2.so.hash.abi > +++ b/tests/data/test-read-common/test3-alias-2-dwarf.so.hash.abi > @@ -1,4 +1,4 @@ > - > + > > > > @@ -9,8 +9,8 @@ > > > > - > - > + > + > > > > 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.so.hash.abi b/tests/data/test-read-common/test3-alias-3-dwarf.so.hash.abi > similarity index 57% > rename from tests/data/test-read-dwarf/test3-alias-3.so.hash.abi > rename to tests/data/test-read-common/test3-alias-3-dwarf.so.hash.abi > index 6c604948..7908bdb8 100644 > --- a/tests/data/test-read-dwarf/test3-alias-3.so.hash.abi > +++ b/tests/data/test-read-common/test3-alias-3-dwarf.so.hash.abi > @@ -1,12 +1,12 @@ > - > + > > > > > > > - > - > + > + > > > > 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.so.hash.abi b/tests/data/test-read-common/test3-alias-4-dwarf.so.hash.abi > similarity index 74% > rename from tests/data/test-read-dwarf/test3-alias-4.so.hash.abi > rename to tests/data/test-read-common/test3-alias-4-dwarf.so.hash.abi > index 912c710c..22a56fa5 100644 > --- a/tests/data/test-read-dwarf/test3-alias-4.so.hash.abi > +++ b/tests/data/test-read-common/test3-alias-4-dwarf.so.hash.abi > @@ -1,4 +1,4 @@ > - > + > > > > 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-ctf.so.abi b/tests/data/test-read-common/test3-ctf.so.abi > new file mode 100644 > index 00000000..9d55fec5 > --- /dev/null > +++ b/tests/data/test-read-common/test3-ctf.so.abi > @@ -0,0 +1,12 @@ > + > + > + > + > + > + > + > + > + > + > + > + > diff --git a/tests/data/test-read-common/test3-ctf.so.hash.abi b/tests/data/test-read-common/test3-ctf.so.hash.abi > new file mode 100644 > index 00000000..9d55fec5 > --- /dev/null > +++ b/tests/data/test-read-common/test3-ctf.so.hash.abi > @@ -0,0 +1,12 @@ > + > + > + > + > + > + > + > + > + > + > + > + > diff --git a/tests/data/test-read-dwarf/test3.so.abi b/tests/data/test-read-common/test3-dwarf.so.abi > similarity index 75% > rename from tests/data/test-read-dwarf/test3.so.abi > rename to tests/data/test-read-common/test3-dwarf.so.abi > index 04032c74..a9bf781f 100644 > --- a/tests/data/test-read-dwarf/test3.so.abi > +++ b/tests/data/test-read-common/test3-dwarf.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-common/test3-dwarf.so.hash.abi > similarity index 75% > rename from tests/data/test-read-dwarf/test3.so.hash.abi > rename to tests/data/test-read-common/test3-dwarf.so.hash.abi > index ea9ddc02..f429b22f 100644 > --- a/tests/data/test-read-dwarf/test3.so.hash.abi > +++ b/tests/data/test-read-common/test3-dwarf.so.hash.abi > @@ -1,4 +1,4 @@ > - > + > > > > @@ -10,8 +10,8 @@ > > > > - > - > + > + > > > > 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<>eFV zqpnp2<35cU`GBw{$a*Si`pu-@O7>j|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 zQ5MNIeC9fu>%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@6KOvoArk41 z^(-wVS~TaXCo-FpD;+0Ar!qogV;eP$VKGVZ%z!9k=elGbweg8Ewix?z+j_G7ef?XE > ztzEr4X&sh2u{)bP)^oh)XwNgdp&r?FX*UfqNu^VDtAiNMF#gDG0^lrDp-O*v!ZSvH > zW^*Q7Px#SksP!3{I=j=D%4Es-qF=9YUiO^#j_1GY;V%+%?8wo_aAoEj!JOv~&$u2D > zSf-}aEZ2tTj|}C94x9Oza!{pDGv5j-!{wtzGhaP-dQ25+e#0%47D@{Rzv+}`-9oEb > zE>QNjQ>xE6_1OZ_zgvZh6F6Zt-*lZyzU(&|zQ?KIWjfAu!C`l(2g}J` zsUxzKlJ_TINCNJW*)Q)MgiZQD)THIR<8_j>{CNELla_yPt)f4+%J?I!m+MyY``bj7 > zn?c z*bz_=_$c_d>?JC=cIYfzo**QVjUbFiYCjcLo+Jjspg2Uw6vnNxS__T9DG>(E2y0TC > z@#d_W)2b<}vfz zAr5J$ph{3BwOg8-v7M&l&A2UT*1f7Pb*EHnx)-H2TlZY4(;}q`wTPErz$< > z_I@q zh};MARL9ujFZUBcSwDOr5>`=5spnWHVJDlNVEa8Qc1ZdkCq1qqnO~V~$e5g8*3VYz > zELAY3_{%;ah^r(n!n^43pKsj%H8biFoEJmJ zVUj#fQQ&?P7ap#C94DLS|u zsV}L6`3?3*e8wed`zduMb+BJz|EaihitQJyOCIMQeibVG(iIy+<`VpB75@*|AKzBu > zB7Sj{*p1sQvA@ZN_@aY2llYPA7x&qA?8OGSKNvM8Vmef1UQutMN}B%<96#TPA!E}2 > EFPZjRv;Y7A > > literal 0 > HcmV?d00001 > > diff --git a/tests/data/test-read-common/test4-ctf.so.abi b/tests/data/test-read-common/test4-ctf.so.abi > new file mode 100644 > index 00000000..b8e0ead3 > --- /dev/null > +++ b/tests/data/test-read-common/test4-ctf.so.abi > @@ -0,0 +1,14 @@ > + > + > + > + > + > + > + > + > + > + > + > + > + > + > diff --git a/tests/data/test-read-common/test4-ctf.so.hash.abi b/tests/data/test-read-common/test4-ctf.so.hash.abi > new file mode 100644 > index 00000000..dbe34d9c > --- /dev/null > +++ b/tests/data/test-read-common/test4-ctf.so.hash.abi > @@ -0,0 +1,14 @@ > + > + > + > + > + > + > + > + > + > + > + > + > + > + > diff --git a/tests/data/test-read-dwarf/test4.so.abi b/tests/data/test-read-common/test4-dwarf.so.abi > similarity index 56% > rename from tests/data/test-read-dwarf/test4.so.abi > rename to tests/data/test-read-common/test4-dwarf.so.abi > index 71f64da3..c38fff66 100644 > --- a/tests/data/test-read-dwarf/test4.so.abi > +++ b/tests/data/test-read-common/test4-dwarf.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-common/test4-dwarf.so.hash.abi > similarity index 55% > rename from tests/data/test-read-dwarf/test4.so.hash.abi > rename to tests/data/test-read-common/test4-dwarf.so.hash.abi > index 471ff895..7223f5eb 100644 > --- a/tests/data/test-read-dwarf/test4.so.hash.abi > +++ b/tests/data/test-read-common/test4-dwarf.so.hash.abi > @@ -1,11 +1,11 @@ > - > + > > > > > > > - > + > > > > @@ -13,10 +13,10 @@ > > > > - > - > - > - > + > + > + > + > > > > diff --git a/tests/data/test-read-common/test4.c b/tests/data/test-read-common/test4.c > new file mode 100644 > index 00000000..ad274022 > --- /dev/null > +++ b/tests/data/test-read-common/test4.c > @@ -0,0 +1,11 @@ > +// gcc -shared -gctf -gdwarf-3 -mtune=generic -march=x86-64 -std=c99 -fPIC -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-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/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-enum-ctf.c b/tests/data/test-read-ctf/test-enum-ctf.c > new file mode 100644 > index 00000000..aa60d727 > --- /dev/null > +++ b/tests/data/test-read-ctf/test-enum-ctf.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-ctf.o.abi b/tests/data/test-read-ctf/test-enum-ctf.o.abi > new file mode 100644 > index 00000000..f36f3fad > --- /dev/null > +++ b/tests/data/test-read-ctf/test-enum-ctf.o.abi > @@ -0,0 +1,24 @@ > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > diff --git a/tests/data/test-read-ctf/test-enum-many-ctf.c b/tests/data/test-read-ctf/test-enum-many-ctf.c > new file mode 100644 > index 00000000..f2297d72 > --- /dev/null > +++ b/tests/data/test-read-ctf/test-enum-many-ctf.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-ctf.o.hash.abi b/tests/data/test-read-ctf/test-enum-many-ctf.o.hash.abi > new file mode 100644 > index 00000000..67a958a7 > --- /dev/null > +++ b/tests/data/test-read-ctf/test-enum-many-ctf.o.hash.abi > @@ -0,0 +1,69 @@ > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > diff --git a/tests/data/test-read-ctf/test-enum-symbol-ctf.c b/tests/data/test-read-ctf/test-enum-symbol-ctf.c > new file mode 100644 > index 00000000..f7f99c67 > --- /dev/null > +++ b/tests/data/test-read-ctf/test-enum-symbol-ctf.c > @@ -0,0 +1 @@ > +enum {red1, green1, blue1} primary1; > diff --git a/tests/data/test-read-ctf/test-enum-symbol-ctf.o.hash.abi b/tests/data/test-read-ctf/test-enum-symbol-ctf.o.hash.abi > new file mode 100644 > index 00000000..fea6eb8b > --- /dev/null > +++ b/tests/data/test-read-ctf/test-enum-symbol-ctf.o.hash.abi > @@ -0,0 +1,16 @@ > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > diff --git a/tests/data/test-read-ctf/test-struct-iteration-ctf.c b/tests/data/test-read-ctf/test-struct-iteration-ctf.c > new file mode 100644 > index 00000000..7df67ada > --- /dev/null > +++ b/tests/data/test-read-ctf/test-struct-iteration-ctf.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-ctf.o.abi b/tests/data/test-read-ctf/test-struct-iteration-ctf.o.abi > new file mode 100644 > index 00000000..72e0bdc3 > --- /dev/null > +++ b/tests/data/test-read-ctf/test-struct-iteration-ctf.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 > 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 > 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 z(`s`Hp|qtxX3XyUJ@3pjvwI`&%y&zpBiT$wpllKkiZw}yqBayCfCuXih;F*?6n)Zn > z^P1^1+;MFL6}`%Zb96DQ zRy9RjmfSe5sN;${4)iJQ58AD&6~|wXYM z<|azCg)Yv?Jla9593S|x%vkWn zj87;12 zCdY=G{){*2R+^r&b+$OwdDoe0%(%_Qlb)FJeNk}((QH(zcIev=h$Ev%hlZU2d%)h$ > z?aIi1S$S9OWX&mJF`jdMjT;&5X=N6eub5wBx*rGhe1!fct=~~pfzU&K<&e_zSTW`( > z%LzS?G0I9p&+`LiHK9+=8Q2Xq2p9wm0tNwtfI+|@U=T0}7zF+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~{ zNR^=~PF+P6%lqRvCRz4o@yzOaR!Gd(q1=YsFa`mGfI+|@U=T0}7z7Lg1_6VBLBJqj > z5csbkklDHEAb(@!Z+O;99G8g}h|Ur{^-dh0BU&eVi71!b6cL#xCq!nxH?#BRE!`LC > zL*m_}|0-QeZ^yCxhMDUf$?bTkXY04Szb6j$9o&20-STrS#~-HaGWp@#B#AQiTSWgz > zx#c(8!Cdc;vctFBFhU8m{X0Z2Z(t{rDFy+9fI+|@U=T0}7z7Lg1_6VBLBJsJA4CBA > zPO;Avdq{cjDwmrTX>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}T zV@HQcOOKdSD(isq;R#aF;RA#o89g>MIO-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`;^@Oe0C zT?s>B)3d|xd}5-h1epIGdnbkQNVZ2AjHU%$Eq)&{f>;Oe`r)7S8;UTj13-6g5U z9%6WgA|C4m&`a8p^YLs!e*E6=BOSL5@mP0&Vx2)QvS7wR=Ho!TMnF8)1)zB3(0}-W > z4pBU>IUr-*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_ zFN)f?peUYmt!?)Q@%&4djK?}{hmMC|Ivz5w zHHtwz=!>KVpLE@OzmiHRV@i~ U6x%k4_vJZDAzn&WN_;y0Q+>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-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 > 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 > 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{VJ zOXtzim=O<`%9gn>zc3?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! zi4*YDBarei;Z#aH63r7%y$Pp}oKlhrcWflnhco9fT_-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(Cnb z{IRzPu`Q0jq8yp4{weq?6tepNEB9ZWQ|do`HC4RAsUAHyLU5Dw_qbsC&e7LckEcD& > eTI%mq6q5QsDADdbYgAWO{B5rPI~B-W@891PcJreE > > diff --git a/tests/data/test-read-dwarf/test-PR26568-1.o b/tests/data/test-read-dwarf/test-PR26568-1.o > deleted file mode 100644 > index 9249e16d4d52b4556b1cf071cc504d2a71204619..0000000000000000000000000000000000000000 > GIT binary patch > literal 0 > HcmV?d00001 > > literal 2864 > zcmbtV&2Jl35TCctADe9KIx)~j;jlIJDv*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< zrMSqJ@}<-0Ei=QoWISiEGPY3wu9I=CTr;rAr@=5T8(hb(gj&STPA3@o0$f9)US?dM > z=9wduGR)iT`Q z&f(11Kg9yh(b?mHFbLgIXzlH9RJW=%Yu#?e+_^YC8r)#-eXW-@4OzR_Z z%#F46t+ndLMf3c=+cq0c7~|H(XID*Y5FYyOcGvaYz-yuD1g+loxK_2Qo2J!;N^dxD > zEA3(XHLue3!b;z3I!&+Zc>PMp8@r zb}pIcvB}kk_ZTnpu~-0mYaiIS#8wva`aRs1ClRL~jc8M^6iXjyJB8dW42a>>8L4>X > z|Nb}4$x~k#Zm>8?mBZ1KHn@0Hs*gkBu_l}x@(F9Ia+sSM35^3@%9O#Okb+YGc;Qn9 > zhsmp(c$ZLHO6 z>Z<~$_~d!tOyE@auCPB6Qq7a>KPzHLlun4>JOMWaPCX|31bcL65IRkiVGzrn)IxV0 > zf=zD-?B-|$cHs6MyX`g)y9b`%8KN)Jon|v|-Yfs60Z > z_J^Ts zeLCqLJSu-()JHKhWc{CJ(74wmL?3+mE3GF%)W3`WU*T7Q)4d`{-dX(Dh{iU~>YB*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-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{ z^TCyCuW5{d6b6@Iwvs47Gdt58k=lR?l;KA6_+j(-?xW^sR~|ixaMGH;7`bd_LDyLG > zxODTk`)F8*j7AjuM1s?iF&?x9rZrI2C%|-4kh_ra{17yQW!}W4eg{~V6o8D8p(%SA > z490Gwma}QtBhcs``M?%QC6PJU_xEs>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 z6X3>-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@< T_fK)t`1eHp_ovKQQThJ@C > > 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 > 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 > z z!zJlqeR?QqfiK=B*nQ;_`?1v;QCO9rK;%T(bWfzi==?q!L zEq=U;(R%8~s~N46etZX`_0Nyjl-4&t9xa_`{CIhO2KythlF|C&=ZBqyi2HuLJYV7J > z*;&e$`T1jv; zSDuatd0_AxogTd?`jg&98K={-jLW+Mw?D$@G%fSfDS8XX_qdAP+uTCjT0M{u > zEB70YB#b*nX?}74iFk*E_X}M9j_^3wzvUnLKczWdK987}L;W`-{omsJ z((^8HJux;*2YF~?`6FCGe!#vU{q8ze{$9P#^_0I?>l`o7H@+iq`Mqj_2MEgVVf zMlRie2jw$+xt{X>W4wZ%QNV-ppP%CT%k!U~t-!Afe))fq13c)tY`_)yp`iVh3ix*b > zKM=tGE5L*Dt1M+Xwo` zQqO9JQ?P7JFU~SJR!(P4$28RLW8Eh}a{v=hzPhJY$bLH39COdPMlqM0!*e)4_3{?a > z*7{i8R4I;maI}A9KpVJl7PGqi38-$^1#L>t8<@sD` z9vK{bY+y_q>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/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 zXGI$W-7Fcd0lHpr9NlpZ+eOGK0W9P;_i~%>{+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!AWwJ3 zw}kzuPlJ;}CWSmM z4*+G!{|JB2^N!)25uWJ}2+-~XNJz9hr0d=Q8e45gq=aBuqWvJr(nmPp$V`wv_h7{t > zLBfd{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 zfHT6M=ilx>$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@> zK5xzZ81VUN#^a6i(TsCef+)qO>>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/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..431a660e > --- /dev/null > +++ b/tests/test-read-common.cc > @@ -0,0 +1,184 @@ > +// -*- Mode: C++ -*- > +// > + > +#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 > +{ > + > +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) > + {} > + > +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 true; > +} > + > +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; > +} > + > +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; > +} > + > +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" > + ; > +} > + > +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; > +} > + > +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); > + 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..784f41f5 > --- /dev/null > +++ b/tests/test-read-common.h > @@ -0,0 +1,148 @@ > +#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 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 > + > +/// The task that peforms 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; > + > + void > + set_in_elf_path() > + { > + in_elf_path = in_elf_base + spec.in_elf_path; > + } > + > + 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(); > + } > + > + 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; > + } > + > + 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; > + } > + > + 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; > + > +struct options > +{ > + string wrong_option; > + bool parallel; > + > + options() > + : parallel(true) > + {} > + > + ~options() > + { > + } > +}; > + > +void > +display_usage(const string& prog_name, ostream& out); > + > +bool > +parse_command_line(int argc, char* argv[], options& opts); > + > +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..e54cc3db > --- /dev/null > +++ b/tests/test-read-ctf.cc > @@ -0,0 +1,290 @@ > +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception > +// -*- Mode: C++ -*- > +// > +// Copyright (C) 2021 Oracle, Inc. > +// > +// Author: Guillermo E. Martinez > + > +/// @file read 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-common/test3-ctf.so.abi", > + "output/test-read-common/test3-ctf.so.abi" > + }, > + { > + "data/test-read-common/test3.so", > + "", > + "", > + HASH_TYPE_ID_STYLE, > + "data/test-read-common/test3-ctf.so.hash.abi", > + "output/test-read-common/test3-ctf.so.hash.abi" > + }, > + { > + "data/test-read-ctf/test-enum-many-ctf.o", > + "", > + "", > + HASH_TYPE_ID_STYLE, > + "data/test-read-ctf/test-enum-many-ctf.o.hash.abi", > + "output/test-read-ctf/test-enum-many-ctf.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-common/test4-ctf.so.abi", > + "output/test-read-common/test4-ctf.so.abi" > + }, > + { > + "data/test-read-common/test4.so", > + "", > + "", > + HASH_TYPE_ID_STYLE, > + "data/test-read-common/test4-ctf.so.hash.abi", > + "output/test-read-common/test4-ctf.so.hash.abi" > + }, > + { > + "data/test-read-ctf/test-enum-ctf.o", > + "", > + "", > + SEQUENCE_TYPE_ID_STYLE, > + "data/test-read-ctf/test-enum-ctf.o.abi", > + "output/test-read-ctf/test-enum-ctf.o.abi" > + }, > + { > + "data/test-read-ctf/test-enum-symbol-ctf.o", > + "", > + "", > + HASH_TYPE_ID_STYLE, > + "data/test-read-ctf/test-enum-symbol-ctf.o.hash.abi", > + "output/test-read-ctf/test-enum-symbol-ctf.o.hash.abi" > + }, > + { > + "data/test-read-common/PR27700/test-PR27700.o", > + "", > + "data/test-read-common/PR27700/pub-incdir", > + HASH_TYPE_ID_STYLE, > + "data/test-read-common/PR27700/test-PR27700-ctf.abi", > + "output/test-read-common/PR27700/test-PR27700-ctf.abi", > + }, > + // This should be the last entry. > + {NULL, NULL, NULL, SEQUENCE_TYPE_ID_STYLE, NULL, NULL} > +}; > + > +/// The task that peforms the 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() > + {} > +}; > + > +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 actual test. > +/// > +/// 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; > +} > + > +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_in_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; > + } > + > + /// 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; > + > + 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..b84fcaf0 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,56 +86,56 @@ 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, > - "data/test-read-dwarf/test3.so.abi", > - "output/test-read-dwarf/test3.so.abi" > + "data/test-read-common/test3-dwarf.so.abi", > + "output/test-read-common/test3-dwarf.so.abi" > }, > { > - "data/test-read-dwarf/test3.so", > + "data/test-read-common/test3.so", > "", > "", > HASH_TYPE_ID_STYLE, > - "data/test-read-dwarf/test3.so.hash.abi", > - "output/test-read-dwarf/test3.so.hash.abi" > + "data/test-read-common/test3-dwarf.so.hash.abi", > + "output/test-read-common/test3-dwarf.so.hash.abi" > }, > // 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", > - "output/test-read-dwarf/test3-alias-1.so.hash.abi" > + "data/test-read-common/test3-alias-1-dwarf.so.hash.abi", > + "output/test-read-common/test3-alias-1-dwarf.so.hash.abi" > }, > // 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", > - "output/test-read-dwarf/test3-alias-2.so.hash.abi" > + "data/test-read-common/test3-alias-2-dwarf.so.hash.abi", > + "output/test-read-common/test3-alias-2-dwarf.so.hash.abi" > }, > // 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", > - "output/test-read-dwarf/test3-alias-3.so.hash.abi" > + "data/test-read-common/test3-alias-3-dwarf.so.hash.abi", > + "output/test-read-common/test3-alias-3-dwarf.so.hash.abi" > }, > // 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", > - "output/test-read-dwarf/test3-alias-4.so.hash.abi" > + "data/test-read-common/test3-alias-4-dwarf.so.hash.abi", > + "output/test-read-common/test3-alias-4-dwarf.so.hash.abi" > }, > // suppress the main symbols with alias (function+variable) in .o file > { > @@ -165,20 +147,20 @@ 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, > - "data/test-read-dwarf/test4.so.abi", > - "output/test-read-dwarf/test4.so.abi" > + "data/test-read-common/test4-dwarf.so.abi", > + "output/test-read-common/test4-dwarf.so.abi" > }, > { > - "data/test-read-dwarf/test4.so", > + "data/test-read-common/test4.so", > "", > "", > HASH_TYPE_ID_STYLE, > - "data/test-read-dwarf/test4.so.hash.abi", > - "output/test-read-dwarf/test4.so.hash.abi" > + "data/test-read-common/test4-dwarf.so.hash.abi", > + "output/test-read-common/test4-dwarf.so.hash.abi" > }, > { > "data/test-read-dwarf/test5.o", > @@ -449,28 +431,28 @@ InOutSpec in_out_specs[] = > NULL, > }, > { > - "data/test-read-dwarf/PR26261/PR26261-exe", > + "data/test-read-common/PR26261/PR26261-exe", > "", > "", > SEQUENCE_TYPE_ID_STYLE, > - "data/test-read-dwarf/PR26261/PR26261-exe.abi", > - "output/test-read-dwarf/PR26261/PR26261-exe.abi", > + "data/test-read-common/PR26261/PR26261-exe-dwarf.abi", > + "output/test-read-common/PR26261/PR26261-exe-dwarf.abi", > }, > { > - "data/test-read-dwarf/test-PR26568-1.o", > + "data/test-read-common/test-PR26568-1.o", > "", > "", > SEQUENCE_TYPE_ID_STYLE, > - "data/test-read-dwarf/test-PR26568-1.o.abi", > - "output/test-read-dwarf/test-PR26568-1.o.abi", > + "data/test-read-common/test-PR26568-1-dwarf.o.abi", > + "output/test-read-common/test-PR26568-1-dwarf.o.abi", > }, > { > - "data/test-read-dwarf/test-PR26568-2.o", > + "data/test-read-common/test-PR26568-2.o", > "", > "", > SEQUENCE_TYPE_ID_STYLE, > - "data/test-read-dwarf/test-PR26568-2.o.abi", > - "output/test-read-dwarf/test-PR26568-2.o.abi", > + "data/test-read-common/test-PR26568-2-dwarf.o.abi", > + "output/test-read-common/test-PR26568-2-dwarf.o.abi", > }, > { > "data/test-read-dwarf/test-libandroid.so", > @@ -481,12 +463,12 @@ 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", > + "data/test-read-common/PR27700/test-PR27700-dwarf.abi", > + "output/test-read-common/PR27700/test-PR27700-dwarf.abi", > }, > { > "data/test-read-dwarf/test-libaaudio.so", > @@ -553,146 +535,107 @@ set_suppressions_from_headers(read_context& read_ctxt, const string& path) > } > > /// The task that peforms the tests. > -struct test_task : public abigail::workers::task > +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() > {} > +}; > > - /// 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; > +/// The task that peforms the tests. > +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(); > +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); > + 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(""); > > - 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(""); > + if (!(is_ok = set_out_abi_path())) > + return; > > - 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 = serialize_corpus(out_abi_path, corp))) > + 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 = run_abidw())) > + 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_diff())) > + 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 > > -typedef shared_ptr test_task_sptr; > +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_in_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 > @@ -701,49 +644,6 @@ main(int argc, char *argv[]) > /// --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'; > - } > - } > > - return !is_ok; > + return run_tests(num_tests, in_out_specs, opts, new_task); > }