From patchwork Mon Jan 11 15:11:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Szabolcs Nagy X-Patchwork-Id: 41692 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 84EBF3861802; Mon, 11 Jan 2021 15:12:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 84EBF3861802 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1610377933; bh=8VBaw9HfD3NJB0QTkGDN3RgdJqvE43E46x+nA6C2NAA=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=p2o4EmDZ0ZX9E/VGG+KfbcivfmGY88EqHswsrJaZWkMz9v89/zlyUvpNaSZs6LcRk yoiXqrpRd/tZxrnteJ2p9fIWTC7cNkp9H8TkJTipio8hWjRVz6ZD2fF/h3zSTXWzwi XamncqqsgKpDLDTAGbD/wDbbkWfeOC++hmWOZ5GA= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10080.outbound.protection.outlook.com [40.107.1.80]) by sourceware.org (Postfix) with ESMTPS id B7885385703C for ; Mon, 11 Jan 2021 15:12:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org B7885385703C Received: from AM6P191CA0003.EURP191.PROD.OUTLOOK.COM (2603:10a6:209:8b::16) by DB9PR08MB6347.eurprd08.prod.outlook.com (2603:10a6:10:253::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6; Mon, 11 Jan 2021 15:12:07 +0000 Received: from AM5EUR03FT035.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:8b:cafe::91) by AM6P191CA0003.outlook.office365.com (2603:10a6:209:8b::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6 via Frontend Transport; Mon, 11 Jan 2021 15:12:07 +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 AM5EUR03FT035.mail.protection.outlook.com (10.152.16.119) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6 via Frontend Transport; Mon, 11 Jan 2021 15:12:07 +0000 Received: ("Tessian outbound 8418c949a3fa:v71"); Mon, 11 Jan 2021 15:12:06 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 9892bf883bd478c1 X-CR-MTA-TID: 64aa7808 Received: from 8d97548575f6.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 5CE5E1F2-69D8-4B3B-B7BF-8CA0BEAC1424.1; Mon, 11 Jan 2021 15:12:00 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 8d97548575f6.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 11 Jan 2021 15:12:00 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XGo0X6FnNVs2Z/eCRFxH/K+Nce8cbS3B7dSBkDK+wMlLXfmgtiqhAytIyh1imUTktzEt3dTG38j0y2b6imHO7bl8EK+WRZFo1NSjRMPiwwa90IJMTtFZ5mxyuV/16ZsBfGUsnx+g1w0JCMDlq4kNUwWQw6X8gbdJd4bY1K1mWyTWjYTyuwC5RgXRcDw3UZkEedhMnwlUrXwNqP6RHgSf/QNi5Fy/52AE9NsaWscPcHm+d3ggCQ3zYoRXY22HL1ZMRhrtiteos0Vlyn0MXiDbXT/WNtJHcn2DLPXZpvpHesXf/qpN7jN/Dx/NsDOgyPku0p6ylgbFyhqjTzFLTYQJLg== 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=8VBaw9HfD3NJB0QTkGDN3RgdJqvE43E46x+nA6C2NAA=; b=KiPCyndHVBlNfGPcWgXo8AX7AHtLWrjOmJr04lVX2+Ffb/rZ73bEk/atocpzQzLCbDZLIQq2ZAz/ONlRP3s4EWqFB9UGkzR8d09qK330vBEHAkAQKv5+PEuwJxz4RGsTE2J0KBTHOWDqaj35ThdaV/qHVeBgFXq5cSRNbH0dWyPucMLT+K4ngFWaVXefToUicOqqJX+x9TYSOSKEhC09eabHg0BvXQLmSqCTHUe4/T2NuXaLy+YPBncyhqk8y7GDlxQjiyeDSRWz0bUtvXIPiN5ZM/GOovCzDzIBCPIzBXRK8JjBPm9Y6wL60LLrzjuwxzguuyVSOgUAxtfwE0fKVA== 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 PA4PR08MB6157.eurprd08.prod.outlook.com (2603:10a6:102:e3::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6; Mon, 11 Jan 2021 15:11:59 +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; Mon, 11 Jan 2021 15:11:59 +0000 To: libc-alpha@sourceware.org Subject: [PATCH] elf: work around a gcc bug in elf_get_dynamic_info Date: Mon, 11 Jan 2021 15:11:46 +0000 Message-Id: <20210111151146.27850-1-szabolcs.nagy@arm.com> X-Mailer: git-send-email 2.17.1 X-Originating-IP: [217.140.106.52] X-ClientProxiedBy: LNXP265CA0004.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:5e::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.52) by LNXP265CA0004.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:5e::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6 via Frontend Transport; Mon, 11 Jan 2021 15:11:58 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: d0fe8472-0a76-48f7-b224-08d8b64342cc X-MS-TrafficTypeDiagnostic: PA4PR08MB6157:|DB9PR08MB6347: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:1824;OLM:1824; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: UcABwbbp8f8UdDVPlx0E95arrYJDNvG1yQOv9GCOfR+/8E4TdDLG39LijT0Ci7ppERD02N44CQD+/QZOLa0shWk483pUY+krrEvSQnH09Gdz9HmSxspq/V4HuGcLDx1emvrENEEA4r7/1X14lxIM5nigicWnnhkC7kyU/ZRU3/z3vfyvEL/sUYl6qHKkpehGrK1PVPeNv0bOt+vpQQXz5HAndMez2Int8tgQ0rBhkqUHTs9pmvSHzwuuJBZIfkuyWWvAF7K+yPw+PR0oDPalYKg4EmtZYNChCfu5SaQcFhQa3TT7Je7z963QlFaOSt128Z/6sSn1qCsks9dLTRmPkcyAgYPOOyFg89uThdp/uxqAAh2lDMHI0GLY8l8HLDMN3K7daeO9XtawfQ4NFhwX/htisrNImoCSKoQG/pxXP5A9uyVirU2E/QZVi7HI5LugvdvwV31F52czclQF0JAph1WdZoX/iwOb7johnypiAzMmCfbbzXoNcTGEDTFTvKju1gIzm0jcs12n6AkdDI/zcks7DEy73Fobfnf/beziMtxdz3y3asjlG1HzmqOGMc4i 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)(396003)(136003)(39860400002)(346002)(376002)(366004)(5660300002)(6666004)(6916009)(1076003)(478600001)(956004)(66476007)(66556008)(36756003)(16526019)(86362001)(6506007)(2616005)(83380400001)(69590400011)(26005)(186003)(8936002)(66946007)(52116002)(2906002)(6512007)(44832011)(966005)(316002)(6486002)(8676002)(461764006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: ZxLUZQSJu1a92CLuYHOJehSwrw2iqkX166tx5L4TXXssfEtrQ2nf3OsM5DKVBcf5543ENn4T21tl7FtRWkEiaqLBfiHARBd6uokhkjQuec9gJpsRZOzsbCbblExoQhauE0AR7x3KblkHkFQU9MPlDfGDzr/DcplRhYA9Q9F49gGL/VrLzFs2FN2uTBJlU1NFFMZLkbYHlKQOUcYOAP6m1AM+9R+nS5rle70Js7DQbVMt6G1ySF4w1LOpg1T9Wh0URz44Akm6dVvDLU1/TDQ7zUgt3I51xgitQ9eTFAlHdnzB79JaKccXqfPIawB9VCQ3XJmo/aInrllAJR8EmfXTzUFnj0BFbzEFJYjsCBxxkBrpF7gki2JfA7XOeuq4UP9KtgU+Zead08TVpusxvZ+mvphJgpXqR2TQ6pnB5tOr8+PbMI3ToW3fnUgpcPnUHa6bPoHyPOW5BWD2Q1P13C/GkfxcFq5Z+DRFVb37hJ+BKprLBzHWtMchnsR52WPJHUjxbLaSKVSunJ8UO8Cmq7buhYVyg40BjAmiLeW7UW7KHnlmGrSLydQzq6TFV4VOYsncpJnCF7Sp9YXVsqGWdTgZCqOJ/RUNuyccN5eTlA+iYTQlMecbaKmr0arjCnwxnpAksmnWsKYY8aVmcNApXQG28jvwfKYQyE0gxWXXCccs3SejXfhzQ0gkf98uyN2WxtYC7hOrSmNvS6HP4oTCY0XrVjJ7f+aID4ckTzsR2S3eS/oVu0G26UKvIRbc169tR32OyEV8TA16/dlnFmWfVXmzrJKgQt5QcNSx9vL9UxqxNi0X7QbVutzoT4ke75jkJMZPUXkzGlooJZz+B3gznIxWnCW/ozJpQnYUHezVg69ro4+5ifMZuLyEnmulXdgeGnvScY9q5cmQHiyOgjJde2UTPQQg+Rhmv956q1uhY5PvD7On9LX94hWamf9zm9VuVHDTsIgOBPuLNf0AprSZWphdZl4QdCkoOb4zHumrxQQeo2wm1h+6Eg4DCoN5NJxyIekB X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6157 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: AM5EUR03FT035.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 7d8ecab6-7230-4557-25d5-08d8b6433dea X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: V1oxOch+9TRNmhY7eLcvnBTidQKBRBOJu410c3AJLuXWDeYaxj+akC+NVgNxnTt25b5d8X/gpTlKXvJfgmteY+oAj/5FMh1Mg8aggS5+N4r1mrPSnLzkzHhGayC4E6ZKHRlG7i761X6fSgMZuoeJBYDo23CDhWX9oCBi0lDqQWQzDqMHfkA1zOpTotV39jOwzeckr4uOmR7aLcdj/eSOeoe789u3T5gusSCaCSbSAELOUnemo/TOW9BFZ8Qnqkcs2m6JapbTTTrwrMWNX2Fit8oqOzBj0uKyhtwZX46Ey9T+2vUCML2X/3fUBndhJEi+jJ/sZiUd2QIimcbMnSgBVO3rSWCswWnWqFCcnZ3O3rLQdPlJsGh+RX42YJPuWXw9eoPlXvwKqLxK0ypWbwaUgm6LknrnDmairQTvV0V5B8L2RDeKYAzT03dM41CXNThQ8YtB20MJaY88letdFLSdAK67lwwFYwg58pA/pORr9+vyksFSMsxmPhsjIkxfr5QjxaCmJ4g63Cr1phmrPYT7QEs01Geu11KKeozGp7Ecgz73isXGIzhvzPkTOsht3feEysrrDvuAZOp23f2KyqTOiIcWnfwfNnO3pp4E81VIssRTXg45Y/c/rgR4HJYVoPCI 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)(346002)(376002)(396003)(39860400002)(136003)(46966006)(316002)(6486002)(6506007)(6666004)(2906002)(2616005)(83380400001)(8936002)(6512007)(6916009)(26005)(336012)(956004)(86362001)(82740400003)(8676002)(478600001)(70206006)(966005)(81166007)(47076005)(70586007)(16526019)(186003)(1076003)(69590400011)(5660300002)(34020700004)(36756003)(356005)(82310400003)(44832011)(461764006); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jan 2021 15:12:07.1891 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d0fe8472-0a76-48f7-b224-08d8b64342cc 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: AM5EUR03FT035.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6347 X-Spam-Status: No, score=-14.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_SHORT, MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_LOW, 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 Rewriting the affected code in elf_get_dynamic_info seems to make this issue go away on old gcc. 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 --- note: with new gcc the code generation only changes slightly on aarch64 (the code becomes a bit smaller), with old gcc the change is not a robust fix for the issue but it seems to be be sufficient in my testing. the change only expected to have minor effect on other targets, since it's mostly cosmetic. 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..d8b071dff5 100644 --- a/elf/get-dynamic-info.h +++ b/elf/get-dynamic-info.h @@ -28,52 +28,47 @@ static auto #endif 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 typedef Elf64_Xword d_tag_utype; #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 = DT_VERSIONTAGIDX (dyn->d_tag) + DT_NUM + DT_THISPROCNUM; 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 #ifndef DL_RO_DYN_SECTION