From patchwork Tue Dec 14 06:25:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Guillermo E. Martinez" X-Patchwork-Id: 48888 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CFCF33858414 for ; Tue, 14 Dec 2021 06:25:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CFCF33858414 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639463158; bh=nkIcly+lE4cTIO7nidMPtxrWrKlqgT/oWA2tkMk9y/s=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Help:List-Subscribe:From:Reply-To:From; b=ekKry1Pj0MXX/8lFC/3xTldv2f6dr6bt6bhIYc4E4qxXngLbYGEULMomshuigLe3L wrs7C0v5FLMdIrDByb0BpPDNWdcXqNzI3s7Tw5tZhKriVb5c74AgsG27EPw84+uz1h QTmHjkmKb7JgWibtXtw+D1sg6JtMg5NX5iM+VuHA= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id C20643858D39 for ; Tue, 14 Dec 2021 06:25:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C20643858D39 Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BE1kRZC004456 for ; Tue, 14 Dec 2021 06:25:41 GMT Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3cx3mrtv8b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 14 Dec 2021 06:25:40 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BE6F3Yq056527 for ; Tue, 14 Dec 2021 06:25:39 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2172.outbound.protection.outlook.com [104.47.56.172]) by userp3020.oracle.com with ESMTP id 3cvnepdtdt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 14 Dec 2021 06:25:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B5KZMzsULPw5IE1WgndPQdtxSIhELak0/64/Hyf0+KrE5myzS0NnSxQYicQYdOgUVGF6NCY/1xGJuLr5AwJdx7hZeLgQhXG10qE2FmdCUl/GLdoI14vbcen8mEbofjj3pIde/+pREYGbNuZbnXEcybjux0c648YT7cnCTA7nvcLfKpG633j1UKXXQo/Utw7fE+R4zf6zMUPN0rY3cbm2Pm7if6nvtVQD2YHgg5om3i63Hh2sZfVNErGnNjO9sxpBkaOwvPEvpBLmx3n1ykfvW1IwQWPrPfk3hMQCN1IUdOsH7E74gbnZimu9UWbeSHaCB0iSB6VVw/pyFKRkxo4FYg== 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=nkIcly+lE4cTIO7nidMPtxrWrKlqgT/oWA2tkMk9y/s=; b=O2i9XDYMb7o6MT6Wz62FU6x0hUM3QxzJBMzh+2k0TgiugE+U02MpRGhclnpLemk6F00wG2+6oCXV5/rj/LRrZySRzAT3Z7DfSflaq9aZ66DdkdHtlo/1DEpZkGyntF4xROYS4oPuG3/Aef993Nkow7J6gehGz0nbHpwiSvpDAbGhObT1aUJeSbbNVJy8nU/5SFDToAZxhZ3I9j06X2XrtTRR9G/0Tnw2Uhs3BfduuW3e7cbC73DdunnIRKVzpm81p2+D6hT6sp3okWIcSwHLCEG1rChCInkGsSHRk+jwqH160y03dAUUniWD9GrCvjg+c68oV3WzL8BSCiA89y2vag== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from BL0PR10MB2852.namprd10.prod.outlook.com (2603:10b6:208:76::22) by BLAPR10MB4963.namprd10.prod.outlook.com (2603:10b6:208:326::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4778.11; Tue, 14 Dec 2021 06:25:28 +0000 Received: from BL0PR10MB2852.namprd10.prod.outlook.com ([fe80::6927:5e6b:31ff:14bd]) by BL0PR10MB2852.namprd10.prod.outlook.com ([fe80::6927:5e6b:31ff:14bd%3]) with mapi id 15.20.4778.018; Tue, 14 Dec 2021 06:25:28 +0000 To: libabigail@sourceware.org Subject: [PATCH v4] Add regression tests for ctf reading Date: Tue, 14 Dec 2021 00:25:15 -0600 Message-Id: <20211214062515.655198-1-guillermo.e.martinez@oracle.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211201030645.3804678-1-guillermo.e.martinez@oracle.com> References: <20211201030645.3804678-1-guillermo.e.martinez@oracle.com> X-ClientProxiedBy: SA9PR13CA0048.namprd13.prod.outlook.com (2603:10b6:806:22::23) To BL0PR10MB2852.namprd10.prod.outlook.com (2603:10b6:208:76::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ed700384-05c6-451f-3975-08d9beca84d3 X-MS-TrafficTypeDiagnostic: BLAPR10MB4963:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SJhrzLnLh3AjlcKwyWCmdIii9KIpFjc0PGbEPsmth0/ROaPXN7Y1JnFfxUFxwP+I1wIPOPnJy8+Eqaw3Oiq75kKfwxDmRQD9bVw7nsBGMYWB+OrfCiHPfSBVkTbiAl7LHaB82HzYXvWGE1EX56OzNjmmDM1Ubnmya7rJn2gToMGPTvKdmP5Ea0UBr4mdzr81l6QDQbouUvYcF9Q1DqYnq0GyNaFfWhYQomXIeSTKmdcCv9VSPyUwgeSkTsbmTnWrh5fHqY+PC4OGtyzPhoVYSxwpJaM1n0Ly+55AapMp1KnIe737DhFWfkqfuF3E7aJczvh5gedwlY09QofGJQllQkNLVEJEm1Ya29wqWrMtzX6AzWDxlkPy5S11Qs4bMiWgeovCgInqr+cBqaRsQzGMckJVFf/+80i7PJC6wdF8NcgPWvuZW8ug3JysIVQ1mh4+nmLZDHOH2ilgrsfUt0Sya+1U2F/c9NL51vh+d9oTSzlH+iC/CqC8E2jQ3TWbwE6H8rsU1Phrtx5QQzS5na3TioIIZyV2Zqj14yQ2uRPrijEd9jCyyIMfLYhziTBt35GqR8IzbcF9tnX28mOxfQs3KDx4+R8KIdiJEhbkvXPEr8+XSaWa6qPZ+Z9IJxdb1n30kYvvHtgT6kSvB7E45fEi8EvIs2eTfHAQpCB/9xJACkh971HUC9eUm1W0bJ/p6Zqo7IXDSgvQzqS4gUyzZpkdiw0kOHF3ADy66jEZaWTlcSILTq6Tua6gi725DKLX2a1TTbgRLgMdxL2fXVoeZ5JS7xY/bpswqeQhtpkKMPx5eJXtlfCmItgiZKxCyyLFEwwI6WEhOp1TLyzvm+jLe9H2eqYDKfSuBIXfanmZhJemwVk= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BL0PR10MB2852.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(6666004)(1076003)(36756003)(19627235002)(508600001)(6512007)(52116002)(86362001)(6506007)(2906002)(966005)(103116003)(8676002)(4326008)(6486002)(316002)(8936002)(38100700002)(107886003)(6916009)(2616005)(83380400001)(5660300002)(38350700002)(66476007)(30864003)(66556008)(26005)(186003)(66946007)(460914002)(579004)(559001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: L2voan2y8c2vAxY7lr6x4BGkcGbx/vePfIZSKwVSpdwCRpHwQdAko2ccn3KzGUP/NMEO+NHWdDcAY3rn+pWIh44myN8dIlXTGwCuvLv8D+jKurjV8FP8Tiv3cC8ytmqLuyeNF6Sm9RCudbCn9ljr/Px7i5k4d5Mrf+RwLesHPaSsEt45mOHHeHS7NFhC52PSYjfmxKk50EgcXTndNuTxsBh3B6ntQbIELmuK+7SsVAkZYAmiCXOa721bqQ1DcFuR38EsdE2gWaQKPhOUGwHJmV3/uHjSvWEr0IsV0oICklvkLlbmXCKBZyc9yEXLjPv1UZIvKv283RcafKge8sDJCoaKZTAoLh22Zr+lS+3Ot9ZjktpLwg9LshVUP6PA4pMVkB/aWICrpZ3g7cpW4a6949N4e/aJq1i5rYgDF0M5sr+WSMGLdiB3zrzaD/VS20BDTXQ9baPS1cTb6J+fUzGjt+QGlhBtnKNuOUoemTzabG5x2MILqj+8jIibtjY8FMhUTJsVcSfxs+EHdVS1aRB71V4c/iSKOYn7ypxEfoEXICo7cxkDmuHf7rEqu7hVR0xzGTIkF77tq46o+GNHcveIBGNGj/75ftNf7kQ/WnKv76mSy8didZRJd8tucL0pVvACAGTQadS6U6RG0XO7Ey0u0cLfr6N4i5A9y8C0N6AoPj7XKumUsmslwoScj7T0lvf5eiGGL1Iv1AUsI0WSZjHbX09nut4cV011uez4TNijD6hx8iMXXFXMnrDToJ+HAdIVmQw7hUlUKhA+n9rUKBp3ciP+IyFM/VILgWSuwt9QcAbDcb8IQ1pSjuredjxfgSJ5uEd1R81e5JO2A3+iWPFt1+UGtu23oFWHP5F4INL6nOXshTkpyRgwZxc5fL7WFkFpVooEzkCAZhqkP/6Ozwc667dzEYPJQ8ZXn3DLDyMCiQYKQ7n3TgHK5s4FLWHHUqCq1pw7y8nvzJAS8MfcOsWbjpwtX+96cLZeSXsFgkaP3z5z+vBGd4to5lbp5fVttLax1isoXIL9lmjmlq+1/+lwuMOkziW8+B8Ju6pMnIjmdLap7orpuhOmG3urY6MyTxjX4jkOH4o/rso2PGw/1sjgWzPtN10J2LPYFTpiUd0xp121qsJjbMru3fAOp2P65IhTZnOYWJF7gynYzJwIzOBbKrUf9dNqxx35XCc2grSY95INLWcXyUHQNHSoxluw2zDyprQ4cngPIhU0ZwHIF/ZaGLWm4zinUn/G7pdSkDVL8/CQm5f/PVigZaejv8jW+I6IqjUM73Huzvm8dSCzGsjC1TgO22GwLjiM7Dx4hHMxPwWFa5iVA/b7KaZ+J40OYCLF3buCh90iMJUWu8Q48F+E4qhtRzOw/jdCbGV5UUku3jZy/V2+qDUX2jnJGZ7fy9BMYMmBev9aEwETkqK8yogUILr3cmb0fbtwp63DTcIWvH3cVDc+2Q8utvByKAJQOu0NO/BajpH46XGIjYuMuQFoUgYoSB2SQJeTxXnu0as9IER8tqtBYSz7yhNN30aoiuy95lxllQT1QXdI7FV/ae2rsvpXqwFx/Gqq+sIFb0bxAwVfHd06XUdhlEXncwPRyqxDSU1J00E9dZREXpPHuFvdSOynPLJhPSgekSgmwxPzNE4b3eEG7FswpJqY+4s7oObXeFfSVHNss2Kfi1sSV0HLPA== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: ed700384-05c6-451f-3975-08d9beca84d3 X-MS-Exchange-CrossTenant-AuthSource: BL0PR10MB2852.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Dec 2021 06:25:28.3225 (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: Y7SG7nPhH3Km4F9TVrzIZui+3Qa+AdctRFwc4aCf771MSlgLh9HdMUr+cWHOkTkx1AAjCaQ5S3m7ZBhWrgeefwvHN8z0+tacSHUWS4vTJfE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR10MB4963 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10197 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 adultscore=0 malwarescore=0 bulkscore=0 spamscore=0 mlxlogscore=999 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112140035 X-Proofpoint-ORIG-GUID: riqpBb2C_vcRh6SrIv0PSJ3PFygH81U6 X-Proofpoint-GUID: riqpBb2C_vcRh6SrIv0PSJ3PFygH81U6 X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_LOTSOFHASH, LIKELY_SPAM_BODY, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libabigail@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list of the Libabigail project List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-Patchwork-Original-From: "Guillermo E. Martinez via Libabigail" From: "Guillermo E. Martinez" Reply-To: "Guillermo E. Martinez" Errors-To: libabigail-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libabigail" Hello libabigail team, This patch includes regression tests v4 for CTF. The changes from v3: - Add mising files in CTF test harness - make distcheck-fast run successfuly. Dependencies/limitations: * It relies in the following patch: https://sourceware.org/pipermail/libabigail/2021q4/003910.html * Some CTF tests were *disabled* because it generates the XML ABI corpus with *same information* but the XML nodes *are not* always in the *same order*, so using diff command fails. Details here: https://sourceware.org/pipermail/libabigail/2021q4/003824.html Comments will be appreciated. Thanks in advanced!, Guillermo This patch implements some regression tests for ctf reading. Since the code share a lot of functionalities already used in the readi-dwarf test, a library was built and test common harness were moved to a common location. So input files for test-read-{dwarf,ctf}.cc now are located in: tests/data/test-read-common directory, ABIs description are stored in the same location but in a separate file, one for each binary debugging information: (e.g, test4-ctf.so.abi and test4-dwarf.so.abi) * tests/test-read-ctf.cc: New ctf reading regression test. * tests/test-read-common.cc: New library to be used with test-read-{ctf,dwarf}.cc. * tests/test-read-common.h: Likewise. * tests/test-annotate.cc (in_out_specs): Adjust path for input files. * tests/Makefile.am: Build new tests/test-read-ctf.cc file. * tests/data/Makefile.am: Add test inputs and expected files. Add libtestreadcommon.a test library and use it for test-read-{ctf,dwarf}. * tests/test-read-dwarf.cc: Adapt test to use libtestreadcommon.a in test-read-common.{cc,h}. * tests/data/test-annotate/test3.so.abi: Adjust ELF input path file location to ./tests/data/test-read-common. * tests/data/test-annotate/test4.so.abi: Likewise. * tests/data/test-read-common/PR26261: Move test harness to test-read-common directory. * tests/data/test-read-common/PR27700: Likewise. * tests/data/test-read-common/test-PR26568-*: Likewise. * tests/data/test-read-common/test3.{c,so}: Likewise. * tests/data/test-read-common/test4.{c,so}: Likewise. * tests/data/test-read-common/crti*: Helper object to export _init and _fini sysmbols. * tests/data/test-read-ctf/test-ambiguous-struct-A.c: New testcase. * tests/data/test-read-ctf/test-ambiguous-struct-B.c: Likewise. * tests/data/test-read-ctf/test-conflicting-type-syms-a.c: Likewise. * tests/data/test-read-ctf/test-conflicting-type-syms-b.c: Likewise. * tests/data/test-read-ctf/test-enum.c: Likewise. * tests/data/test-read-ctf/test-enum-many.c: Likewise. * tests/data/test-read-ctf/test-enum-symbol.c: Likewise. * tests/data/test-read-ctf/test-struct-iteration.c: Likewise. * tests/data/test-read-ctf/test-dynamic-array.c: Likewise. * tests/data/test-read-ctf/test0.c: Likewise. * tests/data/test-read-ctf/test1.c: Likewise. * tests/data/test-read-ctf/test2.c: Likewise. * tests/data/test-read-ctf/test5.c: Likewise. * tests/data/test-read-ctf/test7.{c,h}: Likewise. * tests/data/test-read-ctf/test8.c: Likewise. * tests/data/test-read-ctf/test9.c: Likewise. * tests/data/test-read-ctf/test-ambiguous-struct-A.o.hash.abi: Testcase expected result. * tests/data/test-read-ctf/PR26261/PR26261-exe.abi: Likewise. * tests/data/test-read-ctf/PR27700/test-PR27700.abi: Likewise. * tests/data/test-read-ctf/test-ambiguous-struct-A.o.hash.abi: Likewise. * tests/data/test-read-ctf/test-ambiguous-struct-B.o.hash.abi: Likewise. * tests/data/test-read-ctf/test-conflicting-type-syms-a.o.hash.abi: Likewise. * tests/data/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi: Likewise. * tests/data/test-read-ctf/test-enum.o.abi: Likewise. * tests/data/test-read-ctf/test-enum-many.o.hash.abi: Likewise. * tests/data/test-read-ctf/test-enum-symbol.o.hash.abi: Likewise. * tests/data/test-read-ctf/test-struct-iteration.o.abi: Likewise. * tests/data/test-read-ctf/test-dynamic-array.o.abi: Likewise. * tests/data/test-read-ctf/test0: Likewise. * tests/data/test-read-ctf/test0*.abi: Likewise. * tests/data/test-read-ctf/test1.so: Likewise. * tests/data/test-read-ctf/test1*.abi: Likewise. * tests/data/test-read-ctf/test2.so: Likewise. * tests/data/test-read-ctf/test2*.abi: Likewise. * tests/data/test-read-ctf/test3.so.abi: Likewise. * tests/data/test-read-ctf/test4*.abi: Likewise. * tests/data/test-read-ctf/test5.o.abi: Likewise. * tests/data/test-read-ctf/test7.o.abi: Likewise. * tests/data/test-read-ctf/test8.o.abi: Likewise. * tests/data/test-read-ctf/test9.o.abi: Likewise. * tests/data/test-read-dwarf/PR26261/PR26261-exe.abi: Update expected abixml file. * tests/data/test-read-dwarf/PR27700/test-PR27700.abi: Likewise. * tests/data/test-read-dwarf/test-PR26568-1.*.abi: Likewise. * tests/data/test-read-dwarf/test3*.abi: Likewise. * tests/data/test-read-dwarf/test4*.abi: Likewise. * doc/api/libabigail.doxy: Add tests/test-read-common.{cc,h} to doxygen. Signed-off-by: Guillermo E. Martinez --- doc/api/libabigail.doxy | 6 +- tests/Makefile.am | 24 +- tests/data/Makefile.am | 113 ++++-- tests/data/test-annotate/test3.so.abi | 4 +- tests/data/test-annotate/test4.so.abi | 10 +- .../PR26261/Makefile | 4 +- .../data/test-read-common/PR26261/PR26261-exe | Bin 0 -> 19032 bytes .../PR26261/PR26261-main.c | 0 .../test-read-common/PR26261/PR26261-main.o | Bin 0 -> 4800 bytes .../PR26261/PR26261-obja.c | 0 .../PR26261/PR26261-obja.h | 0 .../test-read-common/PR26261/PR26261-obja.o | Bin 0 -> 3592 bytes .../PR26261/PR26261-objb.c | 0 .../PR26261/PR26261-objb.h | 0 .../test-read-common/PR26261/PR26261-objb.o | Bin 0 -> 3560 bytes .../PR27700/include-dir/priv.h | 0 .../PR27700/include-dir/pub.h | 0 .../PR27700/pub-incdir/inc.h | 0 .../PR27700/test-PR27700.c | 2 + .../test-read-common/PR27700/test-PR27700.o | Bin 0 -> 3552 bytes tests/data/test-read-common/crti.c | 22 ++ .../test-PR26568-1.c | 3 + tests/data/test-read-common/test-PR26568-1.o | Bin 0 -> 3536 bytes .../test-PR26568-2.c | 3 + tests/data/test-read-common/test-PR26568-2.o | Bin 0 -> 3048 bytes .../test3-alias-1.suppr | 0 .../test3-alias-2.suppr | 0 .../test3-alias-3.suppr | 0 .../test3-alias-4.suppr | 0 tests/data/test-read-common/test3.c | 26 ++ tests/data/test-read-common/test3.so | Bin 0 -> 14824 bytes tests/data/test-read-common/test4.c | 11 + tests/data/test-read-common/test4.so | Bin 0 -> 16560 bytes .../test-read-ctf/PR26261/PR26261-exe.abi | 58 +++ .../test-read-ctf/PR27700/test-PR27700.abi | 22 ++ tests/data/test-read-ctf/test-PR26568-1.o.abi | 56 +++ tests/data/test-read-ctf/test-PR26568-2.o.abi | 39 ++ tests/data/test-read-ctf/test-alias.c | 15 + tests/data/test-read-ctf/test-alias.o.abi | 19 + .../test-read-ctf/test-ambiguous-struct-A.c | 8 + .../test-read-ctf/test-ambiguous-struct-A.o | Bin 0 -> 1504 bytes .../test-ambiguous-struct-A.o.hash.abi | 36 ++ .../test-read-ctf/test-ambiguous-struct-B.c | 5 + .../test-read-ctf/test-ambiguous-struct-B.o | Bin 0 -> 1344 bytes .../test-ambiguous-struct-B.o.hash.abi | 23 ++ .../test-conflicting-type-syms-a.c | 5 + .../test-conflicting-type-syms-a.o | Bin 0 -> 1360 bytes .../test-conflicting-type-syms-a.o.hash.abi | 14 + .../test-conflicting-type-syms-b.c | 5 + .../test-conflicting-type-syms-b.o | Bin 0 -> 1344 bytes .../test-conflicting-type-syms-b.o.hash.abi | 13 + tests/data/test-read-ctf/test-dynamic-array.c | 13 + tests/data/test-read-ctf/test-dynamic-array.o | Bin 0 -> 1712 bytes .../test-read-ctf/test-dynamic-array.o.abi | 30 ++ tests/data/test-read-ctf/test-enum-many.c | 10 + tests/data/test-read-ctf/test-enum-many.o | Bin 0 -> 2032 bytes .../test-read-ctf/test-enum-many.o.hash.abi | 69 ++++ tests/data/test-read-ctf/test-enum-symbol.c | 1 + tests/data/test-read-ctf/test-enum-symbol.o | Bin 0 -> 1312 bytes .../test-read-ctf/test-enum-symbol.o.hash.abi | 16 + tests/data/test-read-ctf/test-enum.c | 8 + tests/data/test-read-ctf/test-enum.o | Bin 0 -> 1440 bytes tests/data/test-read-ctf/test-enum.o.abi | 24 ++ .../test-read-ctf/test-struct-iteration.c | 28 ++ .../test-read-ctf/test-struct-iteration.o.abi | 96 +++++ tests/data/test-read-ctf/test0 | Bin 0 -> 16656 bytes tests/data/test-read-ctf/test0.abi | 54 +++ tests/data/test-read-ctf/test0.c | 32 ++ tests/data/test-read-ctf/test0.hash.abi | 54 +++ tests/data/test-read-ctf/test1.c | 25 ++ tests/data/test-read-ctf/test1.so | Bin 0 -> 15592 bytes tests/data/test-read-ctf/test1.so.abi | 23 ++ tests/data/test-read-ctf/test1.so.hash.abi | 23 ++ tests/data/test-read-ctf/test2.c | 19 + tests/data/test-read-ctf/test2.so | Bin 0 -> 15616 bytes tests/data/test-read-ctf/test2.so.abi | 25 ++ tests/data/test-read-ctf/test2.so.hash.abi | 25 ++ tests/data/test-read-ctf/test3.so.abi | 12 + tests/data/test-read-ctf/test3.so.hash.abi | 12 + tests/data/test-read-ctf/test4.so.abi | 14 + tests/data/test-read-ctf/test4.so.hash.abi | 14 + tests/data/test-read-ctf/test5.c | 41 ++ tests/data/test-read-ctf/test5.o | Bin 0 -> 2720 bytes tests/data/test-read-ctf/test5.o.abi | 50 +++ tests/data/test-read-ctf/test6.c | 35 ++ tests/data/test-read-ctf/test6.o.abi | 0 tests/data/test-read-ctf/test7.c | 8 + tests/data/test-read-ctf/test7.h | 24 ++ tests/data/test-read-ctf/test7.o | Bin 0 -> 2152 bytes tests/data/test-read-ctf/test7.o.abi | 42 +++ tests/data/test-read-ctf/test8.c | 7 + tests/data/test-read-ctf/test8.o | Bin 0 -> 1496 bytes tests/data/test-read-ctf/test8.o.abi | 13 + tests/data/test-read-ctf/test9.c | 13 + tests/data/test-read-ctf/test9.o | Bin 0 -> 1864 bytes tests/data/test-read-ctf/test9.o.abi | 57 +++ .../data/test-read-dwarf/PR26261/PR26261-exe | Bin 10976 -> 0 bytes .../test-read-dwarf/PR26261/PR26261-exe.abi | 52 ++- .../test-read-dwarf/PR27700/test-PR27700.abi | 10 +- .../test-read-dwarf/PR27700/test-PR27700.o | Bin 3248 -> 0 bytes tests/data/test-read-dwarf/test-PR26568-1.o | Bin 2864 -> 0 bytes .../data/test-read-dwarf/test-PR26568-1.o.abi | 20 +- tests/data/test-read-dwarf/test-PR26568-2.o | Bin 2824 -> 0 bytes .../data/test-read-dwarf/test-PR26568-2.o.abi | 18 +- .../test-read-dwarf/test3-alias-1.so.hash.abi | 6 +- .../test-read-dwarf/test3-alias-2.so.hash.abi | 6 +- .../test-read-dwarf/test3-alias-3.so.hash.abi | 6 +- .../test-read-dwarf/test3-alias-4.so.hash.abi | 2 +- tests/data/test-read-dwarf/test3.c | 11 - tests/data/test-read-dwarf/test3.so | Bin 8851 -> 0 bytes tests/data/test-read-dwarf/test3.so.abi | 6 +- tests/data/test-read-dwarf/test3.so.hash.abi | 6 +- tests/data/test-read-dwarf/test4.c | 14 - tests/data/test-read-dwarf/test4.so | Bin 3364 -> 0 bytes tests/data/test-read-dwarf/test4.so.abi | 12 +- tests/data/test-read-dwarf/test4.so.hash.abi | 12 +- tests/test-annotate.cc | 4 +- tests/test-read-common.cc | 264 +++++++++++++ tests/test-read-common.h | 179 +++++++++ tests/test-read-ctf.cc | 353 +++++++++++++++++ tests/test-read-dwarf.cc | 356 +++++++----------- 121 files changed, 2441 insertions(+), 359 deletions(-) rename tests/data/{test-read-dwarf => test-read-common}/PR26261/Makefile (82%) create mode 100755 tests/data/test-read-common/PR26261/PR26261-exe rename tests/data/{test-read-dwarf => test-read-common}/PR26261/PR26261-main.c (100%) create mode 100644 tests/data/test-read-common/PR26261/PR26261-main.o 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%) create mode 100644 tests/data/test-read-common/PR26261/PR26261-obja.o 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%) create mode 100644 tests/data/test-read-common/PR26261/PR26261-objb.o rename tests/data/{test-read-dwarf => test-read-common}/PR27700/include-dir/priv.h (100%) rename tests/data/{test-read-dwarf => test-read-common}/PR27700/include-dir/pub.h (100%) rename tests/data/{test-read-dwarf => test-read-common}/PR27700/pub-incdir/inc.h (100%) rename tests/data/{test-read-dwarf => test-read-common}/PR27700/test-PR27700.c (55%) create mode 100644 tests/data/test-read-common/PR27700/test-PR27700.o create mode 100644 tests/data/test-read-common/crti.c rename tests/data/{test-read-dwarf => test-read-common}/test-PR26568-1.c (61%) create mode 100644 tests/data/test-read-common/test-PR26568-1.o rename tests/data/{test-read-dwarf => test-read-common}/test-PR26568-2.c (56%) create mode 100644 tests/data/test-read-common/test-PR26568-2.o rename tests/data/{test-read-dwarf => test-read-common}/test3-alias-1.suppr (100%) rename tests/data/{test-read-dwarf => test-read-common}/test3-alias-2.suppr (100%) rename tests/data/{test-read-dwarf => test-read-common}/test3-alias-3.suppr (100%) rename tests/data/{test-read-dwarf => test-read-common}/test3-alias-4.suppr (100%) create mode 100644 tests/data/test-read-common/test3.c create mode 100755 tests/data/test-read-common/test3.so create mode 100644 tests/data/test-read-common/test4.c create mode 100755 tests/data/test-read-common/test4.so create mode 100644 tests/data/test-read-ctf/PR26261/PR26261-exe.abi create mode 100644 tests/data/test-read-ctf/PR27700/test-PR27700.abi create mode 100644 tests/data/test-read-ctf/test-PR26568-1.o.abi create mode 100644 tests/data/test-read-ctf/test-PR26568-2.o.abi create mode 100644 tests/data/test-read-ctf/test-alias.c create mode 100644 tests/data/test-read-ctf/test-alias.o.abi create mode 100644 tests/data/test-read-ctf/test-ambiguous-struct-A.c create mode 100644 tests/data/test-read-ctf/test-ambiguous-struct-A.o 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 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 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 create mode 100644 tests/data/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi create mode 100644 tests/data/test-read-ctf/test-dynamic-array.c create mode 100644 tests/data/test-read-ctf/test-dynamic-array.o create mode 100644 tests/data/test-read-ctf/test-dynamic-array.o.abi create mode 100644 tests/data/test-read-ctf/test-enum-many.c create mode 100644 tests/data/test-read-ctf/test-enum-many.o create mode 100644 tests/data/test-read-ctf/test-enum-many.o.hash.abi create mode 100644 tests/data/test-read-ctf/test-enum-symbol.c create mode 100644 tests/data/test-read-ctf/test-enum-symbol.o create mode 100644 tests/data/test-read-ctf/test-enum-symbol.o.hash.abi create mode 100644 tests/data/test-read-ctf/test-enum.c create mode 100644 tests/data/test-read-ctf/test-enum.o create mode 100644 tests/data/test-read-ctf/test-enum.o.abi create mode 100644 tests/data/test-read-ctf/test-struct-iteration.c create mode 100644 tests/data/test-read-ctf/test-struct-iteration.o.abi create mode 100755 tests/data/test-read-ctf/test0 create mode 100644 tests/data/test-read-ctf/test0.abi create mode 100644 tests/data/test-read-ctf/test0.c create mode 100644 tests/data/test-read-ctf/test0.hash.abi create mode 100644 tests/data/test-read-ctf/test1.c create mode 100755 tests/data/test-read-ctf/test1.so create mode 100644 tests/data/test-read-ctf/test1.so.abi create mode 100644 tests/data/test-read-ctf/test1.so.hash.abi create mode 100644 tests/data/test-read-ctf/test2.c create mode 100755 tests/data/test-read-ctf/test2.so create mode 100644 tests/data/test-read-ctf/test2.so.abi create mode 100644 tests/data/test-read-ctf/test2.so.hash.abi create mode 100644 tests/data/test-read-ctf/test3.so.abi create mode 100644 tests/data/test-read-ctf/test3.so.hash.abi create mode 100644 tests/data/test-read-ctf/test4.so.abi create mode 100644 tests/data/test-read-ctf/test4.so.hash.abi create mode 100644 tests/data/test-read-ctf/test5.c create mode 100644 tests/data/test-read-ctf/test5.o create mode 100644 tests/data/test-read-ctf/test5.o.abi create mode 100644 tests/data/test-read-ctf/test6.c create mode 100644 tests/data/test-read-ctf/test6.o.abi create mode 100644 tests/data/test-read-ctf/test7.c create mode 100644 tests/data/test-read-ctf/test7.h create mode 100644 tests/data/test-read-ctf/test7.o create mode 100644 tests/data/test-read-ctf/test7.o.abi create mode 100644 tests/data/test-read-ctf/test8.c create mode 100644 tests/data/test-read-ctf/test8.o create mode 100644 tests/data/test-read-ctf/test8.o.abi create mode 100644 tests/data/test-read-ctf/test9.c create mode 100644 tests/data/test-read-ctf/test9.o create mode 100644 tests/data/test-read-ctf/test9.o.abi delete mode 100755 tests/data/test-read-dwarf/PR26261/PR26261-exe delete mode 100644 tests/data/test-read-dwarf/PR27700/test-PR27700.o delete mode 100644 tests/data/test-read-dwarf/test-PR26568-1.o delete mode 100644 tests/data/test-read-dwarf/test-PR26568-2.o delete mode 100644 tests/data/test-read-dwarf/test3.c delete mode 100755 tests/data/test-read-dwarf/test3.so delete mode 100644 tests/data/test-read-dwarf/test4.c delete mode 100755 tests/data/test-read-dwarf/test4.so create mode 100644 tests/test-read-common.cc create mode 100644 tests/test-read-common.h create mode 100644 tests/test-read-ctf.cc diff --git a/doc/api/libabigail.doxy b/doc/api/libabigail.doxy index e3136dd8..33f0eb49 100644 --- a/doc/api/libabigail.doxy +++ b/doc/api/libabigail.doxy @@ -683,7 +683,11 @@ WARN_LOGFILE = LIBABIGAIL_OUTPUT/doc/api/doxygen-warnings.txt # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = LIBABIGAIL_INPUT/src LIBABIGAIL_INPUT/include/ +INPUT = LIBABIGAIL_INPUT/src \ + LIBABIGAIL_INPUT/include \ + LIBABIGAIL_INPUT/tests/test-read-common.cc \ + LIBABIGAIL_INPUT/tests/test-read-common.h + # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is diff --git a/tests/Makefile.am b/tests/Makefile.am index e3855aea..17e2d4b4 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -25,6 +25,10 @@ runtestdifffilter \ runtestreaddwarf \ runtestcanonicalizetypes.sh +if CTF_READER +TESTS += runtestreadctf +endif + # rather cheap tests TESTS+= \ runtestabicompat \ @@ -72,7 +76,7 @@ runtestcanonicalizetypes.output.final.txt noinst_PROGRAMS= $(TESTS) testirwalker testdiff2 printdifftree noinst_SCRIPTS = mockfedabipkgdiff -noinst_LTLIBRARIES = libtestutils.la libcatch.la +noinst_LTLIBRARIES = libtestutils.la libtestreadcommon.la libcatch.la libtestutils_la_SOURCES= \ test-utils.h \ @@ -82,15 +86,31 @@ libtestutils_la_CXXFLAGS= \ -DABIGAIL_SRC_DIR=\"${abs_top_srcdir}\" \ -DABIGAIL_BUILD_DIR=\"${abs_top_builddir}\" +libtestreadcommon_la_SOURCES= \ +test-read-common.h \ +test-read-common.cc + +libtestreadcommon_la_CXXFLAGS= \ +-DABIGAIL_SRC_DIR=\"${abs_top_srcdir}\" \ +-DABIGAIL_BUILD_DIR=\"${abs_top_builddir}\" + libcatch_la_SOURCES = lib/catch.cc lib/catch.hpp runtestreadwrite_SOURCES=test-read-write.cc runtestreadwrite_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la runtestreaddwarf_SOURCES=test-read-dwarf.cc -runtestreaddwarf_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la +runtestreaddwarf_LDADD=libtestreadcommon.la libtestutils.la \ + $(top_builddir)/src/libabigail.la runtestreaddwarf_LDFLAGS=-pthread +if CTF_READER +runtestreadctf_SOURCES=test-read-ctf.cc +runtestreadctf_LDADD=libtestreadcommon.la libtestutils.la \ + $(top_builddir)/src/libabigail.la +runtestreadctf_LDFLAGS=-pthread +endif + runtestannotate_SOURCES=test-annotate.cc runtestannotate_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 7edb1e24..686bbf13 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -457,6 +457,31 @@ test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt \ test-diff-dwarf/PR25058-liblttng-ctl.so \ test-diff-dwarf/PR25058-liblttng-ctl2.10.so \ \ +test-read-common/test3.c \ +test-read-common/test3.so \ +test-read-common/test3-alias-1.suppr \ +test-read-common/test3-alias-2.suppr \ +test-read-common/test3-alias-3.suppr \ +test-read-common/test3-alias-4.suppr \ +test-read-common/test4.c \ +test-read-common/test4.so \ +test-read-common/PR26261/Makefile \ +test-read-common/PR26261/PR26261-obja.c \ +test-read-common/PR26261/PR26261-objb.c \ +test-read-common/PR26261/PR26261-exe \ +test-read-common/PR26261/PR26261-main.c \ +test-read-common/PR26261/PR26261-obja.h \ +test-read-common/PR26261/PR26261-objb.h \ +test-read-common/test-PR26568-1.c \ +test-read-common/test-PR26568-2.c \ +test-read-common/test-PR26568-2.o \ +test-read-common/test-PR26568-1.o \ +test-read-common/PR27700/include-dir/priv.h \ +test-read-common/PR27700/include-dir/pub.h \ +test-read-common/PR27700/pub-incdir/inc.h \ +test-read-common/PR27700/test-PR27700.c \ +test-read-common/PR27700/test-PR27700.o \ +\ test-read-dwarf/test0 \ test-read-dwarf/test0.abi \ test-read-dwarf/test0.hash.abi \ @@ -471,20 +496,12 @@ test-read-dwarf/test2-1.cc \ test-read-dwarf/test2.so \ test-read-dwarf/test2.so.abi \ test-read-dwarf/test2.so.hash.abi \ -test-read-dwarf/test3.c \ -test-read-dwarf/test3.so \ test-read-dwarf/test3.so.abi \ test-read-dwarf/test3.so.hash.abi \ test-read-dwarf/test3-alias-1.so.hash.abi \ -test-read-dwarf/test3-alias-1.suppr \ test-read-dwarf/test3-alias-2.so.hash.abi \ -test-read-dwarf/test3-alias-2.suppr \ test-read-dwarf/test3-alias-3.so.hash.abi \ -test-read-dwarf/test3-alias-3.suppr \ test-read-dwarf/test3-alias-4.so.hash.abi \ -test-read-dwarf/test3-alias-4.suppr \ -test-read-dwarf/test4.c \ -test-read-dwarf/test4.so \ test-read-dwarf/test4.so.abi \ test-read-dwarf/test4.so.hash.abi \ test-read-dwarf/test5.cc \ @@ -552,18 +569,7 @@ test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi \ test-read-dwarf/test25-bogus-binary.elf \ test-read-dwarf/test26-bogus-binary.elf \ test-read-dwarf/test27-bogus-binary.elf \ -test-read-dwarf/PR26261/Makefile \ test-read-dwarf/PR26261/PR26261-exe.abi \ -test-read-dwarf/PR26261/PR26261-obja.c \ -test-read-dwarf/PR26261/PR26261-objb.c \ -test-read-dwarf/PR26261/PR26261-exe \ -test-read-dwarf/PR26261/PR26261-main.c \ -test-read-dwarf/PR26261/PR26261-obja.h \ -test-read-dwarf/PR26261/PR26261-objb.h \ -test-read-dwarf/test-PR26568-1.c \ -test-read-dwarf/test-PR26568-2.c \ -test-read-dwarf/test-PR26568-2.o \ -test-read-dwarf/test-PR26568-1.o \ test-read-dwarf/test-PR26568-1.o.abi \ test-read-dwarf/test-PR26568-2.o.abi \ test-read-dwarf/test-libandroid.so \ @@ -572,18 +578,77 @@ test-read-dwarf/test-suppressed-alias.c \ test-read-dwarf/test-suppressed-alias.o \ test-read-dwarf/test-suppressed-alias.o.abi \ test-read-dwarf/test-suppressed-alias.suppr \ -test-read-dwarf/PR27700/include-dir/priv.h \ -test-read-dwarf/PR27700/include-dir/pub.h \ -test-read-dwarf/PR27700/pub-incdir/inc.h \ test-read-dwarf/PR27700/test-PR27700.abi \ -test-read-dwarf/PR27700/test-PR27700.c \ -test-read-dwarf/PR27700/test-PR27700.o \ test-read-dwarf/test-libaaudio.so \ test-read-dwarf/test-libaaudio.so.abi \ test-read-dwarf/PR28584/PR28584-smv.cc \ test-read-dwarf/PR28584/PR28584-smv.clang.o \ test-read-dwarf/PR28584/PR28584-smv.clang.o.abi \ \ +test-read-ctf/test0 \ +test-read-ctf/test0.abi \ +test-read-ctf/test0.c \ +test-read-ctf/test0.hash.abi \ +test-read-ctf/test1.c \ +test-read-ctf/test1.so \ +test-read-ctf/test1.so.abi \ +test-read-ctf/test1.so.hash.abi \ +test-read-ctf/test2.c \ +test-read-ctf/test2.so \ +test-read-ctf/test2.so.abi \ +test-read-ctf/test2.so.hash.abi \ +test-read-ctf/test3.so.abi \ +test-read-ctf/test3.so.hash.abi \ +test-read-ctf/test4.so.abi \ +test-read-ctf/test4.so.hash.abi \ +test-read-ctf/test5.c \ +test-read-ctf/test5.o \ +test-read-ctf/test5.o.abi \ +test-read-ctf/test6.c \ +test-read-ctf/test6.o.abi \ +test-read-ctf/test7.c \ +test-read-ctf/test7.h \ +test-read-ctf/test7.o \ +test-read-ctf/test7.o.abi \ +test-read-ctf/test8.c \ +test-read-ctf/test8.o \ +test-read-ctf/test8.o.abi \ +test-read-ctf/test9.c \ +test-read-ctf/test9.o \ +test-read-ctf/test9.o.abi \ +test-read-ctf/test-alias.c \ +test-read-ctf/test-alias.o.abi \ +test-read-ctf/test-ambiguous-struct-A.c \ +test-read-ctf/test-ambiguous-struct-A.o \ +test-read-ctf/test-ambiguous-struct-A.o.hash.abi \ +test-read-ctf/test-ambiguous-struct-B.c \ +test-read-ctf/test-ambiguous-struct-B.o \ +test-read-ctf/test-ambiguous-struct-B.o.hash.abi \ +test-read-ctf/test-conflicting-type-syms-a.c \ +test-read-ctf/test-conflicting-type-syms-a.o \ +test-read-ctf/test-conflicting-type-syms-a.o.hash.abi \ +test-read-ctf/test-conflicting-type-syms-b.c \ +test-read-ctf/test-conflicting-type-syms-b.o \ +test-read-ctf/test-conflicting-type-syms-b.o.hash.abi \ +test-read-ctf/test-dynamic-array.c \ +test-read-ctf/test-dynamic-array.o \ +test-read-ctf/test-dynamic-array.o.abi \ +test-read-ctf/test-enum.c \ +test-read-ctf/test-enum-many.c \ +test-read-ctf/test-enum-many.o \ +test-read-ctf/test-enum-many.o.hash.abi \ +test-read-ctf/test-enum.o \ +test-read-ctf/test-enum.o.abi \ +test-read-ctf/test-enum-symbol.c \ +test-read-ctf/test-enum-symbol.o \ +test-read-ctf/test-enum-symbol.o.hash.abi \ +test-read-ctf/test-PR26568-1.o.abi \ +test-read-ctf/test-PR26568-2.o.abi \ +test-read-ctf/test-struct-iteration.c \ +test-read-ctf/test-struct-iteration.o.abi \ +test-read-ctf/PR27700/test-PR27700.abi \ +test-read-ctf/PR26261/PR26261-exe.abi \ +\ test-annotate/test0.abi \ test-annotate/test1.abi \ test-annotate/test2.so.abi \ 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-dwarf/PR26261/Makefile b/tests/data/test-read-common/PR26261/Makefile similarity index 82% rename from tests/data/test-read-dwarf/PR26261/Makefile rename to tests/data/test-read-common/PR26261/Makefile index f66fa38a..dc9c27a3 100644 --- a/tests/data/test-read-dwarf/PR26261/Makefile +++ b/tests/data/test-read-common/PR26261/Makefile @@ -1,7 +1,7 @@ SRCS = PR26261-obja.c PR26261-objb.c PR26261-main.c EXE = PR26261-exe OBJS = $(SRCS:.c=.o) -CFLAGS = -Wall -g +CFLAGS = -Wall -g -gctf all: $(EXE) @@ -9,7 +9,7 @@ all: $(EXE) $(CC) $(CFLAGS) -c $< $(EXE): $(OBJS) - gcc -fPIC $(OBJS) -o $@ + $(CC) -fPIC $(OBJS) -o $@ cleanobjs: rm -rf $(OBJS) 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..cf253f60263bda0d0fe62c9628ad1ca3fe081abf GIT binary patch literal 19032 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 VITtb#Bv1ZvH2)5lrBe|5{~w{-$}a!_ literal 0 HcmV?d00001 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-common/PR26261/PR26261-obja.o b/tests/data/test-read-common/PR26261/PR26261-obja.o new file mode 100644 index 0000000000000000000000000000000000000000..8f8b8f77cc3fa6c6af890a62f4ab4a424027c7f5 GIT binary patch literal 3592 zcmbtXeQZ-z6u+MA2q6+thcFrPRYEW#F``JAN+L0W8jVpy0)#*GocGS{9&a@ydb0b@Ilp^; z=bm@JUbp^qNpw;D@7xZ8g-g6k1b1K794a4G>|FSSEibpJr!)= zmpug9q2X#iH`rci1<+ z2Y{t>S=7y<9u}R>np3hr7Fa1VXG<(9IRkBhHfJm$1|yO)nFu-~;eZ$jhs1Eio{A@x zgd|3tij-86&L&Y2Rnrb&lRX%VMq{$GZi%PTQ|ac~j;S3%wN{!)c8V(JetP$J=Q5eh zXPHmWu>BjnJB5Zi=6UqEU0yLAMS3x@w#`JyJOkv{Mnuw*P+DC z_9NHJJl%&oF1v4(x#NYuZW!*mQ8qokWfSW%74L4WDy>#_jr!>~_G-g9Z`ES!)^Na_ zmn^R_vwdfa6~3^nYd}2{wx6+V^jdwhXTN{2a$K+QP1?4rrMGSQ!mp>E{_)C%%z;Jz zZ{VzPx(n`d?O6jkr9juhR2y*E6dN z?(8?)9{*s~EhVUMa-o4yq0X~Os4zW%+f^?G0vnt?7o{Dh zJcz&V=9ynxZ}Yil+T0$8%i*$lTpqU@nr)Jlj!TJfRFV}jGTCO2Dk)i-6Ov>AgW!sZ zV9T8JtV(<344XX!e?g^L+p{Tol^k0m_ish5M!rA#sATS^clW&PwzS)<`FE`HzH4JX zskkaEE>4@fuiYvOMngT*mrh%LUbuS9H{{sxx~;w~3(H4tdGf9K(Ft|cMLqTDl{fdC z+Iyuov2)C&$iYK<*FIeon=$M8$G$kN)Q_xMUsKNJ`+SesCc$e?zRx>SU3BQx0}Cu> zVnPNnE&}$x zxw>IRbHQ-Y;Po<4@|b#+4Cu(?*O;Lvj};pb&CO#a18^%K!*uni?}$-!XYjisdm~W> z{_c2@>gSb@fH+=|V<~VQ0Rg&iT zdGfuajpNz~$J+JvGe@#5s)zy5NPSCJo* zQ;v8d26vazMtP+ce{({NO7w#NQ;h~b&K+M@p3X}~_8gFpv3eN`4r2Pffc*>bkwc99 zi4cQl=)dxD9~pDvuzdUthE9X4?kg4J2N}sA7b)-+&CNayVGQ>xo_lXLLNf|!LjNHA zLC|*sN2z`&eFejo8?@j%i>{t3V_)Jy$b?VC@-gOMu7G?D=+}@jQM9fyP(GaC*rGuD+P-#$_H}uE9UTc_ zjE{_unZ*z@lNkw2jS30F5QP}2Q3)u7M2swfz(V{W@ehHR2x!!EUeDd?TZxID?Dm}V zyXSY#dH3CW-?lATQEw0g#zkOHu@R4>jJ4#A*e=a=TX_3Iu>=ZXf+EaWKYbu(Z}p9v8ZJCwfoxbF-7!8Bzs)(+aqD0=nIF$aKxHu zjjM_zM(wH;SL618sEV3t1u$Us$D+}gY;RayT~l4-RAw$07xZ}_(=W0XKyP66QjL#kDof&jE zW^50z1>+0wb&k|Oq>VN?wxP)PF&L6_s5Z=vFiS92UniF|NgbphOO5wN=?FD_Rg1u=5!-`T^ytOx+HqN zULO<8ra~rs3F=f);=iXWxozYNVaH27} z@z;Z&9=^OvdA;IN5>PUza`-TK>!vitC4>kDr!?wRn8q_2kdf;UAFCKXBM5#-Ad* zhBU{|k?$g{uWKP3*DQ10m@VEORYf0YRY~g>ZmCjIWj6d$Fq5X;;PIKLc! zvWT8P3u5pL{Z~HjBYjRR%j+w;NuA4ZUuhUW$VdiBQQ*F`JN&B)W4K@O+`EP&(#B0X zl(z^U4;mrP=jW^rux#}kXw$w%e6Bd3`;8Ca-y}Z24|u$u-vATY`X8hX;UFURk6g~@ z{f7b5uPIU{(F=V6oea^(24F5*{X9JUAj!01SRc>6zJ3BQ%*p!%Qmp*599nE&ez2?;X{GUO{?Kw&g1$GnBn$t5Ez}r&&1Hy$G!&`E)~6Q z4AG>E`1*C>{qwlbz`&e({>Q|x<$iK^InN@{8 literal 0 HcmV?d00001 diff --git a/tests/data/test-read-dwarf/PR27700/include-dir/priv.h b/tests/data/test-read-common/PR27700/include-dir/priv.h similarity index 100% rename from tests/data/test-read-dwarf/PR27700/include-dir/priv.h rename to tests/data/test-read-common/PR27700/include-dir/priv.h diff --git a/tests/data/test-read-dwarf/PR27700/include-dir/pub.h b/tests/data/test-read-common/PR27700/include-dir/pub.h similarity index 100% rename from tests/data/test-read-dwarf/PR27700/include-dir/pub.h rename to tests/data/test-read-common/PR27700/include-dir/pub.h diff --git a/tests/data/test-read-dwarf/PR27700/pub-incdir/inc.h b/tests/data/test-read-common/PR27700/pub-incdir/inc.h similarity index 100% rename from tests/data/test-read-dwarf/PR27700/pub-incdir/inc.h rename to tests/data/test-read-common/PR27700/pub-incdir/inc.h diff --git a/tests/data/test-read-dwarf/PR27700/test-PR27700.c b/tests/data/test-read-common/PR27700/test-PR27700.c similarity index 55% rename from tests/data/test-read-dwarf/PR27700/test-PR27700.c rename to tests/data/test-read-common/PR27700/test-PR27700.c index b44a3226..a16a0bb7 100644 --- a/tests/data/test-read-dwarf/PR27700/test-PR27700.c +++ b/tests/data/test-read-common/PR27700/test-PR27700.c @@ -1,5 +1,7 @@ #include "include-dir/priv.h" +/* gcc -I. -gctf -gdwarf -c -o test-PR27700.o test-PR27700.c */ + void foo(enum foo* c __attribute__((unused))) { diff --git a/tests/data/test-read-common/PR27700/test-PR27700.o b/tests/data/test-read-common/PR27700/test-PR27700.o new file mode 100644 index 0000000000000000000000000000000000000000..99dea2d13509c26e5d856bcb0d4eb803923f3c8a GIT binary patch literal 3552 zcmbtWeQZ-z6u)mR>!e%R7!KxUc-sVu($}sdYy%k^i~9(JkP!kTlJ&KHYa7984p6cP-c^WHsexs;gbN$)%N z{LcB^d+xpOp4TTI>+33#Bt{~!HkPvpWh_vV>$jWTc2>piXX|_RUh3KV#Er4dC$Ilt zFQTAk>TqobjSWY^Wc6WtfylUT?@-G-C$c2u`oKAH=2lR-rz`Z z#G6Q|p&`wiPKCTfv7j1^Mby}kXE>QQQkoj~8d};&d&8=snq3coVNWO#k0*5R+J1j? zv(INaxS@osg<@{|@Bv~b3OaM}N+b{nXn|i?e`%k*@2C-RM~K`rhi&tF_zZh3v=? z$5F}6Y_3`->}!QI&sFKP&8?YRA(u!(ZiRD{RjkNYT+p96Ecp4)|Z)MRO#vC(%)(f8OdVIJzklgytsj$8vlU&8& zi7$6P$QY!xGV9-9g=g)|LFXXu$BzM@6+kNH3N7 z9_7|e3(D=o3(s~;Kj|yA|6Ld9^xo{cJR`hmanUl@c>n3&YocpDJpA$0p_Ajv_sjgP z$Df~1|Kl?`nOvF^^!rLr4VyYOF@YF$(r&H^tK5a2>e6L$a;c`&Q8EV3TEMZPz(F(C;VR!<)LB;C1p#Q^LvUO>yLP*f+eVuy zIBnwf=YAV=2$7a)W7F?}V=1~@Y^>}qupE$?dHI-Y#3(EZp4^4Uih@FG#+mc?lSW1y zE8D}+P-a@n%rt)$RRZ3`Z7iB7xPRH|41F38$Ima49blu-ymVIG7M#T!xV>7yDerXx zzKz?D3ph7fly}5Dsj6c>SkOsupHam4dJE3(&t`7V7x1UKoxcybpYL#du@L_)w_64L zH*U8H_)Tv2a4qI3a~#hk|6G`o9*G-j5VVo9bd-9AmNA%u-xa0=(`lw)c~Mf@kg9~W z;BaIhrVl0{!0fBRU`pG1hg(gldPDK#+`grO;L^*w1r z4Q=6eL?2d?sRUF-V}y^ZMF$2`YFy(B{GX}@__%lU9?)>@ypz3O+{V~^sRIMC{C5Za ztME}kME(MZ!8`h2`HO%nj)~LK{ErGw!DLH_PlW=>AbWVAZkgGq5XKt8gLS1n8)0>J z@=GuCaqt_B5b@#TZOTe`iaDXbY10Vf{m{hTj^u?4s(1%!Cy zdJ8&OSNU=YW^T?G_l5GOz~j)tF-87H&TpYWu0{SazzdyU29pAzbHekhfJS`63(bwZ uF+TqVG(hnG4su2QeSnFz10WXV_mBQ3A%-IEALdkuKgRR_!er$hBL5%iFLg!$ literal 0 HcmV?d00001 diff --git a/tests/data/test-read-common/crti.c b/tests/data/test-read-common/crti.c new file mode 100644 index 00000000..47dc4e47 --- /dev/null +++ b/tests/data/test-read-common/crti.c @@ -0,0 +1,22 @@ +/* + * gcc -c -std=c89 -mtune=generic -march=x86-64 crti.c + * + * NOTE: linking with _old_ crti.o exposes _init and _fini as + * global symbols, the newer versions don't. + * + * 0000000000000000 g F .init 0000000000000000 .hidden _init + * 0000000000000000 g F .fini 0000000000000000 .hidden _fini + * + * So this is a dummy c-runtime object. + * + */ + +void __attribute__((visibility("default"))) +_init(void) +{ +} + +void __attribute__((visibility("default"))) +_fini(void) +{ +} diff --git a/tests/data/test-read-dwarf/test-PR26568-1.c b/tests/data/test-read-common/test-PR26568-1.c similarity index 61% rename from tests/data/test-read-dwarf/test-PR26568-1.c rename to tests/data/test-read-common/test-PR26568-1.c index 6eec3558..a551ac7c 100644 --- a/tests/data/test-read-dwarf/test-PR26568-1.c +++ b/tests/data/test-read-common/test-PR26568-1.c @@ -1,3 +1,6 @@ +/* gcc -std=c89 -gctf -g -mtune=generic -march=x86-64 -c \ + * -o test-PR26568-1.o test-PR26568-1.c */ + struct A { union { struct { diff --git a/tests/data/test-read-common/test-PR26568-1.o b/tests/data/test-read-common/test-PR26568-1.o new file mode 100644 index 0000000000000000000000000000000000000000..f50f6c95609367cffa94b660da6ef5ae572141c6 GIT binary patch literal 3536 zcmbtXdu&r>6#wqJb_2Uod5pp4sED!weQbkKMMlRQ%p*#ovqHC-&1jbZgQ-9OcIuen>ZvHI>g6-TS) zM0S=zpQ+0bYP!wwm7o50BQt~e50SxjCTP5{0A4+CDcl|h8U;EUk1=}HV+@n=E)9rV zxQlU^!weS+u4SnfGa&BbalkJ`pM>X9T^;<6go|=f4AvfRXMDWJBlw0uUn(^_Kl@bYv=A8Y*RuIm?)$>itB zUg1FAGS{oqbmMEQ++`mouIY*o4L7vO=C01Iugxg?AoK9vvVuu3olkzIb2}2N6YGlF zO!JoBoM`DN_UN8H z+b48iJaM$*h39$~ygBvq`HdO%y0I0)(Z$0$n&S(~ZvXh@l<$t^&${;Q&cZvd#Alvh z7fyK|`1<6I>8E@4eScV@o489Lz2UtDjgDw%01DYZFl4oj({w4?+sOOX_9k;49< zBr9T|*kTPTt+F)RE6D(Qz!k$D-|VQf+*&@}V)ep5kJ6MnaQ#QHRc@9;FU$P)uuWA? zaZP@7*VfII!#gbI>XY#t{nO_*$d1i*>zbTb&Rn1T(ObDcSG;lghil|J1cr5YF(q4UWd*57hS9N}y@tGTA7nB{Cu;dR@?Mhcx;nu#& z+iZSS)f1K?xYgo+xle43zvb!#018Y1A&D4?zbqXlX-ncRgOV~0QB!8m^YLC`u9-F@Wh6KnXZ3c4PMsKOd1SB{BRADa&^pjA3WzC z94FVvw0_ik#3-C0*7P}nBPca-aTzP8?fwV0o=;{@m%8$ z^&fYzr*Ite&{RigMH-HE>$ty(Yi%Ct4fEjSCZR8YHhv-xp#GodKJ63XogAk*K=^Ks z&(P#~pZjyT*4DLf9QPo7ADAr?3o4=;v=UBfA6beNRhSLOKC`(a5oW`;*%p=pqODPK zw|X1=a#IKbR9ker!&2LzWic$uUI}<?<^gd$$$R$4Y z?*~k~rvR}zygt3}h@og>8vz@t{vBRFsAy#FtV$hDUL5BAK1d;kCd literal 0 HcmV?d00001 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-common/test-PR26568-2.o b/tests/data/test-read-common/test-PR26568-2.o new file mode 100644 index 0000000000000000000000000000000000000000..b192d52132766d4f95136e23f93de43a64d8cc2e GIT binary patch literal 3048 zcmbtVZERCz6n<~-S_<1r* z;&RuL%)V43ydOok^!1I}+}s=#lFQNh=Go1+3z5A|tX&CdcHtCW(2^wGaAl*yNnn6+ zr;X+jHn1lfo>4-w-zFxG1?4Qs?%cZ9E;(~;GVnUPB5g`XL>KkTS1HxSiD1M>qOZ^3tu1PTM+E|5xk`d8$x)OU`=Vk0ApO{%I3?GNRhtlKn{H9GzJ2Zu%j zy8^pLuh%AqDh`bf)((wU><%OXyMIdTt~mLQeQ=I1HyUVY+;U0E%6BE*LcI2J)vuzy zy1G)C2TLjVmvumI888$Wb{N1AHX$VuW0A<`{-;tv+O$GQakn%xYl3q-1ZM$`17$A$ zRJq*G+p4o2DkPx)4}$Y%h~NH77lxBb2MgKg`qq#vOpnzRmc>MqH*U%zbKEgmvdA)d zDKiIDj;SAGjTq9knC@v+(Z5h(zruo*Bb2m2*-RpQxNC#`h3jN}BQa$bXQuwXQ-q?tyt9gg3S^tgAuLdNifm+0wPRF1)R(t_p83 z78Bm6)~R}1wO~(MQ%5A!1u?@`gTbiQdsA4As*yJBW=dyAL}Ln+U=!gc!*A&d1xXp6pE^0jn?*m)J!1bp7D9|Ts|`Rd>F@E zv)ly^V&*%5@eux`5i9>*$icVpU-`wrHRj|8MK#+=zd)LmB~27U0N`)>t| zN`W;l#|h+j$`NaB69m%LZ=m{dB4T~~mRaj}1BP>QpI{o|qQ{E+V-~K@`bh{He4dz+ zn~9Hcvv3;o`ypuX%}HQiBK~{}&OFwy65o<09M%g>3C!dCePH0ZP&tN$llazs;r==C z6c{+Cm0wQ$a!w>||9f;ma$z9X%EvpAZmay* d6bS#nrM%Qy*+xADMmqkF)c;v?GT7Gr{~OR-KGpyL literal 0 HcmV?d00001 diff --git a/tests/data/test-read-dwarf/test3-alias-1.suppr b/tests/data/test-read-common/test3-alias-1.suppr similarity index 100% rename from tests/data/test-read-dwarf/test3-alias-1.suppr rename to tests/data/test-read-common/test3-alias-1.suppr diff --git a/tests/data/test-read-dwarf/test3-alias-2.suppr b/tests/data/test-read-common/test3-alias-2.suppr similarity index 100% rename from tests/data/test-read-dwarf/test3-alias-2.suppr rename to tests/data/test-read-common/test3-alias-2.suppr diff --git a/tests/data/test-read-dwarf/test3-alias-3.suppr b/tests/data/test-read-common/test3-alias-3.suppr similarity index 100% rename from tests/data/test-read-dwarf/test3-alias-3.suppr rename to tests/data/test-read-common/test3-alias-3.suppr diff --git a/tests/data/test-read-dwarf/test3-alias-4.suppr b/tests/data/test-read-common/test3-alias-4.suppr similarity index 100% rename from tests/data/test-read-dwarf/test3-alias-4.suppr rename to tests/data/test-read-common/test3-alias-4.suppr diff --git a/tests/data/test-read-common/test3.c b/tests/data/test-read-common/test3.c new file mode 100644 index 00000000..0d8e7f87 --- /dev/null +++ b/tests/data/test-read-common/test3.c @@ -0,0 +1,26 @@ +/* + * Test file for creating multiple alias for a symbol + * + * NOTE: linking with _old_ crti.o exposes _init and _fini as + * global symbols, the newer versions don't. + * + * 0000000000000000 g F .init 0000000000000000 .hidden _init + * 0000000000000000 g F .fini 0000000000000000 .hidden _fini + * + * This test is looking for those symbols which are not experted. + * So it's linked with dummy crti.o to avoid false positives. + * + * gcc -std=c89 -shared -gctf -g -mtune=generic -march=x86-64 -fPIC \ + * -nostartfiles -Wl,-soname=test3.so.1 -o test3.so test3.c crti.o + * + */ + +void __foo(void); +void foo(void) __attribute__((weak, alias("__foo"))); +void foo__(void) __attribute__((weak, alias("__foo"))); +void __foo__(void) __attribute__((alias("__foo"))); + +void __foo(void) +{ + +} diff --git a/tests/data/test-read-common/test3.so b/tests/data/test-read-common/test3.so new file mode 100755 index 0000000000000000000000000000000000000000..3dfb69e998b5d91dcadc283974557ec294e2c074 GIT binary patch literal 14824 zcmeHOPiz!b7=N?d(n4V={{&K!P7FjK?(DW;!yhZHrKQ9|um+<>GtTbLb~kos$nF$d z5+f&4q9zU6s*L=!~2rAzxTfP zeeb>b%{Om$cfNUld}<!I40*+?a* zdZRYx=tPyzi>X2^$A>JwV;fP`PQMYzy>E0CiREY|p_ zbr#u9Q2buG8&v*{-#PXxn$f^X+{^O`hI5eaW%3J;kNY17OpBV9b^b#>g;s<^7ZqT9 zUaSZ4Aa+z$;2w6+p}>Ccw<>eFVj|d-y@090zd=eJ){-<4Chtwq5o8=+m~9UH9sN zva1AYwq7b*E#Deaf!hiWp*ldLXweL41~dbj0nLDBKr^5j&Gy`j6;QZv(yVu^j z{dZW~5ZYQZpc&8%Xa+O`ngPv#WXV24fR^w~v z@SGBo;day_eP8zYUTWa^>C(OB%Ed0+qCXQGT^@F3H?X(ze)YCuF_9kS~LTi0nLDBKr^5j&Gy|Fe z&46Y=Gw=`t@;kSWdn9RiAGbF$O5X1#vE#g6{8olsKr%APZ+|ZP!0X(`?`p^*elU|r z&hs7a-w>%)k+Fwy7vp~or^d#PnfvLN{{eGg&?;I*bFer#FhIrJ@6KOvoArk41QNjQ>xE6_1OZ_zgvZh6F6Zt-*lZyzU(&|zQ?KIWjfAu!C`l(2g}J`{CNELla_yPt)f4+%J?I!m+MyY``bj7 zn?c?JC=cIYfzo**QVjUbFiYCjcLo+Jjspg2Uw6vnNxS__T9DG>(E2y0TC z@#d_W)2b<}vfzPErz$< z_I@q`=5spnWHVJDlNVEa8Qc1ZdkCq1qqnO~V~$e5g8*3VYz zELAY3_{%;ah^r(n!n^43pKsj%H8biFoEJmJ4DLS|u 0) + *t1++ = *t2++; + return s1; +} diff --git a/tests/data/test-read-common/test4.so b/tests/data/test-read-common/test4.so new file mode 100755 index 0000000000000000000000000000000000000000..0394bf5cc4404c29b1627258d9b11319035bd671 GIT binary patch literal 16560 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 Ww9?1oO`$gaIeKwITIB=ySn+Q+OAa^y literal 0 HcmV?d00001 diff --git a/tests/data/test-read-ctf/PR26261/PR26261-exe.abi b/tests/data/test-read-ctf/PR26261/PR26261-exe.abi new file mode 100644 index 00000000..cb2e2f13 --- /dev/null +++ b/tests/data/test-read-ctf/PR26261/PR26261-exe.abi @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/PR27700/test-PR27700.abi b/tests/data/test-read-ctf/PR27700/test-PR27700.abi new file mode 100644 index 00000000..62df1017 --- /dev/null +++ b/tests/data/test-read-ctf/PR27700/test-PR27700.abi @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-PR26568-1.o.abi b/tests/data/test-read-ctf/test-PR26568-1.o.abi new file mode 100644 index 00000000..d62474ec --- /dev/null +++ b/tests/data/test-read-ctf/test-PR26568-1.o.abi @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-PR26568-2.o.abi b/tests/data/test-read-ctf/test-PR26568-2.o.abi new file mode 100644 index 00000000..a934d15b --- /dev/null +++ b/tests/data/test-read-ctf/test-PR26568-2.o.abi @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-alias.c b/tests/data/test-read-ctf/test-alias.c new file mode 100644 index 00000000..1b497a18 --- /dev/null +++ b/tests/data/test-read-ctf/test-alias.c @@ -0,0 +1,15 @@ + +// function aliases + +void main_func(void); +void alias_func(void) __attribute__((weak, alias("main_func"))); + +void main_func(void) +{ + +} + +// variables aliases + +int main_var; +extern int alias_var __attribute__((weak, alias("main_var"))); diff --git a/tests/data/test-read-ctf/test-alias.o.abi b/tests/data/test-read-ctf/test-alias.o.abi new file mode 100644 index 00000000..1fe61b8f --- /dev/null +++ b/tests/data/test-read-ctf/test-alias.o.abi @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-ambiguous-struct-A.c b/tests/data/test-read-ctf/test-ambiguous-struct-A.c new file mode 100644 index 00000000..67047c44 --- /dev/null +++ b/tests/data/test-read-ctf/test-ambiguous-struct-A.c @@ -0,0 +1,8 @@ +struct A; +struct B { struct A *a; }; +struct A { struct B b; long foo; long bar; struct B b2; }; + +typedef struct A a_array[50]; +a_array *foo __attribute__((__used__)); + +static struct A a __attribute ((__used__)); diff --git a/tests/data/test-read-ctf/test-ambiguous-struct-A.o b/tests/data/test-read-ctf/test-ambiguous-struct-A.o new file mode 100644 index 0000000000000000000000000000000000000000..4ea891f656de09da4ecf490b2d3223820334c0f0 GIT binary patch literal 1504 zcmbtU&2G~`5FVFMC`eU{IG`dV_e2ZWPI5si0=ZOB2_bGA5v*M|jfm~YUQ5jho`VD8 zQOX;-0`PtIE{>MMg^|9UnQwmVnT_-A$@8Zxo+nm3c_h7OSrPw2Z^x|}%T>7| zKfVoCY~-Oepf4M2KodUj1^584fbj>weWS_ICeP;sTeNQilmWn3fZp<>JQ$0CO$@kX81KJBt1~pL>f|AL~4kYcv?=v&KLKK<=z|n&*1k_p$6tBD1oX z_|rnmaal^DDoMtoI<_h5>7>Yx+OT@9s!A=|G$qkVnP*Y5NET69sdSb_b(Kc5X`+(p zL``QwGp}`(sXWqIt?TGWY1Ntm$fF?D$DOBg zrhF5yns>0--e4EtJ+;EAgL8*d?FJ>R7r9mmw5~dRVlADWY6-b936r{(5Zl60<{VnW zqSRT4A+a%)zBT@&Xu^3_Vl{eU-{C)WH!pr%PLJ5}t?TY}8v$}lpI@6Ax96XSTYnoV z+~wcuW2c4h`1jzuJ(&{ofP8dVNkQ*|2NxquIyGtBRTW|H=61SYX#t-uxv2`}| z3 Oem3>5+N%C=>wf{e$$~-v literal 0 HcmV?d00001 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 b/tests/data/test-read-ctf/test-ambiguous-struct-B.o new file mode 100644 index 0000000000000000000000000000000000000000..06bd0f502a874ad4a10c4beb5788eaace44c2bf9 GIT binary patch literal 1344 zcmbtTO>fjN5S^3-3YGX$RiRdu!iiQ8XLpZ1ptKbfA;gUn;^3ri8?o7}Vn^zp=&9l- zapa%y8_FMmH;LU?R^h^|US{Uao2+M&e0}}?%}NxJvxr{NkU5s-pA9v%)RE)(qo{p!J z2@vn7^Mz{4O3jU&?c$L3%-x*mz>cCH%sGo}&U60DxIUt*-=Ss;MAU7pukcPg

} z&o7CDURFlt@TTegnTw1%Hzar=Byz1uU>Ug770*OsUK=Ga2o@rXFE&4&w_?%MnA|Mg z|Np1&=fXn|?vn+%OT+y=LxDMdmwe0o#EZlJ=cw^}`?vnP%CeSc9X0d0Vtnh`$ap?M;-}5+Mdg%l{d4u*HIR5UsZ_Lwvv;E<@cvrr$EbQg_ sciaEgitoYmj$OaotK+R~aQ3F#1Jgy}SdYPm&yI!Lw*Pb2HC)2}KYuZ9CjbBd literal 0 HcmV?d00001 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 b/tests/data/test-read-ctf/test-conflicting-type-syms-a.o new file mode 100644 index 0000000000000000000000000000000000000000..9b7e7469adf5d14fea6a63a25b319da49f960507 GIT binary patch literal 1360 zcmbtTOK#La5G@bG5P}pD!~zKxh7C!;_KcTVAWIR6gb*uOB4|4u$HJe9-I2x{a)lg& zV{jAB02hFIc6X-Lnye`4xvE~(>**?wuim~to_HP^^XLt&Gs6;HPu6iVgb6*MZTjt3ecDG&E3#5XU7JN^k&3j)MNtNq%TBdYRFRUM>Y`Jj z#1IBdo(7pZ8?&sb&&ncGMV$w#U&^5Ct1b{>Ms#v?bm;G$eE78QFXC_>&i!~EFBS}c zPp+1-Eh z13Y#MGoCPdaQlSoZBoc%E0MBS?dZ=l#zan9~&p@BiKLN=G-rYU;Eq&+#63g7NcDc4mA8Y+*ON-Fe{{z~E BcuD{O literal 0 HcmV?d00001 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 b/tests/data/test-read-ctf/test-conflicting-type-syms-b.o new file mode 100644 index 0000000000000000000000000000000000000000..609f320b49bf443539e090b687903a3f877e3b6a GIT binary patch literal 1344 zcmbtTO>fjN5S^5zK#>qd9FWQ(^g>&Rv)SVwP^1cq5aPxWfs?w~h3$6XF8%Hg-0$wkJkKOn7#1 z^Xt}5lHez6nQ+!kpBI*Cb)iYXI}%CTl3?F>sY|?^L{)1g__aZ+W%||BS#>U!P0jx3 zuD{d&tb05RPqv*yVyCvH>+dt(fQIjG9Pzjqad-YX@4?fX=JEZHWANXIFFCtsVk^eN z@uyG2>h?yw18q8V^ki-tUpTs*w|UO{mXBN2CUHaWJJ#+n@c$jh!pyt(a^H_OcNXXT tH1l6jaNJ{{&(1%A$N}B;9{O)He}rNbMjn)1W}D{s&80pKojq~q{{dYmdA0xm literal 0 HcmV?d00001 diff --git a/tests/data/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi b/tests/data/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi new file mode 100644 index 00000000..35bcac7a --- /dev/null +++ b/tests/data/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-dynamic-array.c b/tests/data/test-read-ctf/test-dynamic-array.c new file mode 100644 index 00000000..77a9b5a1 --- /dev/null +++ b/tests/data/test-read-ctf/test-dynamic-array.c @@ -0,0 +1,13 @@ +// test dynamic arrays definitions +// information was detected f field. + +struct S +{ + char *a; + char b[0]; + char c[]; +}; + +void use_struct_s(struct S *) +{ +} diff --git a/tests/data/test-read-ctf/test-dynamic-array.o b/tests/data/test-read-ctf/test-dynamic-array.o new file mode 100644 index 0000000000000000000000000000000000000000..c588c8bc45805bfd0a97b81312e81aa99948e2b3 GIT binary patch literal 1712 zcmbtU&1(}u6n~q>v}zk_ks?-PMZ^@{*(4|FK_bDnsCZC%Ea~iKnk?=|*qumL5W#~` zPyLe$di8JcBzVY+-^}j2$IrGamIYcYcnD{a&H{`U&iqc{ zc3=gTVQ=^7+wRfZ)8qY5KfhKhx~Z)lWvggOmy~`+`%(FK(9%epa9!6iq!@0Xc2F;% z-c)`Kt=dhEaEQ^HtJ4N9p`z4itqyrpStCPr+DA$L$lKE*jUlnr{?->UxLBlSk9tAX zOYnz01rA{n5A1QA1%p`h?I4!mfe){fpbz6r^fH-_ec8*v9VU@*z1+*)B;|f6+${Co zFz~n+40sSa;}P}>9=TFvGIRS}^1^j6*>`+-IF0&w%%i|}c$)H@`2aiJ?v~xydA_%4 zx7w`9ns&R{ZnaSDhM0^*8bl(NJlrfuu<<>JSnNk)tdlY^mWuUVxT@aSdh-IT$*Q%n zyts6XMLHl-lFRgXRA2p2>8{kav4P^h2(4R%AHU|67v|i+b!=QK<%?MaCWai7h;wWg zBkbZiy#RCxX2P;OlH3D^j8E-Qds0j!Fd`qAmu0|^czh%gkq9hKq+rOMlS%HsQt==j zvr(EL)iMW`ijXrg>>Z{&60?#2<7^<9xYM^&uhmh`j29K_^V5B|(4n0EVs!qgb_{Fc z?_! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-enum-many.c b/tests/data/test-read-ctf/test-enum-many.c new file mode 100644 index 00000000..f2297d72 --- /dev/null +++ b/tests/data/test-read-ctf/test-enum-many.c @@ -0,0 +1,10 @@ +/* Looked up item by item. */ +enum e { ENUMSAMPLE_1 = 0, ENUMSAMPLE_2 = 1 }; + +/* Looked up via both sorts of iterator in turn. */ +enum ie { IE_0 = -10, IE_1, IE_2, IE_3, IE_4, IE_5, IE_6, IE_7, IE_8, IE_9, IE_A, IE_B, IE_C, IE_D, IE_E, IE_F, + IE_10, IE_11, IE_12, IE_13, IE_14, IE_15, IE_16, IE_17, IE_18, IE_19, IE_1A, IE_1B, IE_1C, IE_1D, IE_1E, IE_1F, + IE_20, IE_21, IE_22, IE_23, IE_24, IE_25, IE_26, IE_27, IE_28, IE_29, IE_2A, IE_2B, IE_2C, IE_2D, IE_2E, IE_2F}; + +enum e foo; +enum ie bar; diff --git a/tests/data/test-read-ctf/test-enum-many.o b/tests/data/test-read-ctf/test-enum-many.o new file mode 100644 index 0000000000000000000000000000000000000000..c54f96bd4240a845737024343671da2561abd96e GIT binary patch literal 2032 zcmbuAIcyU_6o$tT&JZBn;dDX}f#9`gI06wMo8Uy8ii9E|Box-pCb5Xuk#{4-1)`v$ zqM||+R8&+nq=JTu3K}XzK?4;6iTg1B|Gb+l3sgMid;iRvncus!yOXQ=)BW=j2^B^{ z9aVF^u&PvM!CX5l&8%uxOV#_AP4mK$6Oo0BQ6wt^lF-)}zYXT2&8c~$9H6qsHvR;d zb~K^QI)gqO+ro}g3pthqyFn(Hn?n0zy@fH&&`UY7@W9n*l@a|J8}*T5oh9dHkBfFrpcOm@tH2Ym8axGSz;mz`ya4OKE3h8C0UN+u&;~w$jo=&D z1o+rDLl;50uPxB6(ACgw&^Blix((V6-2v@@c0;#AHMA4j1Kj~V0!4(+CZQaaKRa~h zT<*-^>HM&cc8r>Gz0#QLj3i60uS$+Oksr=5X(q$8muVl)Z(edREw(?TP?m?jI}sxvDV_P#axTK7JDuJM*L0VipAfEzY%{U z{zm+b_#5#z;%~&?h`$kkBmPGGO~2x{j8-bDU{_Uoyi#`3g<7GOu2k*fgp>BF#q>m} zU>8bbc4;CtHR<_P$1bOR$Me1Pi0#|bOrbcED*B_1p5soHQ)Sz&Sw*D=`ucj4T?1!_ zb|tm3GFB#OGDd5V>~f|joocDOjzAgunW9B)$Z z>hTf2*R8W(d*i#}9KO%2hrbo7;+>|VHxzD`vb;)YX7@WN?t#WVIh18W%*2f2b2a9$hBN!O_!6w^{;fLq zTcJ-c#=~}WYG?dHgTeURlc@7-<~bgXu3&xqy5jpmzxZ1EoDbGtVh6$Vp7X->Jck*q g$F@l74}$ePpQ91Ke*Pc$+xln0`is%UXvf$80+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-enum-symbol.c b/tests/data/test-read-ctf/test-enum-symbol.c new file mode 100644 index 00000000..f7f99c67 --- /dev/null +++ b/tests/data/test-read-ctf/test-enum-symbol.c @@ -0,0 +1 @@ +enum {red1, green1, blue1} primary1; diff --git a/tests/data/test-read-ctf/test-enum-symbol.o b/tests/data/test-read-ctf/test-enum-symbol.o new file mode 100644 index 0000000000000000000000000000000000000000..eebd9ed01364c80627dcf56976b64d63ade4ec4a GIT binary patch literal 1312 zcmbtT&5qPC40e}c`4bXoIUpgV!i8Ny)9GB0_JAraum~Y;9Fa&mVWy%#qa>BKr+p0` zhc|&&fD0!C_SWf?>~g}AWBc>xBzDu&7jItfL=kw2;2CTqj{~N%0yFeUud?1k`yBNYmG+NW{aKd)9unWjyX@aYO9$+sqU;hUCeP?)1}md=lYy!_ zok7>wa@FW%Ts96irmUsuGf3BMty9&jK5dOGDxF$Wq*bY;Dp#_sl5S(2(XvjRw$7$Y z>ExN4Ah=8l_i>1H)76RXYt>ew060E6I*j*^-@ZGDvxS(8dAyh}vJ5re*C!i|$Lq$) z%Fo2#`!Ze~tFWi&3t?U&j(z_g4=v?q@cnm)-$CFu;1pTLy{W6@@5_&~0f7xUsn9wz z*tPeZK5-yu8X%OlAaD}6v^DhwqG_EL*hpfXEIx6(YC5qoEq3pEf06&R_pqLNruQ(F zd>TyraDERkN7!~U134eexizeRgbaGa|EeG7%sYkg6U4(kiJH@b@^dib8gett5H=qf zgY%S$j|1G-dwYm^?@y`fBJcw4Ys9Xgjz2kXvgZ2mUNozz5G|~w{AaFz#pG+u^YwQp hcsP4XedGH3%=3m}AL2i8{@YRV7Zcx)%)trk{{VTabvgh5 literal 0 HcmV?d00001 diff --git a/tests/data/test-read-ctf/test-enum-symbol.o.hash.abi b/tests/data/test-read-ctf/test-enum-symbol.o.hash.abi new file mode 100644 index 00000000..d128b5b1 --- /dev/null +++ b/tests/data/test-read-ctf/test-enum-symbol.o.hash.abi @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-enum.c b/tests/data/test-read-ctf/test-enum.c new file mode 100644 index 00000000..aa60d727 --- /dev/null +++ b/tests/data/test-read-ctf/test-enum.c @@ -0,0 +1,8 @@ +/* Looked up item by item. */ +enum e { ENUMSAMPLE_1 = 0, ENUMSAMPLE_2 = 1 }; + +/* Looked up via both sorts of iterator in turn. */ +enum ie { IENUMSAMPLE_1 = -10, IENUMSAMPLE_2, IENUMSAMPLE_3 }; + +enum e foo; +enum ie bar; diff --git a/tests/data/test-read-ctf/test-enum.o b/tests/data/test-read-ctf/test-enum.o new file mode 100644 index 0000000000000000000000000000000000000000..03dba69405ee471f00be6e93fb727ee80e42618a GIT binary patch literal 1440 zcmb_cO>fgc5FMA$77!9WAR!?n!-W>G9h+M#A)_i(MQw$IDh>#hwX;bqVmq=oQgcA? zYxn{D0{#LwZtxf20NlcxWH)hFg%cx9-prf#*4fF&yUxLr6~`eH4n3k}XIP?dE6X~b zl`&nR%k<-GYcWZe5?V*ic}=Gae2@Hyyny6qoFHFnWR7d*IdSNn7La)kK8N{R+z_qu z%thWqLNn8PsDDnU(;eV1;6Cs-@C6WIJPt|f933A%e|-4tpmP#7n~26mo%IXZb+bZI zCTahSwAn>xW)F!Cy|Sc4R1^%#Tn5P`nFM7e(xD9MDh-BNB9g2xvY|H~)vA&r50tD` z9dv~fv(f|E^-|TFcd{7geoC~rySwdf?j0R(xnbnD{k9vmqcB9eoAPudt1Op=62q%d+M25%HWr`G{CTX|(7bt;LE?LQ`Z{JyqbvwG!zY-S>;JKdMTsLrwV2{D-)S zGk6E9)>*ODo7UdvZ48(*-(#bTO<|$!zl%Blj{fH7Su+;<*5m`AeI}1$enIrCq193d z4RdW4H{yd9-fwVR8o$Bq2G^8+Hi9O3j`k_IHRR$?M(e+5zx}@KeXz{-@)7Hre9aBw m5|Sz7zriGed3*QF548U}H;u5b#lMI1{BO1YRm01r?f(OkDUBQe literal 0 HcmV?d00001 diff --git a/tests/data/test-read-ctf/test-enum.o.abi b/tests/data/test-read-ctf/test-enum.o.abi new file mode 100644 index 00000000..88e6ad61 --- /dev/null +++ b/tests/data/test-read-ctf/test-enum.o.abi @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test-struct-iteration.c b/tests/data/test-read-ctf/test-struct-iteration.c new file mode 100644 index 00000000..7df67ada --- /dev/null +++ b/tests/data/test-read-ctf/test-struct-iteration.c @@ -0,0 +1,28 @@ +#include + +struct foo_t +{ + int foo; + size_t bar; + const char *baz; + struct foo_t *self; + union + { + double should_not_appear; + char *nor_should_this; + } named; + struct + { + long unnamed_sub_member; + union + { + double one_more_level; + long yes_really_one_more; + }; + }; + struct {}; /* Empty ones */ + union {}; + int after_the_end; +}; + +struct foo_t used; diff --git a/tests/data/test-read-ctf/test-struct-iteration.o.abi b/tests/data/test-read-ctf/test-struct-iteration.o.abi new file mode 100644 index 00000000..72e0bdc3 --- /dev/null +++ b/tests/data/test-read-ctf/test-struct-iteration.o.abi @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test0 b/tests/data/test-read-ctf/test0 new file mode 100755 index 0000000000000000000000000000000000000000..aca7fbacdfff7ad2caf0142390710373a8da72a1 GIT binary patch literal 16656 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 t{@1}Z%f8UHspp0J?*zX1~oQd|H4 literal 0 HcmV?d00001 diff --git a/tests/data/test-read-ctf/test0.abi b/tests/data/test-read-ctf/test0.abi new file mode 100644 index 00000000..50ca26f4 --- /dev/null +++ b/tests/data/test-read-ctf/test0.abi @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test0.c b/tests/data/test-read-ctf/test0.c new file mode 100644 index 00000000..eb702312 --- /dev/null +++ b/tests/data/test-read-ctf/test0.c @@ -0,0 +1,32 @@ + +#include + +char* test_pointer = NULL; +int test_array[10] = {0}; +volatile short test_volatile = 1; +float test_float = 0.0; + +struct { + unsigned int status0 : 1; + unsigned int status1 : 1; +} status; + + +struct S +{ + int m0; +}; + +const struct S test_const; +long* restrict test_restrict; + +int +foo_1(struct S* s) +{ + return s->m0; +} + +int main() +{ + +} diff --git a/tests/data/test-read-ctf/test0.hash.abi b/tests/data/test-read-ctf/test0.hash.abi new file mode 100644 index 00000000..b58520ab --- /dev/null +++ b/tests/data/test-read-ctf/test0.hash.abi @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test1.c b/tests/data/test-read-ctf/test1.c new file mode 100644 index 00000000..3a5bac49 --- /dev/null +++ b/tests/data/test-read-ctf/test1.c @@ -0,0 +1,25 @@ +enum opaque_enum; +struct opaque_struct; + +typedef enum opaque_enum opaque_enum; +typedef struct opaque_struct opaque_struct; + +void +fn(opaque_struct *, opaque_enum *e); + +enum opaque_enum +{ + e0, + e1 +}; + +struct opaque_struct +{ + opaque_enum m0; +}; + +void +fn(opaque_struct * s, opaque_enum *e) +{ + s->m0 = *e; +} diff --git a/tests/data/test-read-ctf/test1.so b/tests/data/test-read-ctf/test1.so new file mode 100755 index 0000000000000000000000000000000000000000..df5ef8d38fa53081007cab96424e3d60b512751f GIT binary patch literal 15592 zcmeHOZEPGz8J@euiD?_#r38Y5+HI9eNtEoJT~Y#-nsXdGmtU{|dmTJ7DfeTVMD z-0h`yMMY@we0FMPI-N=>!VdMY+N6}q8NtB^sUf`MY7qDRYE>vi~%VcI*C7LDnU%Su(eA^i~)|m_wct2NgTJ^1zFaO6tWL*#p@>C zhQYK;Lrv^*#x7^MJGW!3{l4Wg&}$*@iz2{(ZQT zFb~Fi)$Qv1osnce6+CaT)~I`}&~JvGr@S+BvtB7^28)$e7&PZ*C##KmFy|MlK_u%h z@ruj7w@|73)ygx0TBxgPrBHNR4fjEHdgjc@NpIX8caI@vO8=#Ck3i@rQDlF$M=S4< ztQU-&!X^0fz)fL&bZR3!0^ci!(2 z$k+21pIuksU7EbS_v>2v^X}U3QdfR_!?<` z8?=1;bJn}v9B>x641E60ZudE0f%ip7rJgybQp+Q${dephyn+vmV*4Rnul%9g)!#OU zMy7}MJu-az(}T~c6Qd6ue&B%qOe^-Ma9xKUzgdFRwx0z48Di>hwG%@lUrbN#+4Teh zh=K*10hT>jP@HFEBImEV>El=t?cnoX>Kd8^wHdDhU}tK2cP*`utUH1utv45&v4 zJB1_IXK-&1Y%XH#HvBIc0qb$i@Ue+k1MTreSl6d)^zk8B)65fo=4$#0BmcXhdvT4w z{}$pt_GCQnCq6wn`7!6<>9g~PoUw5?>t>zt?D*IiF6Usdyc9GmwV)pQ)k8@K30m5} zQ@zRaH}WgWqr8{k_}h zXSd-$0{(q{{HtO!Y=!NG1-Ga+x9xjj%`3{r{g(2)Qo~!UHVS^#D}{|_%k$gIs@SM4 zRf8}nx!L|2vYEf)`OT)k;$a{+SJXn&uLWMIU8}9YBu07A47aF;K`R_Xg*} zKRz|*%}tz~nSw(J{EjCUa1f#2`G$9Kh9MU}w(!Sa?Ud(E1NvbL$cs0AeFO9|E_ngY z;7X(4L@p1UfE>^eA0h)Bma6qS*!;or&15qg+`^Ml-pXV zg?<4zY(}`u(qg^smi<;)xuuml)FK=o(e}1h}M6gCE9#It}Lb-)jOSyP*co*}+w6d6C+{!c(IZQ^s-n-|Rd@Bw2_B(dV~eGqYb$Jh}krkSLBF6JZPzq*{V3ZqIp|nCn2gNVY#(S8V2AIY!gq12i-^Y5#ff zB|iJ_pc5$)e0$z?# I@1C^(7v)NDpa1{> literal 0 HcmV?d00001 diff --git a/tests/data/test-read-ctf/test1.so.abi b/tests/data/test-read-ctf/test1.so.abi new file mode 100644 index 00000000..5b3caf63 --- /dev/null +++ b/tests/data/test-read-ctf/test1.so.abi @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test1.so.hash.abi b/tests/data/test-read-ctf/test1.so.hash.abi new file mode 100644 index 00000000..8019cb54 --- /dev/null +++ b/tests/data/test-read-ctf/test1.so.hash.abi @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test2.c b/tests/data/test-read-ctf/test2.c new file mode 100644 index 00000000..b04490a8 --- /dev/null +++ b/tests/data/test-read-ctf/test2.c @@ -0,0 +1,19 @@ +struct S0 +{ + void* m0; +}; + +typedef const void* POINTER; + +struct S1 +{ + POINTER m0; +}; + +void foo(struct S0* a __attribute__((unused))) +{ +} + +void bar(struct S1* a __attribute__((unused))) +{ +} diff --git a/tests/data/test-read-ctf/test2.so b/tests/data/test-read-ctf/test2.so new file mode 100755 index 0000000000000000000000000000000000000000..d9c07517527553d99951c2129da2f2ae6c1bce03 GIT binary patch literal 15616 zcmeHOZD<_F8J;^^u@WaIxrtL(F3H9uV4HaFq{OLPLwu5a@;Q-YN0y->HJiP=mF~iw zR_v}^Db%#oZLu(J{ilEW0r^!7{SiVS7z)LSi`_yBO8@i&N+g9X z%0IjkW#gst+23_vZ8tRD|0q&j>lE8tzR>koj$JIRme140 z^g`D)R(-v+8r@5EFDUy8*;mNEQa*cTMMSqs@xu0>OY5KGr8hGd|8P}TYf&BF|4g;p zeO7UnJxk^1S2vXxUnoESk3;3mQu!s$tZTlHa&A|_%jCUGmSxJhETTS{^ZZFtU84+^ zbh;k@Nv3|U=Z=p!ea~}UTgcG!+!X?3ZVy$qM1T7;I6cI_#{A;-<@Y~{Vk`Maz-im--bgV?XOoE#q&&J}qNkEB{T&1@`t{Q@u&`gHK|g z?FB8%J>{&>n^k$AE0=F-`%Ov|p{Cd$yhF?FJ+4Ki;JwjYE@=bWaY?BKZPJwm@$^Ml zw&$Gorw_qW22S+ntCS;c|4_^Ayt=;s6~R9CbUy4CJ~BM~4Quz2@soS3{sFsS7p#H8 zKz~17)^2Zp)(aXfZzgh^d(su8WbXfF@lKpl%lVR}{n`hx@mV|Mh_e1CDg9kqkNJoC zzD7(&Y!_BhX@K{z)b|R^CuJ4l31YZ@%xCCNOaGqserxD|N=&ErZ`7|}%6f9*_ZDhc zqn+ycHJP)72A&gmKSNB0{?`TL0sU{Kew#>--*xFgPn`u%MgK;G>j6Hnz9IFu3Q>ec z(T|B_`Ke3cpQR34>s_UE2kATQyWh2ef4}xm@5kT2f&Vem@9L0ORD&pt=BB3Xs#x2$ z??f%9${Y7X+TUOEo$01uahpyp@`KQE=jKJ#Z_PHn$gA0f&K|s(zu~w+;4U~c!Gi@c z6}TMIO-f5897m!bS4LfMoUy7C;r?M3w#J6b-;no zCdfk$U*I4^F?np^-Iq7>Ln#Xl#=639#pHFFWIl<(Z%2N^K1>(I^s&z)baCM~-lXK@ z!4c+AZ7!?yd>=^gIez=|6HR3=zv;*6O4o}wKACcOdy~)YTo30@lpGSmj$a3nulp@8 zUs{HobfpRP%J6!>u%?-9|IdLmcL7ZsbaKU*Ng5ebs16N<8+*j~yMKEKP_L z1#zNZv3;;hYPL9tq_d@MeE?EXXfm>8`gzgTbLm?MWaC2Y&q=(VZ)zUCpcsa zyr#ypO^5*F-=bY`;^@Oe0CB)3d|xd}5-h1epIGdnbkQNVZ2AjHU%$Eq)&{f>;Oe`r)7S8;UTj13-6g5UIUr-*0cz<)>Go^2d>Yw?c&u~UR68Pny8n-no%_^&>hOD^>6djp2*wTav&1Ch zEgc7n>fjF<)J??~v;h?DMLc9sUI!%eV;ur|kd29w62&aplJWTc2F3aiRiyi`)*Ea1 z3rl-y%HL*^B_00*GID;5U%^t|pubRJ`;LA?@nd3mj$wSUF2^~-v_E9fpHXa2A|C6k z12!qCz)wkQGW5S91J51g$9e|mEuYeWqu+?b_KVpLE@OzmiHRV@i~X1e*gdg literal 0 HcmV?d00001 diff --git a/tests/data/test-read-ctf/test2.so.abi b/tests/data/test-read-ctf/test2.so.abi new file mode 100644 index 00000000..eb6aff3e --- /dev/null +++ b/tests/data/test-read-ctf/test2.so.abi @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test2.so.hash.abi b/tests/data/test-read-ctf/test2.so.hash.abi new file mode 100644 index 00000000..6e57333b --- /dev/null +++ b/tests/data/test-read-ctf/test2.so.hash.abi @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test3.so.abi b/tests/data/test-read-ctf/test3.so.abi new file mode 100644 index 00000000..9d55fec5 --- /dev/null +++ b/tests/data/test-read-ctf/test3.so.abi @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test3.so.hash.abi b/tests/data/test-read-ctf/test3.so.hash.abi new file mode 100644 index 00000000..9d55fec5 --- /dev/null +++ b/tests/data/test-read-ctf/test3.so.hash.abi @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test4.so.abi b/tests/data/test-read-ctf/test4.so.abi new file mode 100644 index 00000000..b8e0ead3 --- /dev/null +++ b/tests/data/test-read-ctf/test4.so.abi @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test4.so.hash.abi b/tests/data/test-read-ctf/test4.so.hash.abi new file mode 100644 index 00000000..dbe34d9c --- /dev/null +++ b/tests/data/test-read-ctf/test4.so.hash.abi @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test5.c b/tests/data/test-read-ctf/test5.c new file mode 100644 index 00000000..24ee3cab --- /dev/null +++ b/tests/data/test-read-ctf/test5.c @@ -0,0 +1,41 @@ +// test function declaration passing const volatile modifier. +long +foo(char* c, const volatile long l); + +long +foo(char* c, const volatile long l) +{return *c + l;} + +// test function declaration passing variable arguments. +void +bar(const int c, ...) +{} + +void +baz(int c) +{c = 0;} + +// test function declaration passing an enum type argument. +enum E {e0, e1}; + +void +bar2(enum E e) +{int c = e; ++c;} + +// test function declaration passing a typedef argument. +typedef long long long_long; + +long_long +baz2(int c) +{c = 0; return c;} + +typedef const volatile unsigned long long useless_long_long; + +static useless_long_long +this_should_not_be_seen_by_bidw() +{ + int i = 0; + bar(0); + baz2(i); + return 0; +} diff --git a/tests/data/test-read-ctf/test5.o b/tests/data/test-read-ctf/test5.o new file mode 100644 index 0000000000000000000000000000000000000000..8af51bed7cf40123daadf2f7a60dc137fc8021ab GIT binary patch literal 2720 zcmbtWO^72!6t12fv#ah*kE;#?>!B5qjhfC6tcOK3GQ`bcbVV6h&?VcQ^d!;zjOmUh z%MK2#3e7MO1VKb$j~+!(Joq!P$nJuNIf)lh55gYiFnXFpVEn#HRnqnZ1by)8z53pJ zRj*&Ys^p!*%JVaZAv77{88Mk@R0!+%M9)h#FXqLZSS^Ns6vK^!V%Xg;ZWRv9uSC)O zZWro)(b&CoL)x$H6~k{=4i68D;g=Vs`0%n6+ck)l@V#{@wtEoo?gW;ZENq&|7Y1f> z^}3n7^tqYzcFbgR*GzVQGm{(pgWGc5aASD0Fk~`=(MI9M-d15REDWy|hQ=7vPFsax z@uP7@3o7(`#(&M>4hJ}eH>D=A+c*CDb#{gZ(g!0k9+#kzGm2}d+%M4Y1)JbGZ~}Z1 zd^gw!hv2K=0=NgRgIREF^2jXYF))d7#2E)l&}M-b!Jxzm40*Ub%9#+4GtQRk*e3S? zw0IW=PubKuT$+^QxvCr%Y18N2qIHx8rNP`0w0O@*5|jCBOvmxt@Ga7hIg&QzIL^yp z4d^ouc^~+G@HQBfU}A{VWtd-(upDyqS7e`}QV?E7cv;bH`Sohct623`AR6sf)slmr zl{kyw|8Ng#b-(1-+TBK_)M^JM*DLv+*DAUFl3TC5Ex3s5T*-;I+Vu*wPL5M5qZMgi zYqv$Y1|(f;H@&pmcl+sf$0;|wwBISG8+F%l>s6=TNOjl!pyN5sbl~}cpRPE8Bh?hZ zN~#>J$=O-EEX4Wc<#X1V^DnL@t!&QD*cmIA$z`)(>x|c1_d4~a*9x3Ql9f=$DtOcg zL3xcGV)~p7HCOE<9$*m2xbm_vdJD$slgCdC;QSCUGRflb-2B4(Gs|;{SK)vuZBG*i zUF4wcGp|So+Fv6M;?a)nE0g%E#6dC#9e-hB|72tq4^nFTOB4Gy%ASteUmw|(>4;z* zX2qX}M+^XtjjJ@VvQDU>_(DN)FX$}xsffR&>?wuoxvUMatipNKNwOx8XTe-2BnZ;y zaSl51PbDfwHK5LZVO#uLyRsG8o2o};v*v{OQLV?GV2=#()RKOR;5=WATMEZD6knpaz0d%e@fRSNpTmdkjx(ptx9s@GB_^FM@zSoR*D z^C;!j>> zaIX1Z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test6.c b/tests/data/test-read-ctf/test6.c new file mode 100644 index 00000000..706c34c0 --- /dev/null +++ b/tests/data/test-read-ctf/test6.c @@ -0,0 +1,35 @@ +struct b0 +{ + long long m0; + char m1; +}; + +struct b1 +{ + double m0; + char m1; +}; + +struct s0; + +typedef int integer; +typedef unsigned char byte; +typedef integer (*mem_fun)(struct s0 *); + +struct s0 +{ + + struct b0 b0; + struct b1 b1; + + integer m0; + byte m1; + mem_fun f; +}; + +integer +fun(struct s0 *s0) +{ + s0->f = fun; + return s0->m0 + s0->m1; +} diff --git a/tests/data/test-read-ctf/test6.o.abi b/tests/data/test-read-ctf/test6.o.abi new file mode 100644 index 00000000..e69de29b diff --git a/tests/data/test-read-ctf/test7.c b/tests/data/test-read-ctf/test7.c new file mode 100644 index 00000000..b9097987 --- /dev/null +++ b/tests/data/test-read-ctf/test7.c @@ -0,0 +1,8 @@ +#include "test7.h" + +void first_type_constructor(struct first_type *ft) +{ + ft->member0 = 0; + ft->member1 = 0; + ft->ctor = first_type_constructor; +} diff --git a/tests/data/test-read-ctf/test7.h b/tests/data/test-read-ctf/test7.h new file mode 100644 index 00000000..1995736d --- /dev/null +++ b/tests/data/test-read-ctf/test7.h @@ -0,0 +1,24 @@ +#include + +typedef int integer; +typedef unsigned char character; +struct first_type; + +void +first_type_constructor(struct first_type *ft); + +typedef void (*constructor)(); + +struct first_type +{ + integer member0; + character member1; + constructor ctor; +}; + +struct second_type +{ + integer member0; + character member1; + constructor ctor; +}; diff --git a/tests/data/test-read-ctf/test7.o b/tests/data/test-read-ctf/test7.o new file mode 100644 index 0000000000000000000000000000000000000000..43694a8678e8d156bab63889dc1209ee64462c4c GIT binary patch literal 2152 zcmbtV&ubG=5S~qA+F~1P6&34Y5s|hwo1}t@g07U>2%;bqd#Kdi&1?k?P(b0XJSdYUQ<{YmTQv3>Ys*5q1o6PBg6R4}q z**{e8_iJIw|Ae`^-|G&arFw4|=kR>n!30U-pM{TO`3_G$^M{bV>sV&#PVZ5N08SGA z(6Pf9o*z+l)N$0$s3z)RRGwR0`zZ2+7rW{K&2OqN=;T1kyf3975I@bXhmX zsaqjL^&ph}g}7$IO+{kbtJJN+twl|Qag60iM2`cv3QpihGHf|A2w~j~Be^EqO#z

