From patchwork Wed Jan 13 13:38:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Szabolcs Nagy X-Patchwork-Id: 41706 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 C2227388A40D; Wed, 13 Jan 2021 13:39:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C2227388A40D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1610545148; bh=BxGkHWE/+gzGz4gvIviu4e5gaj7ZXomzvjh4jr3PLzU=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=ojjrTznuZaodOQZggU3trSjZKJAAUZ3Wj62sLgFIMZx4W6yHECxDTgxzxYvVQqm6E KAAV2692rhJQ5WfYJVBQqpdNq5H9xWFgukdlULW1kzivQ2x8CPARikG9jsicAqoJfQ gDWmDsgkcLS2aFS8fs0DUeaDIPlm3d/hRs3O9pyg= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80077.outbound.protection.outlook.com [40.107.8.77]) by sourceware.org (Postfix) with ESMTPS id 2D3C7386F839 for ; Wed, 13 Jan 2021 13:38:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 2D3C7386F839 Received: from DU2PR04CA0024.eurprd04.prod.outlook.com (2603:10a6:10:3b::29) by AM5PR0802MB2532.eurprd08.prod.outlook.com (2603:10a6:203:a1::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6; Wed, 13 Jan 2021 13:38:55 +0000 Received: from DB5EUR03FT003.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:3b:cafe::b1) by DU2PR04CA0024.outlook.office365.com (2603:10a6:10:3b::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6 via Frontend Transport; Wed, 13 Jan 2021 13:38:55 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; sourceware.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;sourceware.org; dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5EUR03FT003.mail.protection.outlook.com (10.152.20.157) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6 via Frontend Transport; Wed, 13 Jan 2021 13:38:54 +0000 Received: ("Tessian outbound e989e14f9207:v71"); Wed, 13 Jan 2021 13:38:54 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 48a056b59f88faab X-CR-MTA-TID: 64aa7808 Received: from ff65ca3d037a.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 30F6EC86-3CFA-4862-BFBD-7ABE5493AA70.1; Wed, 13 Jan 2021 13:38:48 +0000 Received: from FRA01-MR2-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ff65ca3d037a.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 13 Jan 2021 13:38:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UZt9DEUNS1K1xSOOJA0VZ2MFf4F26pJLwHSdDISf66PLDaaVEZSkJKZ6A8sb7ljzNHVBdnLYwQfA6SZ827++gZqLh+SBQVrZGdmc+pagmQnjnWE0jf22oYJP164lcXEfWHbJ/K126Md3gDDiTOs9ZU9PI1VD1Q9F4v7DE7YckWHafZOYng6offxaEeOnZdfuF6IWGjTBpzz3Tu9RYrlq2US8mgksSSDgsUQPu8aFWTGQfGrB0s6HQkKQ8Ezg91mO1CCiO1SkG2GNMxODZJEdClsgxYxlAtowHO39IJKLoTqZZIVxwKvu7nZRplsYrF/11siaaOpxf+r35w1Cl4gkVQ== 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-SenderADCheck; bh=BxGkHWE/+gzGz4gvIviu4e5gaj7ZXomzvjh4jr3PLzU=; b=fgeRA7KcIKkrX6kW5aNgPR7YmchCwN+ePseDNcZi1NPmn6Sy0raA1cT2p7oq1Ivnm0wFgwwjgsOsKN46Y4oKi7ZnfKeVHU7UCAqysUuDw3TAJGNsVJTD4nVjJ4K5AQ28opHpITgm0j3ksuBOgKhl/aafzlkIOh2wCnR8lHL/ZFMMLjcXcU7/LWlvj28s18VmE4Up7mYwiXbeRspeyiaPALyMBi7Mlk5CFmfauWxXDT048PCkye1t1PRKDVh2Sz6OYO4HIo6Qoqf6a/z+utBZHwjkbs+M5ybCcrHpZcQ4vpnLONxwT/NqkomiNGNe53S0EPwukx8v6ZONhma47VZGDA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none Authentication-Results-Original: sourceware.org; dkim=none (message not signed) header.d=none;sourceware.org; dmarc=none action=none header.from=arm.com; Received: from PA4PR08MB6320.eurprd08.prod.outlook.com (2603:10a6:102:e5::9) by PR2PR08MB4634.eurprd08.prod.outlook.com (2603:10a6:101:1f::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6; Wed, 13 Jan 2021 13:38:45 +0000 Received: from PA4PR08MB6320.eurprd08.prod.outlook.com ([fe80::700f:ddbe:a347:ee4f]) by PA4PR08MB6320.eurprd08.prod.outlook.com ([fe80::700f:ddbe:a347:ee4f%6]) with mapi id 15.20.3742.012; Wed, 13 Jan 2021 13:38:45 +0000 To: libc-alpha@sourceware.org Subject: [COMMITTED] elf: work around a gcc bug in elf_get_dynamic_info Date: Wed, 13 Jan 2021 13:38:38 +0000 Message-Id: <20210113133838.9334-1-szabolcs.nagy@arm.com> X-Mailer: git-send-email 2.17.1 X-Originating-IP: [217.140.106.49] X-ClientProxiedBy: LO4P123CA0029.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:151::16) To PA4PR08MB6320.eurprd08.prod.outlook.com (2603:10a6:102:e5::9) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (217.140.106.49) by LO4P123CA0029.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:151::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3763.9 via Frontend Transport; Wed, 13 Jan 2021 13:38:44 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: f17f53b3-1789-4d60-1a5e-08d8b7c8924d X-MS-TrafficTypeDiagnostic: PR2PR08MB4634:|AM5PR0802MB2532: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:1303;OLM:1303; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: HQYH+9mE3bhWMhSKvMF8xOMuX2bd7O4fL/p+C2GU2OmAmjNkr6TTJ1eVyrCHc3nR1Y+Ru9EiSpIB0tSfGv2Cq1C3efbWP2LX3GJb2XmBXndCOOlBFNdypaliRz94QlP9wa+Iklrz0xsqobRpQ/QTgJyDibMt2xb3N7Wo78BfBcpUWkrk7h7rT0/LUe/C0oHkGP1wMHrbXftQt7dJsPTNolH4y60wvL/poRszzXXS5k1zPJ8R1peZ5sGsNlehDJwxvUZN8IuV3Q0b8jK+ZTxzqS4+uefuhkLiJrgcREuRbmxOqoklD51fLRBxt5tKW2wBxuFJ4DF1pbVkDkuPHX3sofN3R5LNRAxdpuVUOfLAU9cVDYNEnmazl2FeRi4IhbR17/XzwL00EltpZwXyFT1Sx2hWkT2aSQrEJN1aj908jxk+z3QtxurZtXwO/G27UWBYumlzqVm7WYc9nfxmzTzz1z7zueMeohAcuv46aMWUWVk4whLM6dkzWxXvIHmShtXdOxCDCpnxjikP/Ch636XRhOEDnKWgDh2sF5nLHHlritZHQzWGUW17di4OGBuTejCR X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PA4PR08MB6320.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(39860400002)(136003)(376002)(346002)(366004)(396003)(6916009)(478600001)(2616005)(966005)(8936002)(6512007)(186003)(956004)(5660300002)(66946007)(86362001)(6486002)(26005)(316002)(44832011)(6506007)(66556008)(52116002)(1076003)(36756003)(2906002)(8676002)(6666004)(69590400011)(83380400001)(66476007)(16526019)(461764006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: OcFadXtNj7bsl15W5iISTUsYdMR81QczXbHhHvrNhMI9B6SH/YISI3rRjGGrdVfPi0mh3Nj/iAMoAowfxX7ZQEgD7OACvTnA525FwZpzz7viRF4kBvJINbKQBQjIU0jmqlR/UqUaHG0i3NfjRyU1vj0iwKPIsigjSPE7mFfvnEqr6u/Ye8958drAUTXHfY3MhvLb4wZzi/PSclMaDrf4yvE9Zi5UsrnValjduzh0nXNWUzrsFD/2WXBYMq/Bg1GPHdF/pMJBuOJOaEfSioCSuRFExtvNcJcscEdsGssM444EFwFXuqY/FKpBN54bAqYWBhMOaNRiuXdTMW4JSV7swHMNe/pU3GQDc/27e2yd3BYwYJVeWjPX1+eCTb4t9ghr5gb7omnbySOPQ6mCB+2MBH2lzQmBfHbT3wvyevcj7pL1MSllAjIbYpedA0NTcr8XbXCITgvFxxoUEmfCrnkbWX14BQ4gunKxmdSGh36oTYNb6ay69ATl/2FoIkwKm7NMUwLrHfwXI8VUAUwywNleNvoEKoaKIH65FwrdFG0uv5v+pAsQWD2K9FiaB1+00o1YnVF0xQ3e6GNO7EAIm2fgrYi8xnSSSTYuVwcsxfIcGxnQCXEjMzFyQAaIHZQCdRasbVCBXS8ko1MBJgBiYAnhrMnoE2iqf/kkI4ze/F45d2JSrnXuchRV2QmpYzDeGcpXbZ3kEzt4O7+cVJES12a6flnusB9kZUAycgHO70qD6Saecb1CjuOZfysr01mmDBKbM3EaYV95yaqpJQDlbxAmYz6EQ6//lB4/69osaUawjvYL0xYw6lBlmyVAHZ9r4gM3mkLkCY3cz8RNTo9DRsc4QE9uI6RSAPgnZT7nDd4O/r5FsPahScENHPtlVr+GoI5nlhhGNE2G9YuPs7n57uq+rIi+R7Xu4yg7mwivX0Jv0uqqjoyNqNzdxwsn+0IjV/HNasjTAxo24uexpyGVUA+MLy2ckGzBeBfzYJRNDqQeY5mEJnnoj38+hmUhsMPYg8P1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR2PR08MB4634 Original-Authentication-Results: sourceware.org; dkim=none (message not signed) header.d=none; sourceware.org; dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT003.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 512d547c-eaf0-4217-8eb0-08d8b7c88c6a X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VO5qkBWDef9vGc/NzzJ5welZPuScmiY3d/IRtr3Mn4knxvdnwCU1qexxf9YTt94q+NE0mbiQb+95ttOqIH3sABl5GMbbnE/KEjc1723/mPyA/RpUBL6wZ2Td04M0pUfBq0S1u89M3s4p/EAifQ8zenTCpvkjqHamFn1dJYGe8UptTwgOmZ0OREoFfZ4rm05d1faFs50UEO+awnqZGl2guu3jRP1+Z+FUmL5NyiJUXzL30YX6x3kF004mI0tqBTa94Fhydt+FCEYTDV+LTY329xNtizjimQWNMiAJV/J8N7eDzq3KfzR4QiA15mL2OuIf7Ok9S+7xnnULBEn6AaMWu9QqGFJnSZZYogRFePteYzBhkKwBNfJevtTTyTA6HogIJbYYrraJwN/BQNJ5z4uSS7lwjj+gzYhHDkhCDn4Dm9A4gpDMb9lD0lZ6e55DsAuTFAg1HkB8kknO3aY0Y1JTBve4w6V2wbJAgSIJB3+UhRMsvuSPChdNvqXmfsnxnLictLRkeyfNbLbJ6gJREQL8/SlliffXLb+0qUSJaaj1xa9UJEVWBFrcIqRcvpbjJ/dLiyqlLUbA+xOPCB/+GIVsrMsS+BAPpHYWCsbGZsaY0y7T/X3kJYAiUKyKJA+IPBmq X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(4636009)(39860400002)(136003)(346002)(376002)(396003)(46966006)(6916009)(8936002)(47076005)(82310400003)(26005)(6486002)(186003)(70586007)(6666004)(6506007)(1076003)(82740400003)(956004)(70206006)(69590400011)(81166007)(8676002)(336012)(966005)(316002)(5660300002)(2906002)(2616005)(6512007)(16526019)(83380400001)(86362001)(478600001)(356005)(44832011)(34020700004)(36756003)(461764006); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jan 2021 13:38:54.8733 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f17f53b3-1789-4d60-1a5e-08d8b7c8924d X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DB5EUR03FT003.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0802MB2532 X-Spam-Status: No, score=-13.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_SHORT, MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Szabolcs Nagy via Libc-alpha From: Szabolcs Nagy Reply-To: Szabolcs Nagy Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" Since commit 2f056e8a5dd4dc0f075413f931e82cede37d1057 "aarch64: define PI_STATIC_AND_HIDDEN", building glibc with gcc-8 on aarch64 fails with /BLD/elf/librtld.os: in function `elf_get_dynamic_info': /SRC/elf/get-dynamic-info.h:70:(.text+0xad8): relocation truncated to fit: R_AARCH64_ADR_PREL_PG_HI21 against symbol `_rtld_local' defined in .data section in /BLD/elf/librtld.os This is a gcc bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98618 The bug is fixed on gcc-10 and not yet backported. gcc-9 is affected, but the issue happens to not trigger in glibc, gcc-8 and older seems to miscompile rtld.os. Rewriting the affected code in elf_get_dynamic_info seems to make the issue go away on <= gcc-9. The change makes the logic a bit clearer too (by separating the index computation and array update) and drops an older gcc workaround (since gcc 4.6 is no longer supported). Reviewed-by: Adhemerval Zanella --- elf/get-dynamic-info.h | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/elf/get-dynamic-info.h b/elf/get-dynamic-info.h index 4f9aac63de..d8ec32377d 100644 --- a/elf/get-dynamic-info.h +++ b/elf/get-dynamic-info.h @@ -30,8 +30,6 @@ auto inline void __attribute__ ((unused, always_inline)) elf_get_dynamic_info (struct link_map *l, ElfW(Dyn) *temp) { - ElfW(Dyn) *dyn = l->l_ld; - ElfW(Dyn) **info; #if __ELF_NATIVE_CLASS == 32 typedef Elf32_Word d_tag_utype; #elif __ELF_NATIVE_CLASS == 64 @@ -39,39 +37,36 @@ elf_get_dynamic_info (struct link_map *l, ElfW(Dyn) *temp) #endif #if !defined RTLD_BOOTSTRAP && !defined STATIC_PIE_BOOTSTRAP - if (dyn == NULL) + if (l->l_ld == NULL) return; #endif - info = l->l_info; + ElfW(Dyn) **info = l->l_info; - while (dyn->d_tag != DT_NULL) + for (ElfW(Dyn) *dyn = l->l_ld; dyn->d_tag != DT_NULL; dyn++) { + d_tag_utype i; + if ((d_tag_utype) dyn->d_tag < DT_NUM) - info[dyn->d_tag] = dyn; + i = dyn->d_tag; else if (dyn->d_tag >= DT_LOPROC && dyn->d_tag < DT_LOPROC + DT_THISPROCNUM) - { - /* This does not violate the array bounds of l->l_info, but - gcc 4.6 on sparc somehow does not see this. */ - DIAG_PUSH_NEEDS_COMMENT; - DIAG_IGNORE_NEEDS_COMMENT (4.6, - "-Warray-bounds"); - info[dyn->d_tag - DT_LOPROC + DT_NUM] = dyn; - DIAG_POP_NEEDS_COMMENT; - } + i = dyn->d_tag - DT_LOPROC + DT_NUM; else if ((d_tag_utype) DT_VERSIONTAGIDX (dyn->d_tag) < DT_VERSIONTAGNUM) - info[VERSYMIDX (dyn->d_tag)] = dyn; + i = VERSYMIDX (dyn->d_tag); else if ((d_tag_utype) DT_EXTRATAGIDX (dyn->d_tag) < DT_EXTRANUM) - info[DT_EXTRATAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM - + DT_VERSIONTAGNUM] = dyn; + i = DT_EXTRATAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM + + DT_VERSIONTAGNUM; else if ((d_tag_utype) DT_VALTAGIDX (dyn->d_tag) < DT_VALNUM) - info[DT_VALTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM - + DT_VERSIONTAGNUM + DT_EXTRANUM] = dyn; + i = DT_VALTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM + + DT_VERSIONTAGNUM + DT_EXTRANUM; else if ((d_tag_utype) DT_ADDRTAGIDX (dyn->d_tag) < DT_ADDRNUM) - info[DT_ADDRTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM - + DT_VERSIONTAGNUM + DT_EXTRANUM + DT_VALNUM] = dyn; - ++dyn; + i = DT_ADDRTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM + + DT_VERSIONTAGNUM + DT_EXTRANUM + DT_VALNUM; + else + continue; + + info[i] = dyn; } #define DL_RO_DYN_TEMP_CNT 8