Y0+Qx)7H8wo5h0asxBPGGI0N3*qFER_`xhe(_|ASE7 zEPVet$UUS!sDyJA@npgt_aZ+{g?@Z*{C(p+%{30EZ&#Hw8Fc5xT*U63CR!r + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test8.c b/tests/data/test-read-ctf/test8.c new file mode 100644 index 00000000..67580f9a --- /dev/null +++ b/tests/data/test-read-ctf/test8.c @@ -0,0 +1,7 @@ +// Test generic pointer type passed as argument in function. +// Compile this by doing gcc -gctf -Wall -c test8.cc + +void +bar(void*) +{ +} diff --git a/tests/data/test-read-ctf/test8.o b/tests/data/test-read-ctf/test8.o new file mode 100644 index 0000000000000000000000000000000000000000..216142ed764b244f2172460e379934a835987470 GIT binary patch literal 1496 zcmbtU!EVz)5S>j!TOg@Ig%DCXm=mcW>m(PV9#Bw3TLI#Llw$>JXWLk{Ll z)LV}n`4kWz!if)n6E~P~cAaGvE-=!pXWq=4@y@RO?#c803S(e|!6R6D1_k&~S=#-= z>_Z)DFg(2Yc6jmj=jG9tA786w(zRuFVO4P@-PGE{=Ma?$>!`XVnIueOw+LS=pmNzN za?jIf1cAuFAE$}*gLyFb(@cc1^z$tA<0ue8bRwd-bvDgaCPm^anXB9%2_*`%h2W?a zs^h}z@etr(Fxc~&2QP-ZUZ>03yzO<{-A)J9Ys%SFW>F$1O2oU1&3O1uS5T3F8)2Vl zgGQM4%`9)~0DJQi*sQ^JY8#uE7`%fxDamzO9&a_?R|fUi2$D}TRg|cQgWt%(_n!Ic@7+hic6Z% zw17`iB{|Nhl`9dRYX4+%#-~||GgWionT!RO<5$O-NF;UpZ`r{LG$V7POu@c3%KdAf za&5Vb4q?vagJ*VHnD=OWfQJ#t3U$Ib_y!;(Z4K>gzmq2JSd_r2V^9_X4bf2{fR1F^;BA7PNb$G)9}c0(7ut#SHM z5!dhyPHo)YMER)uza|HT?h&1_%ct+nJ$r=8qV>XAF1l<9+(2s;zo}m;E;AQ~%l{23 CoNjCY literal 0 HcmV?d00001 diff --git a/tests/data/test-read-ctf/test8.o.abi b/tests/data/test-read-ctf/test8.o.abi new file mode 100644 index 00000000..68b3af06 --- /dev/null +++ b/tests/data/test-read-ctf/test8.o.abi @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/tests/data/test-read-ctf/test9.c b/tests/data/test-read-ctf/test9.c new file mode 100644 index 00000000..eb318b37 --- /dev/null +++ b/tests/data/test-read-ctf/test9.c @@ -0,0 +1,13 @@ +// test arrays type definitions +struct S +{ + int a[5]; + char *b[7]; + double c[5][3]; + int *(*d[10])[4]; + char e[1]; +}; + +int foo(struct S*) +{ +} diff --git a/tests/data/test-read-ctf/test9.o b/tests/data/test-read-ctf/test9.o new file mode 100644 index 0000000000000000000000000000000000000000..fc3a358103c0708acc1e2868612e665ae04c1c15 GIT binary patch literal 1864 zcmbtU&2G~`5FWQB4gCqBLI@}a!-ZBQc2X|T0}6_0D?l7TJyu{l+a$uVBYPt?h@YO2 zdh3w~;J{;4;w89o;sM~q4d&bIlC3Ec5}!2Q`TJ(PvtGZw|7df{amc`-yEL(km#925 z(VI$b(jqO;&i3Kg?ZekUj&?tN|1vXWl5QDAuV6#UT3&IFH>_7#d=|7kLv+PuYt^*!y^ld^LV+jjh7Wv$lmRT4j zya(s%GE_lKLvgsJ3Zm}yabQl@Mma#`!DnhKulAqSe$#->iXpPDxbr#(d(fyX7)|Fa zvW*&;g@)qdec{JG^jt5Z{&^M)6~yT&^%6;OnsnS@lJ`1^XuI$P6m^4)LTabOFcuV1 zn*{BpDf!*BFZ^&6j{GzWqFDHO7Wr{648mR~=*6|+AeWg4`o0vo%>8yC1Etp3*{(%$ zPg!@oh-jOau4$1luh`fB%mqEy@%*JciXj1G;@-SQS!aOIB=gNdkohs;IIBLA~?+~$~#B7c{IxQ|UciS+}0 zpqI2CKP+$!-}q1K4N6t>pTl6xv%pp4n;$E3Yz#CXKTI3N`QZntQ|&Z*ubuG;@8tZ9 F`xjz3gGK-V literal 0 HcmV?d00001 diff --git a/tests/data/test-read-ctf/test9.o.abi b/tests/data/test-read-ctf/test9.o.abi new file mode 100644 index 00000000..746dd77b --- /dev/null +++ b/tests/data/test-read-ctf/test9.o.abi @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/test-read-dwarf/PR26261/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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 + - - @@ -16,18 +14,18 @@ - + - - - - + + + + - - - + + + @@ -36,44 +34,44 @@ - + - - - + + + - + - + - + - - + + - + - - + + - + - + - - + + diff --git a/tests/data/test-read-dwarf/PR27700/test-PR27700.abi b/tests/data/test-read-dwarf/PR27700/test-PR27700.abi index e593f79f..043ae0ca 100644 --- a/tests/data/test-read-dwarf/PR27700/test-PR27700.abi +++ b/tests/data/test-read-dwarf/PR27700/test-PR27700.abi @@ -1,15 +1,15 @@ - + - + - + - - + + diff --git a/tests/data/test-read-dwarf/PR27700/test-PR27700.o b/tests/data/test-read-dwarf/PR27700/test-PR27700.o deleted file mode 100644 index 3f084d2132f0f43a683769ea91e9733fc599700a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3248 zcmb_e&2Jl35TCbe$1dAAAFfJ6in1V}DZ*s*VTGc zLJ^`85>f>cL2!d365@u0#6N(zapR7-AaUhZi37~+&T}@e8x;Yg_|433X5P%3_py2Z zxfeDJAwZFUH8|1~3h-^=NN&Vp1I|Dh_O@>Qwsq^h+lO!b@Cm|s5Jj>YG~7=^nyi#! zc7{VJzc3?a3)A-km^on<*DTB0F0WWmSx;J`43K*WENjg&OSlwAJUwR? z6WfJ33TvFZF-Kk#c~FM!vT+WeFoj{;Xo1J507?yUA7Y6HRqPmG;br7`^u2^!2=QlW zk{GQKe<&;@lc8>)JY}MgB9RwxYV2|L1H;6a{b1yG1L@g*5W(h4d-i&L*{;`}np3lv zYD;zcvln;KVatu!P^n$CD}!i1kgHu8$k1=2>W1y!>cN%EmCKLYl`dfWoAOe^Y6+_+ zYzeBp;Xqcsq4%a=?fOx*@3-8R-*x?db!T^JdAU}rMsgI5s-7FUu~-SE>s7qB-LRuv zfLto<@3jA?N&TSR-}hw2^Fuv>mhW2VUw3){o9pW<_9Axf;y-8`@5UMC;>IqBgK05; zx==jCEj*7n{fOc-aJ4l3p|L(Wv4IW=oH^17$iW|fWf^gkvtTg!Wflnhco9fT_-f4SHZwZmw zgL_a;uUgGaIIT|UvnUf0PQMLOkj^G-jI#>&u|PXEzNjca$~euTY9Q!p3a7kH);Bf0 z!}^OFK4AS74S$vO*EO6~z+)eiUZ?5_)tP4>V$^3M-T%P^9`|97^+z=P3)X8I{x$1Q zX!!T6uW0y>tUt?Kug7MbdY|q;IHPw4k=sHZg$eH|DUt^fIP_A1(;AJy31#1PJlWds zHvOP8L|ZJotyU;#?o>vR+kT5D zmc3>tbO(|b@*mke##4{fzN+aOER639>*SlJ2T&nQe^H)KJEdej{sP+Qy#L$yI>zdA zQaY9YGg4Bd`_lKBUcE-jCl>i|+Z-^1Ao;1gi68lxR&mtlB*QPU6(D4;nC`oS1|1{c z9R}5XI4PdinN`2d8>-@|etNC-`aQ(5^50}oy&LEjlkQ9JQC9vP&VR^pl%L)&J^wYt zXiilpiZT7ni6R9sSNRox7xAq4O}^Ye-6j5`6XMH!AggzY|D5ABH+V)r(CnbIJDv*Y?_8u-Dak z11<=0pddwnR3s!oLU4csHxLI7TtMOg{{VkN&xl(k4luL(p1pqAs8V^7-^~1GelzpF z*6&_@Hl8J6HiJ;F(A{H*75*$mfM zIo*#myv)rp_@;kutqyS{~EQy@X zv=C+9qG^{P{R-%ey^q?QLpIEJ4t-z?k&crr$-ev^EyF<PMp8@r>8L4>X z|Nb}4$x~k#Zm>8?mBZ1KHn@0Hs*gkBu_l}x@(F9Ia+sSM35^3@%9O#Okb+YGc;Qn9 zhsmp(c$ZLHO6Z<~$_~d!tOyE@auCPB6Qq7a>KPzHLlun4>JOMWaPCX|31bcL65IRkiVGzrn)IxV0 zf=zD-?B-|$cHs6MyX`g)y9b`%8KN)Jon|v|-Yfs60Z z_J^TsYB*0 zBEWB>sOhA}?x9P?DEb!xu1%?trpCUEXj=chY)q7V>Yu(=YX5D-)SSfpOMneB5<`tW zKwnz@&qaN?PgI}YwOao+Vw6+%iE1>S5s&dJ2?#0cOZhh9Y5YG0-+l=HuHY+Sz|{*W z0%Tno|ApYsd^-@+1-~W(g_P@;@TaJx?cWb6`$zujH~q_~ hd^(e~rQV~aa6A!<$*iuQ@}}|s5dD8MVaAHe{|}8}$8i7v diff --git a/tests/data/test-read-dwarf/test-PR26568-1.o.abi b/tests/data/test-read-dwarf/test-PR26568-1.o.abi index 5c891200..1056dc9a 100644 --- a/tests/data/test-read-dwarf/test-PR26568-1.o.abi +++ b/tests/data/test-read-dwarf/test-PR26568-1.o.abi @@ -1,16 +1,16 @@ - + - + - + - + @@ -18,19 +18,19 @@ - + - + - + - + - - + + diff --git a/tests/data/test-read-dwarf/test-PR26568-2.o b/tests/data/test-read-dwarf/test-PR26568-2.o deleted file mode 100644 index cc94708c9cb10e2f0f5e51aed7e7a713767caaf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2824 zcmbtVQHvW@6h3!mlT3CtF`KB}WqlaI(k^r++wE?Mm9433-4sh%7W$x2)=6@cj3$#Z znXRc(6clk0L_rZnw9p4%efCN4q2P}YU-|=lEBK)2%-owy?oKJ_fw}kG@0{chN+O_GKRy4Hq?F%j|TqV(P`U;xa4eN~h3T zVWxS}e92@L%v%86pvBcn-NdS10Moo=>IRk})FPI0is{CTlPkbgq#6!;c{L`VS*75O zm2X~IrJ(uDG^n-$u=o@PB?g?M;;1aZ1PPJ*NI;SLDvlbQ!I81Qiv=8`*NSJ&AmroF z-apu^ZP)7drqhnO`8Yf-^gR3MN28)?$U5P>cm0O7Yi&7oXWQD`IKRD7+q__%J>VUy z>4q_GUwCodvWMZ3&v$y<=YiM8r5m*SJCl0Nu5DR%532pqkXJjS&f8wK=Y`dQ*K%84 z&-Dh?t~cT1DrFv5J8tMksvU5*V|U(lgDwn4e$S#i0DHT;7p=2c)B2N3!ks-GZxz^k z2f!vJwziZrzQ8ki4sm)&q7%JbEPbNw7P4=lLky>mNX4uC*FR}SJ+*W2bj5pAIXYU> zL>JAX+H^=XVZx|GF0q=aI^<`Igr)=D-W1WHkb+YEc&}4Lhouu}8If}09HzJR#I>UC z#C8!8s7<9#kc>s2w+dz)T&)Yk=0{>k@!Gl5gyuf_VV znAJG4W{Q&$J~WktuKI612Db!GH74r>XMATEx-Fc;AfEeD3;84jhx!Ga)_4p~zz43= z;jN?Iq33r;Xp3~W)e89SIkOwMevi*n2Aad(QDkA$PFl>~ZL}-w}a$ z|F9dlLoN#cpVJ!h>8#{=%5V*#Oz)9clW$U<#|2?(M?J1Ql~3PIx(EN2e_rIrX-;JR zpXSiG)+9t-8fmKU>xib+-^j#7$*211Yo*rTK}?NF%-;prq(wqh-$S&e<-aBJ%X6aq)YoeM zTZmCiStqKIltnZCAOSJU{BnLD@ihL=g6}+m|FPgJZt%z4$6#iac_s3#;H&O`3ZO0> z#Vq$P;jd6hJHJm;&X4{Ek}uDd>QQr3>=n^a`=Vg_e$!t@<C diff --git a/tests/data/test-read-dwarf/test-PR26568-2.o.abi b/tests/data/test-read-dwarf/test-PR26568-2.o.abi index cdb0243a..b67b4386 100644 --- a/tests/data/test-read-dwarf/test-PR26568-2.o.abi +++ b/tests/data/test-read-dwarf/test-PR26568-2.o.abi @@ -1,11 +1,11 @@ - + - + - + @@ -13,19 +13,19 @@ - + - + - + - + - - + + diff --git a/tests/data/test-read-dwarf/test3-alias-1.so.hash.abi b/tests/data/test-read-dwarf/test3-alias-1.so.hash.abi index 02795ad0..b3a4801a 100644 --- a/tests/data/test-read-dwarf/test3-alias-1.so.hash.abi +++ b/tests/data/test-read-dwarf/test3-alias-1.so.hash.abi @@ -1,12 +1,12 @@ - + - - + + diff --git a/tests/data/test-read-dwarf/test3-alias-2.so.hash.abi b/tests/data/test-read-dwarf/test3-alias-2.so.hash.abi index 775a9a97..07a7f2c4 100644 --- a/tests/data/test-read-dwarf/test3-alias-2.so.hash.abi +++ b/tests/data/test-read-dwarf/test3-alias-2.so.hash.abi @@ -1,4 +1,4 @@ - + @@ -9,8 +9,8 @@ - - + + diff --git a/tests/data/test-read-dwarf/test3-alias-3.so.hash.abi b/tests/data/test-read-dwarf/test3-alias-3.so.hash.abi index 6c604948..7908bdb8 100644 --- a/tests/data/test-read-dwarf/test3-alias-3.so.hash.abi +++ b/tests/data/test-read-dwarf/test3-alias-3.so.hash.abi @@ -1,12 +1,12 @@ - + - - + + diff --git a/tests/data/test-read-dwarf/test3-alias-4.so.hash.abi b/tests/data/test-read-dwarf/test3-alias-4.so.hash.abi index 912c710c..22a56fa5 100644 --- a/tests/data/test-read-dwarf/test3-alias-4.so.hash.abi +++ b/tests/data/test-read-dwarf/test3-alias-4.so.hash.abi @@ -1,4 +1,4 @@ - + diff --git a/tests/data/test-read-dwarf/test3.c b/tests/data/test-read-dwarf/test3.c deleted file mode 100644 index 2808db4b..00000000 --- a/tests/data/test-read-dwarf/test3.c +++ /dev/null @@ -1,11 +0,0 @@ -// Test file for creating multiple alias for a symbol - -void __foo(void); -void foo(void) __attribute__((weak, alias("__foo"))); -void foo__(void) __attribute__((weak, alias("__foo"))); -void __foo__(void) __attribute__((alias("__foo"))); - -void __foo(void) -{ - -} diff --git a/tests/data/test-read-dwarf/test3.so b/tests/data/test-read-dwarf/test3.so deleted file mode 100755 index 4c426fc3c202d2f2dd027ffd8825ccfea36b2a09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8851 zcmeHMeQX>@6`#Aa<8$qt9j6VB(~?z48YjZ*k0i!QWMb!H`x5N5xHbh*YqfW~XJ30C zW_K^PO8`p_At|z`5E4P+kAj3i2%#V$l=2~5j4C7$GKET^e??TKc8G-2isFi@=Dpc@ z=iRxz773|;c}}};<~Q$S_RZd#nSEax7#<9VLX1j;eVp;u4j1VY9nHImgRwr=!)oBJ zu!lHr^;TC|?NW^k5oI8S1#O^-)t%Tvs`zMMm^WEMP?EzY%0**te>A4>3egolc*clE zT{cz)6tCZjewiK=d_<8K%cHM32G-vZ{*dW|oQpA{B=<>>6C#4+y-B0!9u@W~`K4L- zgQ$2M{%rSyjtE>s7slCNjaRO$z4^@A^Tx=YOB>H^y!}vh3!1=woD%Z?k6uzD^HqJd zh}{PlPRE&nm+xM+uh#wI)vsSlU$Gl*eeTl_KEHS`R<-=YxjTRUXYBjy{}A2>=717m zwd@DdOM(7T0(fy8LAYK4@2P-~0)7B4xhw+E$R1#=jf$^p23iML9a|NXM052V;Eik# z>yY@rP=Ws&f?w8;^Vt;OhtG4o-0mKZ*RypR2(+;j;c5yPC)2daTp_R7j&3=c#9xn`x$@J34eEZQC6YKzV~XrtKUr%Va6a2a8 z7KS%b{$U?t3qa|AQEbW7G8SexgdoKW`hVXLep?rDgz#zdC&dXN&qVuHgTfJHD}@@U z-}d16pP{nq!Rfz_ed`|F`|59aa2g8oH;eZR|94*fiU;@dCl>BT6JM=vyH8<>FE2UO zs~-Wu#KLc*%cyOuY@X->md!)Q;oh*n4{F$+LWZ^5n@|oN#Ww!!)>fdISgdXZAhFon z0%SaKWFv9ywZy_kY$iOh3l%DxV)HiY1O9smE%x34Li{gmL=xA2lX&6I=|pHH z@u!U<7k=PtT=*sDjfupy7dQWg^7Fkv0gx3BCl-2Vur?0%oO;k_)hKLr0*16Y1-FS8 ztFJ*WgFDRiFF7saAb%8K(6zZTvGzD9XxKlG{A-`! zb#7*2IsGj6qi|bjU*uFX@Zh}v<=xHA<3R5M`x8JhmSPD#J<39}jiG(@HPL6mYXp8 zwgUoVbrrTyw&(NFubeWFck z9Y1^kM*A~dAF)vXzuw&}V0&E*g!WK3#pZ~wq0rwWHfeZP!SYL&zz*3hxSnGXVz7Z! zc$@Zie9Z=g)^~9{Wgp^PjLizegx?gKJR0Yc;DgO5FJuq41AP3~1wSnNyiI;x7i~xM zzb)FOaSDAOG@)~|Z1?ZN4{r%N6px=&TH$1QL^-bZs9j1|N9VE5uFfu{b<{MJgzmU_ z+sBTukAgDS->%o>GnQ;C4uI>HD0f%r2>=YZf&{~O0tiLruF$txXjkY^YAjKI$+}Z@hxa1b*Zj>h_^Nip6=oksRiXdHcEX*10|E0PacW6HAC%fK zS!x*$!(k-^E>Pm{>jR}NJ#CrORv~4=$;nXKa!xUC_D-64)5@fvsavV3-r1h+w(jFf z+a$0*dM;kF+&)#vneFydMPSRckLmVPcDr3DS}9WlrG<8*U_6;=hx3=7%uMQ;Y&#yb z>~=ha@oJl8>PDL}qg!clW@D;7mvi(aP{(rV6xH$t$5bctMKxK>WR13r!FX#*x2KqD z%;iDSrHJlqeR?QqfiK=B*nQ;_`?1v;QCO9rK;%T(bWfzi==?q!Ld0_AxogTd?`jg&98K={-jLW+Mw?D$@G%fSfDS8XX_qdAP+uTCjT0M{u zEB70YB#b*nX?}74iFk*E_X}M9j_^3wzvUnLKczWdK987}L;W`-{omsJl`o7H@+iq`Mqj_2MEgVVfW4wZ%QNV-ppP%CT%k!U~t-!Afe))fq13c)tY`_)yp`iVh3ix*b zKM=tGE5L*Dt1M+Xwo`t8<@sD`pwF*fI1*)i@M$`D=ZSYZu;1tS>`EU%;pL;-XyP^4-U!{qcQTXKLPDa NGxzm*6T@y2`@a>G9{B(O diff --git a/tests/data/test-read-dwarf/test3.so.abi b/tests/data/test-read-dwarf/test3.so.abi index 04032c74..a9bf781f 100644 --- a/tests/data/test-read-dwarf/test3.so.abi +++ b/tests/data/test-read-dwarf/test3.so.abi @@ -1,4 +1,4 @@ - + @@ -10,8 +10,8 @@ - - + + diff --git a/tests/data/test-read-dwarf/test3.so.hash.abi b/tests/data/test-read-dwarf/test3.so.hash.abi index ea9ddc02..f429b22f 100644 --- a/tests/data/test-read-dwarf/test3.so.hash.abi +++ b/tests/data/test-read-dwarf/test3.so.hash.abi @@ -1,4 +1,4 @@ - + @@ -10,8 +10,8 @@ - - + + diff --git a/tests/data/test-read-dwarf/test4.c b/tests/data/test-read-dwarf/test4.c deleted file mode 100644 index 7f0abaa1..00000000 --- a/tests/data/test-read-dwarf/test4.c +++ /dev/null @@ -1,14 +0,0 @@ -// Test file for restrict (needs to be compiled by a GCC that actually emits -// DW_TAG_restrict_type. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59051 -// -// gcc -gdwarf-3 -std=c99 -shared -nostartfiles -o test4.so test4.c - -char * -cpy (char * restrict s1, const char * restrict s2, unsigned int n) -{ - char *t1 = s1; - const char *t2 = s2; - while(n-- > 0) - *t1++ = *t2++; - return s1; -} diff --git a/tests/data/test-read-dwarf/test4.so b/tests/data/test-read-dwarf/test4.so deleted file mode 100755 index 3be3f0d644190425cbb2a08ed7b4f1d164c13ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3364 zcmcImPiP!v6n`_b|JqG9o1{u1Dx+wdh?yj9NYj?oP0~#_x@}TzARc6#-JR?%W+!20 zViQq%s7hlABqHiTu!08#!HX0H4*_pIdGgf5UIIcd@mBN@-<$c~c6PF>i1@*L?|r}b zdvCsZ-}k-wZe;T_vLpdF1ug)MGO~|kgkd`-6cia4hbZ>lkn*_EN2WtsUBqDtpn4p7 z2Zdz3F8eskU9?f#^?K@5Por@E#xLP{0nG2Yr3mUDi}{4*F~MU=TxwU*FYxI;_&0r8 z*c6oHN0MT-%aNE4GTJu{+8QZt8Xsc&)v?Vnth0}j&lFOlc+t+ zZOu!$%>_gk_H$b=p?-P4>u%4j^zH2Zt@#7=dw+NBSMq)RXPl4Jr<|ue(l>s4aB%Pf zN?sS~?N>lrPfL9r@x(R~o&WwRFquk!AWwJ3fd{MKH?%PLSf{cO2kE0^c!#R21FB|p%#;3H&Dch5+_qM z@g4TQEfRkWb&$HH=Tf~%CDoVemU^T#u9~b#FLo%2bIJ3`lO40Y1ZR$ZI@KZd;%7#| zx6Jm+xS)~IreU-TlF3=5#hyjw0!GCbp8-M=Cp-ZY_)Zy~qBl!_raH0rN+#|R30%{0 zN3|kN3*d;%$vL)n^X5?E$9pf!GSY`CD>ZYdX4r2IId*Y~d>mM_oNC!JOKR0}0hd^v z{)aVI2W#${Wloe$3m3kKL&GjsCf3Kt2FFI#!E))kVJ{7yRtFuoG*LWzwlTM2#jpW1 zXQSpC1(dGs%L;21!>NE)+OUw~OVCx%!Q$1-ZwB51{x8f`*E z%)(k(H*CWyn+^}F*3t^=MxkJvZ}DikYMHF#MEnf?$G#8!sn+t|<#W!GP6;)(^Z$YC z!qaG@GtPFd11z`685^A(;;=v0gMokzRp7e9lIsZBsEIP;53nB*7}ueUm$NaE=Hst@c2*h%n9fjoYXLt@3{_hdS|MR+tvr8a0zw$iFAOANO(MCBL zCQ_i?5f0A>Fj6^xER6sbq}~($;kfL_+|@Sze+d7dm?&h}|D87ecSWKpez1l8KSW~~ zBmN0-ftU&FQXdHaFM}ZJ?8h*TdG9es@)z+VO$%ch zu^xPQ|M2-af>^8f*E`UF?V>Llefa$iLkmU0*>W8SniZTepYLW|X`J6?{P2B@>>O?ih~$P$idV@(APyA}$qbnk=nNtL`bOaQgF^-c zTH!Q93GbhES#5HmwI)2=`VnY#kEJ@@>K=Q#4Ni5b6~FNd)GxkvW%BauH0YP|b5oOf ceQsvv)$BF>+T>I|t9#d7zU0!yHh9zh3+b%7 diff --git a/tests/data/test-read-dwarf/test4.so.abi b/tests/data/test-read-dwarf/test4.so.abi index 71f64da3..c38fff66 100644 --- a/tests/data/test-read-dwarf/test4.so.abi +++ b/tests/data/test-read-dwarf/test4.so.abi @@ -1,11 +1,11 @@ - + - + @@ -13,10 +13,10 @@ - - - - + + + + diff --git a/tests/data/test-read-dwarf/test4.so.hash.abi b/tests/data/test-read-dwarf/test4.so.hash.abi index 471ff895..7223f5eb 100644 --- a/tests/data/test-read-dwarf/test4.so.hash.abi +++ b/tests/data/test-read-dwarf/test4.so.hash.abi @@ -1,11 +1,11 @@ - + - + @@ -13,10 +13,10 @@ - - - - + + + + diff --git a/tests/test-annotate.cc b/tests/test-annotate.cc index bc4ce852..174de483 100644 --- a/tests/test-annotate.cc +++ b/tests/test-annotate.cc @@ -42,12 +42,12 @@ InOutSpec in_out_specs[] = "output/test-annotate/test2.so.abi" }, { - "data/test-read-dwarf/test3.so", + "data/test-read-common/test3.so", "data/test-annotate/test3.so.abi", "output/test-annotate/test3.so.abi" }, { - "data/test-read-dwarf/test4.so", + "data/test-read-common/test4.so", "data/test-annotate/test4.so.abi", "output/test-annotate/test4.so.abi" }, diff --git a/tests/test-read-common.cc b/tests/test-read-common.cc new file mode 100644 index 00000000..9681ac27 --- /dev/null +++ b/tests/test-read-common.cc @@ -0,0 +1,264 @@ +// -*- Mode: C++ -*- +// + +/// @file +/// +/// This file implements the common functionality for the tests in +/// CTF and DWARF readers, it does the abstraction in the `act` test +/// stage. + +#include +#include +#include "test-read-common.h" + +using std::ofstream; +using std::cerr; +using std::dynamic_pointer_cast; + +using abigail::tools_utils::emit_prefix; +using abigail::tests::get_build_dir; +using abigail::xml_writer::write_context_sptr; +using abigail::xml_writer::create_write_context; +using abigail::xml_writer::write_corpus; + +namespace abigail +{ +namespace tests +{ +namespace read_common +{ + +/// Constructor. +/// +/// Task to be executed for each test entry in @ref +/// abigail::tests::read_common::InOutSpec. +/// +/// @param InOutSpec the set of tests. +/// +/// @param a_out_abi_base the output base directory for abixml files. +/// +/// @param a_in_elf_base the input base directory for object files. +/// +/// @param a_in_elf_base the input base directory for expected +/// abixml files. +test_task::test_task(const InOutSpec &s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base) + : is_ok(true), + spec(s), + out_abi_base(a_out_abi_base), + in_elf_base(a_in_elf_base), + in_abi_base(a_in_abi_base) + {} + +/// Serialize the abixml @p out_abi_path file. +/// +/// @param out_abi_path the abixml path file. +/// +/// @param corp the ABI @ref abigail::ir::corpus. +/// +/// @return true if abixml file was serialized successfully. Otherwise +/// `error_message` is set with @p out_abi_path and false is returned. +bool +test_task::serialize_corpus(const string& out_abi_path, + corpus_sptr corp) +{ + ofstream of(out_abi_path.c_str(), std::ios_base::trunc); + if (!of.is_open()) + { + error_message = string("failed to read ") + out_abi_path + "\n"; + return false; + } + + write_context_sptr write_ctxt + = create_write_context(corp->get_environment(), of); + set_type_id_style(*write_ctxt, spec.type_id_style); + is_ok = write_corpus(*write_ctxt, corp, /*indent=*/0); + of.close(); + + return is_ok; +} + +/// Spawn `abidw --abidiff` tool appending @p extargs argument. +/// +/// Thew input file object used by `abidw` will be specified by +/// `in_elf_path'. +/// +/// @param extargs the extra argument(s) passed to `abidw` tool. +/// +/// @return true if `abidw` tool was executed correctly. Otherwise +/// `error_message` shows the full path of the input file object and +/// the full output path for the abixml file. +bool +test_task::run_abidw(const string& extargs) +{ + string abidw = string(get_build_dir()) + "/tools/abidw"; + string drop_private_types; + if (!in_public_headers_path.empty()) + drop_private_types += "--headers-dir " + in_public_headers_path + + " --drop-private-types"; + string cmd = abidw + " " + drop_private_types + " --abidiff " + extargs + + in_elf_path; + if (system(cmd.c_str())) + { + error_message = string("ABIs differ:\n") + + in_elf_path + + "\nand:\n" + + out_abi_path + + "\n"; + + return false; + } + + return true; +} + +/// Spawn external `diff` command. +/// +/// The files to be compared are: abixml generated by the input +/// object file and the expected abixml file stored in `in_abi_path`. +/// +/// @return true if `diff` command didn't find defences. Otherwise +/// `error_message` shows the full path of the input file object and +/// the full output path for the abixml file. +bool +test_task::run_diff() +{ + set_in_abi_path(); + string cmd = "diff -u " + in_abi_path + " " + out_abi_path; + if (system(cmd.c_str())) + { + error_message = string("ABIs differ:\n") + + in_abi_path + + "\nand:\n" + + out_abi_path + + "\n"; + + return false; + } + + return true; +} + +/// Write the usage message to @p out stream object. +/// +/// @param prog_name the program name. +/// +/// @param out the stream object to which want to write. +void +display_usage(const string& prog_name, ostream& out) +{ + emit_prefix(prog_name, out) + << "usage: " << prog_name << " [options]\n" + << " where options can be: \n" + << " --help|-h display this message\n" + << " --no-parallel execute testsuite is a sigle thread\n" + ; +} + +/// Parse and process test options. +/// +/// @param argc the arguments number. +/// +/// @param argv the pointer to the arguments. +/// +/// @param opts the valid @ref options to be processed/parsed. +/// +/// @return true if options was processed/parsed successfully. It returns +/// false when help is requested or an invalid option is supplied. +bool +parse_command_line(int argc, char* argv[], options& opts) +{ + for (int i = 1; i < argc; ++i) + { + if (!strcmp(argv[i], "--no-parallel")) + opts.parallel = false; + else if (!strcmp(argv[i], "--help") + || !strcmp(argv[i], "--h")) + return false; + else + { + if (strlen(argv[i]) >= 2 && argv[i][0] == '-' && argv[i][1] == '-') + opts.wrong_option = argv[i]; + return false; + } + } + + return true; +} + +/// The main entry point to execute the testsuite. +/// +/// @param num_tests the number of tests to be executed. +/// +/// @param specs the @ref abigail::tests::read_common::InOutSpec +/// tests container. +/// +/// @param opts the test execution @ref abigail::tests::read_common::options. +/// +/// @param new_test the @ref create_new_test callback function to create +/// a new test task object. +/// +/// @return true if `all` tests were performed successfully. Otherwise +/// false is returned. +bool +run_tests(const size_t num_tests, const InOutSpec* specs, + const options& opts, create_new_test new_test) +{ + size_t num_workers = (opts.parallel + ? std::min(abigail::workers::get_number_of_threads(), + num_tests) + : 1); + + // Create a task queue. The max number of worker threads of the + // queue is the number of the concurrent threads supported by the + // processor of the machine this code runs on. But if + // --no-parallel was provided then the number of worker threads + // equals 1. + abigail::workers::queue task_queue(num_workers); + bool is_ok = true; + + string out_abi_base = string(get_build_dir()) + "/tests/"; + string in_elf_base = string(abigail::tests::get_src_dir()) + "/tests/"; + string in_abi_base = in_elf_base; + + for (const InOutSpec *s = specs; s->in_elf_path; ++s) + { + test_task_sptr t(new_test(s, out_abi_base, + in_elf_base, + in_abi_base)); + ABG_ASSERT(task_queue.schedule_task(t)); + } + + // Wait for all worker threads to finish their job, and wind down. + task_queue.wait_for_workers_to_complete(); + + // Now walk the results and print whatever error messages need to be + // printed. + + const vector& completed_tasks = + task_queue.get_completed_tasks(); + + ABG_ASSERT(completed_tasks.size() == num_tests); + + for (vector::const_iterator ti = + completed_tasks.begin(); + ti != completed_tasks.end(); + ++ti) + { + test_task_sptr t = dynamic_pointer_cast(*ti); + if (!t->is_ok) + { + is_ok = false; + if (!t->error_message.empty()) + cerr << t->error_message << '\n'; + } + } + + return !is_ok; +} + +}//end namespace read_common +}//end namespace tests +}//end namespace abigail diff --git a/tests/test-read-common.h b/tests/test-read-common.h new file mode 100644 index 00000000..00d4d1d1 --- /dev/null +++ b/tests/test-read-common.h @@ -0,0 +1,179 @@ +// -*- Mode: C++ -*- +// + +/// @file +/// +/// This file declares the common functionality for tests in +/// CTF and DWARF readers, it declares abstractions for `act` test +/// stage. + +#ifndef __TEST_READ_COMMON_H__ +#define __TEST_READ_COMMON_H__ + +#include +#include "abg-ir.h" +#include "abg-corpus.h" +#include "abg-workers.h" +#include "abg-writer.h" +#include "test-utils.h" +#include "abg-tools-utils.h" + +using std::string; + +using abigail::xml_writer::type_id_style_kind; +using abigail::ir::corpus_sptr; + +namespace abigail +{ +namespace tests +{ +namespace read_common +{ + +/// This is an aggregate that specifies where a test shall get its +/// input from, and where it shall write its output to. +struct InOutSpec +{ + const char* in_elf_path; + const char* in_suppr_spec_path; + const char* in_public_headers_path; + type_id_style_kind type_id_style; + const char* in_abi_path; + const char* out_abi_path; +};// end struct InOutSpec + +/// The task that performs the tests. +struct test_task : public abigail::workers::task +{ + bool is_ok; + InOutSpec spec; + string error_message; + string out_abi_base; + string in_elf_base; + string in_abi_base; + + string in_elf_path; + string in_abi_path; + string in_suppr_spec_path; + string in_public_headers_path; + string out_abi_path; + + + /// A setter for `in_elf_path` field. + /// The `in_elf_path` is the full path for input object + /// in the tests container @ref + /// abigail::tests::read_common::InOutSpec. + void + set_in_elf_path() + { + in_elf_path = in_elf_base + spec.in_elf_path; + } + + /// A setter for `in_suppr_spec_path` field. + /// The `in_suppr_spec_path` is the full path for suppression + /// entry in the tests container @ref + /// abigail::tests::read_common::InOutSpec. + void + set_in_suppr_spec_path() + { + if (spec.in_suppr_spec_path) + in_suppr_spec_path = in_elf_base + spec.in_suppr_spec_path; + else + in_suppr_spec_path.clear(); + } + + /// A setter for `in_public_headers_path` field. + /// The `in_public_headers_path` is the full path for headers + /// entry in the tests container @ref + /// abigail::tests::read_common::InOutSpec. + void + set_in_public_headers_path() + { + if (spec.in_public_headers_path) + in_public_headers_path = spec.in_public_headers_path; + if (!in_public_headers_path.empty()) + in_public_headers_path = in_elf_base + spec.in_public_headers_path; + } + + /// A setter for `out_abi_path` field. + /// The `out_abi_path` is the full path for output of abixml file. + /// @return true if `out_abi_path` is a valid directory. + bool + set_out_abi_path() + { + out_abi_path = out_abi_base + spec.out_abi_path; + if (!abigail::tools_utils::ensure_parent_dir_created(out_abi_path)) + { + error_message = + string("Could not create parent directory for ") + out_abi_path; + return false; + } + return true; + } + + /// A setter for `in_abi_path` field. + /// The `in_abi_path` is the full path for the expected abixml file. + void + set_in_abi_path() + { + in_abi_path = in_abi_base + spec.in_abi_path; + } + + test_task(const InOutSpec &s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base); + bool + serialize_corpus(const string& out_abi_path, + corpus_sptr corp); + bool + run_abidw(const string& extargs = ""); + + bool + run_diff(); + + virtual + ~test_task() + {} +}; // end struct test_task + +typedef shared_ptr test_task_sptr; + +/// An abstraction for valid test options. +struct options +{ + // saves a wrong option string passed to test-harness. + string wrong_option; + // parallel test execution. + bool parallel; + + options() + : parallel(true) + {} + + ~options() + { + } +}; // end struct options + +void +display_usage(const string& prog_name, ostream& out); + +bool +parse_command_line(int argc, char* argv[], options& opts); + +/// A convenience typedef for a callback to create_new_test +/// instances. +typedef test_task* (*create_new_test)(const InOutSpec* s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base); +bool +run_tests(const size_t num_test, const InOutSpec* specs, + const options& opts, create_new_test new_test); + +}//end namespace read_common +}//end namespace tests +}//end namespace abigail + +#endif //__TEST_READ_COMMON_H__ diff --git a/tests/test-read-ctf.cc b/tests/test-read-ctf.cc new file mode 100644 index 00000000..b448ddc5 --- /dev/null +++ b/tests/test-read-ctf.cc @@ -0,0 +1,353 @@ +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// -*- Mode: C++ -*- +// +// Copyright (C) 2021 Oracle, Inc. +// +// Author: Guillermo E. Martinez + +/// @file +/// +/// This file implement the CTF testsuite. It reads ELF binaries +/// containing CTF, save them in XML corpus files and diff the +/// corpus files against reference XML corpus files. + +#include +#include +#include +#include +#include +#include +#include "abg-ctf-reader.h" +#include "test-read-common.h" + +using std::string; +using std::cerr; + +using abigail::tests::read_common::InOutSpec; +using abigail::tests::read_common::test_task; +using abigail::tests::read_common::display_usage; +using abigail::tests::read_common::options; + +using abigail::ctf_reader::read_context_sptr; +using abigail::ctf_reader::create_read_context; +using abigail::xml_writer::SEQUENCE_TYPE_ID_STYLE; +using abigail::xml_writer::HASH_TYPE_ID_STYLE; +using abigail::tools_utils::emit_prefix; + +static InOutSpec in_out_specs[] = +{ + { + "data/test-read-ctf/test0", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test0.abi", + "output/test-read-ctf/test0.abi" + }, + { + "data/test-read-ctf/test0", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test0.hash.abi", + "output/test-read-ctf/test0.hash.abi" + }, + { + "data/test-read-ctf/test1.so", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test1.so.abi", + "output/test-read-ctf/test1.so.abi" + }, + { + "data/test-read-ctf/test1.so", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test1.so.hash.abi", + "output/test-read-ctf/test1.so.hash.abi" + }, + { + "data/test-read-ctf/test2.so", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test2.so.abi", + "output/test-read-ctf/test2.so.abi" + }, + { + "data/test-read-ctf/test2.so", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test2.so.hash.abi", + "output/test-read-ctf/test2.so.hash.abi" + }, + { + "data/test-read-common/test3.so", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test3.so.abi", + "output/test-read-ctf/test3.so.abi" + }, + { + "data/test-read-common/test3.so", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test3.so.hash.abi", + "output/test-read-ctf/test3.so.hash.abi" + }, + { + "data/test-read-ctf/test-enum-many.o", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test-enum-many.o.hash.abi", + "output/test-read-ctf/test-enum-many.o.hash.abi" + }, + { + "data/test-read-ctf/test-ambiguous-struct-A.o", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test-ambiguous-struct-A.o.hash.abi", + "output/test-read-ctf/test-ambiguous-struct-A.o.hash.abi" + }, + { + "data/test-read-ctf/test-ambiguous-struct-B.o", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test-ambiguous-struct-B.o.hash.abi", + "output/test-read-ctf/test-ambiguous-struct-B.o.hash.abi" + }, + { + "data/test-read-ctf/test-conflicting-type-syms-a.o", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test-conflicting-type-syms-a.o.hash.abi", + "output/test-read-ctf/test-conflicting-type-syms-a.o.hash.abi" + }, + { + "data/test-read-ctf/test-conflicting-type-syms-b.o", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi", + "output/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi" + }, + { + "data/test-read-common/test4.so", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test4.so.abi", + "output/test-read-ctf/test4.so.abi" + }, + { + "data/test-read-common/test4.so", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test4.so.hash.abi", + "output/test-read-ctf/test4.so.hash.abi" + }, + { + "data/test-read-ctf/test5.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test5.o.abi", + "output/test-read-ctf/test5.o.abi" + }, + { + "data/test-read-ctf/test7.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test7.o.abi", + "output/test-read-ctf/test7.o.abi" + }, + { + "data/test-read-ctf/test8.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test8.o.abi", + "output/test-read-ctf/test8.o.abi" + }, + { + "data/test-read-ctf/test9.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test9.o.abi", + "output/test-read-ctf/test9.o.abi" + }, + { + "data/test-read-ctf/test-enum.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test-enum.o.abi", + "output/test-read-ctf/test-enum.o.abi" + }, + { + "data/test-read-ctf/test-enum-symbol.o", + "", + "", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/test-enum-symbol.o.hash.abi", + "output/test-read-ctf/test-enum-symbol.o.hash.abi" + }, + { + "data/test-read-ctf/test-dynamic-array.o", + "", + "", + SEQUENCE_TYPE_ID_STYLE, + "data/test-read-ctf/test-dynamic-array.o.abi", + "output/test-read-ctf/test-dynamic-array.o.abi" + }, + { + "data/test-read-common/PR27700/test-PR27700.o", + "", + "data/test-read-common/PR27700/pub-incdir", + HASH_TYPE_ID_STYLE, + "data/test-read-ctf/PR27700/test-PR27700.abi", + "output/test-read-ctf/PR27700/test-PR27700.abi", + }, + // This should be the last entry. + {NULL, NULL, NULL, SEQUENCE_TYPE_ID_STYLE, NULL, NULL} +}; + +/// Task specialization to perform CTF tests. +struct test_task_ctf : public test_task +{ + test_task_ctf(const InOutSpec &s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base); + virtual void + perform(); + + virtual + ~test_task_ctf() + {} +}; // end struct test_task_ctf + +/// Constructor. +/// +/// Task to be executed for each CTF test entry in @ref +/// abigail::tests::read_common::InOutSpec. +/// @param InOutSpec the array containing set of tests. +/// +/// @param a_out_abi_base the output base directory for abixml files. +/// +/// @param a_in_elf_base the input base directory for object files. +/// +/// @param a_in_elf_base the input base directory for expected +/// abixml files. +test_task_ctf::test_task_ctf(const InOutSpec &s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base) + : test_task(s, a_out_abi_base, a_in_elf_base, a_in_abi_base) + {} + +/// The thread function to execute each CTF test entry in @ref +/// abigail::tests::read_common::InOutSpec. +/// +/// This reads the corpus into memory, saves it to disk, loads it +/// again and compares the new in-memory representation against the +void +test_task_ctf::perform() +{ + abigail::ir::environment_sptr env; + + set_in_elf_path(); + set_in_suppr_spec_path(); + + env.reset(new abigail::ir::environment); + abigail::elf_reader::status status = + abigail::elf_reader::STATUS_UNKNOWN; + ABG_ASSERT(abigail::tools_utils::file_exists(in_elf_path)); + + read_context_sptr ctxt = create_read_context(in_elf_path, + env.get()); + ABG_ASSERT(ctxt); + + corpus_sptr corp = read_corpus(ctxt.get(), status); + // if there is no output and no input, assume that we do not care about the + // actual read result, just that it succeeded. + if (!spec.in_abi_path && !spec.out_abi_path) + { + // Phew! we made it here and we did not crash! yay! + return; + } + if (!corp) + { + error_message = string("failed to read ") + in_elf_path + "\n"; + is_ok = false; + return; + } + corp->set_path(spec.in_elf_path); + // Do not take architecture names in comparison so that these + // test input binaries can come from whatever arch the + // programmer likes. + corp->set_architecture_name(""); + + if (!(is_ok = set_out_abi_path())) + return; + + if (!(is_ok = serialize_corpus(out_abi_path, corp))) + return; + + if (!(is_ok = run_abidw("--ctf "))) + return; + + if (!(is_ok = run_diff())) + return; +} + +/// Create a new CTF instance for task to be execute by the testsuite. +/// +/// @param s the @ref abigail::tests::read_common::InOutSpec +/// tests container. +/// +/// @param a_out_abi_base the output base directory for abixml files. +/// +/// @param a_in_elf_base the input base directory for object files. +/// +/// @param a_in_abi_base the input base directory for abixml files. +/// +/// @return abigail::tests::read_common::test_task instance. +static test_task* +new_task(const InOutSpec* s, string& a_out_abi_base, + string& a_in_elf_base, string& a_in_abi_base) +{ + return new test_task_ctf(*s, a_out_abi_base, + a_in_elf_base, a_in_abi_base); +} + +int +main(int argc, char *argv[]) +{ + options opts; + if (!parse_command_line(argc, argv, opts)) + { + if (!opts.wrong_option.empty()) + emit_prefix(argv[0], cerr) + << "unrecognized option: " << opts.wrong_option << "\n"; + display_usage(argv[0], cerr); + return 1; + } + + // compute number of tests to be executed. + const size_t num_tests = sizeof(in_out_specs) / sizeof(InOutSpec) - 1; + + return run_tests(num_tests, in_out_specs, opts, new_task); +} diff --git a/tests/test-read-dwarf.cc b/tests/test-read-dwarf.cc index 585aca5e..79fdc3d3 100644 --- a/tests/test-read-dwarf.cc +++ b/tests/test-read-dwarf.cc @@ -15,45 +15,27 @@ #include #include #include -#include "abg-ir.h" +#include "test-read-common.h" #include "abg-dwarf-reader.h" -#include "abg-workers.h" -#include "abg-writer.h" -#include "abg-tools-utils.h" -#include "test-utils.h" using std::vector; using std::string; -using std::ofstream; using std::cerr; -using std::dynamic_pointer_cast; -using abigail::tests::get_build_dir; + +using abigail::tests::read_common::InOutSpec; +using abigail::tests::read_common::test_task; +using abigail::tests::read_common::display_usage; +using abigail::tests::read_common::options; + using abigail::dwarf_reader::read_corpus_from_elf; using abigail::dwarf_reader::read_context; using abigail::dwarf_reader::read_context_sptr; using abigail::dwarf_reader::create_read_context; using abigail::xml_writer::SEQUENCE_TYPE_ID_STYLE; using abigail::xml_writer::HASH_TYPE_ID_STYLE; -using abigail::xml_writer::create_write_context; -using abigail::xml_writer::set_type_id_style; -using abigail::xml_writer::type_id_style_kind; -using abigail::xml_writer::write_context_sptr; -using abigail::xml_writer::write_corpus; - -/// This is an aggregate that specifies where a test shall get its -/// input from, and where it shall write its ouput to. -struct InOutSpec -{ - const char* in_elf_path; - const char* in_suppr_spec_path; - const char* in_public_headers_path; - type_id_style_kind type_id_style; - const char* in_abi_path; - const char* out_abi_path; -};// end struct InOutSpec - +using abigail::tools_utils::emit_prefix; -InOutSpec in_out_specs[] = +static InOutSpec in_out_specs[] = { { "data/test-read-dwarf/test0", @@ -104,7 +86,7 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/test2.so.hash.abi" }, { - "data/test-read-dwarf/test3.so", + "data/test-read-common/test3.so", "", "", SEQUENCE_TYPE_ID_STYLE, @@ -112,7 +94,7 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/test3.so.abi" }, { - "data/test-read-dwarf/test3.so", + "data/test-read-common/test3.so", "", "", HASH_TYPE_ID_STYLE, @@ -121,8 +103,8 @@ InOutSpec in_out_specs[] = }, // suppress all except the main symbol of a group of aliases { - "data/test-read-dwarf/test3.so", - "data/test-read-dwarf/test3-alias-1.suppr", + "data/test-read-common/test3.so", + "data/test-read-common/test3-alias-1.suppr", "", HASH_TYPE_ID_STYLE, "data/test-read-dwarf/test3-alias-1.so.hash.abi", @@ -130,8 +112,8 @@ InOutSpec in_out_specs[] = }, // suppress the main symbol of a group of aliases { - "data/test-read-dwarf/test3.so", - "data/test-read-dwarf/test3-alias-2.suppr", + "data/test-read-common/test3.so", + "data/test-read-common/test3-alias-2.suppr", "", HASH_TYPE_ID_STYLE, "data/test-read-dwarf/test3-alias-2.so.hash.abi", @@ -139,8 +121,8 @@ InOutSpec in_out_specs[] = }, // suppress all except one non main symbol of a group of aliases { - "data/test-read-dwarf/test3.so", - "data/test-read-dwarf/test3-alias-3.suppr", + "data/test-read-common/test3.so", + "data/test-read-common/test3-alias-3.suppr", "", HASH_TYPE_ID_STYLE, "data/test-read-dwarf/test3-alias-3.so.hash.abi", @@ -148,8 +130,8 @@ InOutSpec in_out_specs[] = }, // suppress all symbols of a group of aliases { - "data/test-read-dwarf/test3.so", - "data/test-read-dwarf/test3-alias-4.suppr", + "data/test-read-common/test3.so", + "data/test-read-common/test3-alias-4.suppr", "", HASH_TYPE_ID_STYLE, "data/test-read-dwarf/test3-alias-4.so.hash.abi", @@ -165,7 +147,7 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/test-suppressed-alias.o.abi", }, { - "data/test-read-dwarf/test4.so", + "data/test-read-common/test4.so", "", "", SEQUENCE_TYPE_ID_STYLE, @@ -173,7 +155,7 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/test4.so.abi" }, { - "data/test-read-dwarf/test4.so", + "data/test-read-common/test4.so", "", "", HASH_TYPE_ID_STYLE, @@ -449,7 +431,7 @@ InOutSpec in_out_specs[] = NULL, }, { - "data/test-read-dwarf/PR26261/PR26261-exe", + "data/test-read-common/PR26261/PR26261-exe", "", "", SEQUENCE_TYPE_ID_STYLE, @@ -457,7 +439,7 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/PR26261/PR26261-exe.abi", }, { - "data/test-read-dwarf/test-PR26568-1.o", + "data/test-read-common/test-PR26568-1.o", "", "", SEQUENCE_TYPE_ID_STYLE, @@ -465,7 +447,7 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/test-PR26568-1.o.abi", }, { - "data/test-read-dwarf/test-PR26568-2.o", + "data/test-read-common/test-PR26568-2.o", "", "", SEQUENCE_TYPE_ID_STYLE, @@ -481,9 +463,9 @@ InOutSpec in_out_specs[] = "output/test-read-dwarf/test-libandroid.so.abi", }, { - "data/test-read-dwarf/PR27700/test-PR27700.o", + "data/test-read-common/PR27700/test-PR27700.o", "", - "data/test-read-dwarf/PR27700/pub-incdir", + "data/test-read-common/PR27700/pub-incdir", HASH_TYPE_ID_STYLE, "data/test-read-dwarf/PR27700/test-PR27700.abi", "output/test-read-dwarf/PR27700/test-PR27700.abi", @@ -552,198 +534,138 @@ set_suppressions_from_headers(read_context& read_ctxt, const string& path) } } -/// The task that peforms the tests. -struct test_task : public abigail::workers::task +/// Task specialization to perform DWARF tests. +struct test_task_dwarf : public test_task { - bool is_ok; - InOutSpec spec; - string error_message; - string out_abi_base; - string in_elf_base; - string in_abi_base; + test_task_dwarf(const InOutSpec &s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base); + virtual void + perform(); - test_task(const InOutSpec &s, - string& a_out_abi_base, - string& a_in_elf_base, - string& a_in_abi_base) - : is_ok(true), - spec(s), - out_abi_base(a_out_abi_base), - in_elf_base(a_in_elf_base), - in_abi_base(a_in_abi_base) + virtual + ~test_task_dwarf() {} +}; // end struct test_task_dwarf - /// The actual test. - /// - /// This reads the corpus into memory, saves it to disk, loads it - /// again and compares the new in-memory representation against the - /// saved one. - virtual void - perform() - { - string in_elf_path, in_abi_path, in_suppr_spec_path, in_public_headers_path, - out_abi_path; - abigail::ir::environment_sptr env; +/// Constructor. +/// +/// Task to be executed for each DWARF test entry in @ref +/// abigail::tests::read_common::InOutSpec. +/// +/// @param InOutSpec the array containing set of tests. +/// +/// @param a_out_abi_base the output base directory for abixml files. +/// +/// @param a_in_elf_base the input base directory for object files. +/// +/// @param a_in_elf_base the input base directory for expected +/// abixml files. +test_task_dwarf::test_task_dwarf(const InOutSpec &s, + string& a_out_abi_base, + string& a_in_elf_base, + string& a_in_abi_base) + : test_task(s, a_out_abi_base, a_in_elf_base, a_in_abi_base) + {} - in_elf_path = in_elf_base + spec.in_elf_path; - if (spec.in_suppr_spec_path) - in_suppr_spec_path = in_elf_base + spec.in_suppr_spec_path; - else - in_suppr_spec_path.clear(); +/// The thread function to execute each DWARF test entry in @ref +/// abigail::tests::read_common::InOutSpec. +/// +/// This reads the corpus into memory, saves it to disk, loads it +/// again and compares the new in-memory representation against the +void +test_task_dwarf::perform() +{ + abigail::ir::environment_sptr env; - if (spec.in_public_headers_path) - in_public_headers_path = spec.in_public_headers_path; - if (!in_public_headers_path.empty()) - in_public_headers_path = in_elf_base + spec.in_public_headers_path; + set_in_elf_path(); + set_in_suppr_spec_path(); + set_in_public_headers_path(); - env.reset(new abigail::ir::environment); - abigail::elf_reader::status status = + env.reset(new abigail::ir::environment); + abigail::elf_reader::status status = abigail::elf_reader::STATUS_UNKNOWN; - vector di_roots; - ABG_ASSERT(abigail::tools_utils::file_exists(in_elf_path)); - read_context_sptr ctxt = create_read_context(in_elf_path, - di_roots, - env.get()); - ABG_ASSERT(ctxt); - if (!in_suppr_spec_path.empty()) - set_suppressions(*ctxt, in_suppr_spec_path); - - if (!in_public_headers_path.empty()) - set_suppressions_from_headers(*ctxt, in_public_headers_path); - - abigail::corpus_sptr corp = read_corpus_from_elf(*ctxt, status); - // if there is no output and no input, assume that we do not care about the - // actual read result, just that it succeeded. - if (!spec.in_abi_path && !spec.out_abi_path) - { - // Phew! we made it here and we did not crash! yay! - return; - } - if (!corp) - { - error_message = string("failed to read ") + in_elf_path + "\n"; - is_ok = false; - return; - } - corp->set_path(spec.in_elf_path); - // Do not take architecture names in comparison so that these - // test input binaries can come from whatever arch the - // programmer likes. - corp->set_architecture_name(""); + vector di_roots; + ABG_ASSERT(abigail::tools_utils::file_exists(in_elf_path)); + read_context_sptr ctxt = create_read_context(in_elf_path, + di_roots, + env.get()); + ABG_ASSERT(ctxt); + if (!in_suppr_spec_path.empty()) + set_suppressions(*ctxt, in_suppr_spec_path); + + if (!in_public_headers_path.empty()) + set_suppressions_from_headers(*ctxt, in_public_headers_path); + + abigail::corpus_sptr corp = read_corpus_from_elf(*ctxt, status); + // if there is no output and no input, assume that we do not care about the + // actual read result, just that it succeeded. + if (!spec.in_abi_path && !spec.out_abi_path) + { + // Phew! we made it here and we did not crash! yay! + return; + } + if (!corp) + { + error_message = string("failed to read ") + in_elf_path + "\n"; + is_ok = false; + return; + } + corp->set_path(spec.in_elf_path); + // Do not take architecture names in comparison so that these + // test input binaries can come from whatever arch the + // programmer likes. + corp->set_architecture_name(""); - out_abi_path = out_abi_base + spec.out_abi_path; - if (!abigail::tools_utils::ensure_parent_dir_created(out_abi_path)) - { - error_message = - string("Could not create parent directory for ") + out_abi_path; - is_ok = false; - return; - } + if (!(is_ok = set_out_abi_path())) + return; - ofstream of(out_abi_path.c_str(), std::ios_base::trunc); - if (!of.is_open()) - { - error_message = string("failed to read ") + out_abi_path + "\n"; - is_ok = false; - return; - } - write_context_sptr write_ctxt - = create_write_context(corp->get_environment(), of); - set_type_id_style(*write_ctxt, spec.type_id_style); - is_ok = write_corpus(*write_ctxt, corp, /*indent=*/0); - of.close(); + if (!(is_ok = serialize_corpus(out_abi_path, corp))) + return; - string abidw = string(get_build_dir()) + "/tools/abidw"; - string drop_private_types; - if (!in_public_headers_path.empty()) - drop_private_types += "--headers-dir " + in_public_headers_path + - " --drop-private-types"; - string cmd = abidw + " " + drop_private_types + " --abidiff " + in_elf_path; - if (system(cmd.c_str())) - { - error_message = string("ABIs differ:\n") - + in_elf_path - + "\nand:\n" - + out_abi_path - + "\n"; - is_ok = false; - } + if (!(is_ok = run_abidw())) + return; - in_abi_path = in_abi_base + spec.in_abi_path; - cmd = "diff -u " + in_abi_path + " " + out_abi_path; - if (system(cmd.c_str())) - is_ok = false; - } -}; // end struct test_task + if (!(is_ok = run_diff())) + return; +} -typedef shared_ptr test_task_sptr; +/// Create a new DWARF instance for task to be execute by the testsuite. +/// +/// @param s the @ref abigail::tests::read_common::InOutSpec +/// tests container. +/// +/// @param a_out_abi_base the output base directory for abixml files. +/// +/// @param a_in_elf_base the input base directory for object files. +/// +/// @param a_in_abi_base the input base directory for abixml files. +/// +/// @return abigail::tests::read_common::test_task instance. +static test_task* +new_task(const InOutSpec* s, string& a_out_abi_base, + string& a_in_elf_base, string& a_in_abi_base) +{ + return new test_task_dwarf(*s, a_out_abi_base, + a_in_elf_base, a_in_abi_base); +} int main(int argc, char *argv[]) { - bool no_parallel = false; - - if (argc == 2) + options opts; + if (!parse_command_line(argc, argv, opts)) { - if (argv[1] == string("--no-parallel")) - no_parallel = true; - else - { - cerr << "unrecognized option\n"; - cerr << "usage: " << argv[0] << " [--no-parallel]\n" ; - return 1; - } + if (!opts.wrong_option.empty()) + emit_prefix(argv[0], cerr) + << "unrecognized option: " << opts.wrong_option << "\n"; + display_usage(argv[0], cerr); + return 1; } - /// Create a task queue. The max number of worker threads of the - /// queue is the number of the concurrent threads supported by the - /// processor of the machine this code runs on. But if - /// --no-parallel was provided then the number of worker threads - /// equals 1. - const size_t num_tests = sizeof(in_out_specs) / sizeof (InOutSpec) - 1; - size_t num_workers = (no_parallel - ? 1 - : std::min(abigail::workers::get_number_of_threads(), - num_tests)); - abigail::workers::queue task_queue(num_workers); - bool is_ok = true; - - string out_abi_base = string(get_build_dir()) + "/tests/"; - string in_elf_base = string(abigail::tests::get_src_dir()) + "/tests/"; - string in_abi_base = in_elf_base; - - for (InOutSpec *s = in_out_specs; s->in_elf_path; ++s) - { - test_task_sptr t(new test_task(*s, out_abi_base, - in_elf_base, - in_abi_base)); - ABG_ASSERT(task_queue.schedule_task(t)); - } - - /// Wait for all worker threads to finish their job, and wind down. - task_queue.wait_for_workers_to_complete(); - - // Now walk the results and print whatever error messages need to be - // printed. - - const vector& completed_tasks = - task_queue.get_completed_tasks(); - - ABG_ASSERT(completed_tasks.size() == num_tests); - - for (vector::const_iterator ti = - completed_tasks.begin(); - ti != completed_tasks.end(); - ++ti) - { - test_task_sptr t = dynamic_pointer_cast(*ti); - if (!t->is_ok) - { - is_ok = false; - if (!t->error_message.empty()) - cerr << t->error_message << '\n'; - } - } + // compute number of tests to be executed. + const size_t num_tests = sizeof(in_out_specs) / sizeof(InOutSpec) - 1; - return !is_ok; + return run_tests(num_tests, in_out_specs, opts, new_task); }