From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2047.outbound.protection.outlook.com [40.107.8.47]) by sourceware.org (Postfix) with ESMTPS id 383123858D38 for ; Tue, 26 Mar 2024 11:56:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 383123858D38 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 383123858D38 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.8.47 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1711454168; cv=pass; b=rnXysU8fhYcQRXSFcHbgkPPnhJzJOG5TVbWsy2rf2CPyGCKbNNzxoHMD9OzlRCils6DXogFvIgpQ7I2rAEZehm1QtachY4LnGyYPqjrCZaIOQv4+lMOrbA7pZJ9ADDmmIbUlShqjDdi3c/VwzzHcQ41+w36FlhFLiDhhEfBl8mQ= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1711454168; c=relaxed/simple; bh=MPZ/9hOtWTW8aGa9j6dNvmx+GIvQKYw/2Lm06klu7TY=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=AWSTq0rpjXYdTyF4lbFabjYWaQUsqIuGgdmBNyNliOPbx6vB932H6NMd2xfWUR8FnM8XPIhknaq9u8dv5oOBAJdUNbfcOjXkLbxcpYGzbmB4AXTBa1zgOF41nIxHpAcidx51AhOFlhfiZ7kl9yBSHPX/ucL7PbMlYw2E6UJxQKU= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=SRHFzBRNUW15Sr7/f18hAMofCdLSCmqgRBYvUnxThltg2eM+vc+lNZ4FPNYy17JtCqbXJ4J11mlf5emAJ8NReCghUVuvaKxpMFDE2bmDrZppvE7HVSlWDi3q7BJTI/WTdmT0ZULsQ83TZMH/a59nM9YuLwjazKUrbAcIY/wSr4avB+BYyKMXamt/juA18ywBcSkjbflgFiupmRfuKjj+PFOtbkYePd3aXsy2bsbX6xx6eETaZZs1plVZBA/OKHky5LHeJJGlpmPHDf/y1Z20qrLI4Wb4SuduBFpdN+kq0NmfbamDkS1Wg/DFOJgEE1uF537nwkWS1o7+3cxTm/UlFA== ARC-Message-Signature: i=2; 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=IMCTlaLkNiSZs5pAgL/wAMQuN8zZZTr7rW3tR6+xqak=; b=Ci2PyZ2YDVY9hs/iJmnASsXVvr6ghlbQfe6DcgkUUEAtgOOVGAR1SFbICnKHEP0qFjJENT6spdii375d05FmxYuoyOxOFhqw14M1to+iwePS9/OFGxxIwBSkkbeNPuibsaF1XKrIrjOhP4t59nTdnjqyyns7QOuwFR7T/3CRsPZVdPNIh4j+bQuhwe2vygfchLXchH0+K9PX6ZzR60moIJZeZF1J7uvAIfAFGdRxz7KFyBAzjG/xBQlz8+x91Lcyr2KIGCaKGOMMd7vejzIyE8sz1la7pkZcmhUgADb5zJ8UB9huEDJbkMyjiOK0rwUrZUzXPLv2TQ2GpOf8CuY1sg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IMCTlaLkNiSZs5pAgL/wAMQuN8zZZTr7rW3tR6+xqak=; b=Gww4J4H7XS1fnAvtYAfRUYARD1G17/yHrsXg73Hs4bny64WcG78817ns37YcCsaFQbXai27DZUkBoNkoUcSmpvPQAb9woVRwgbvWM6HRSlZ+yoTMr2rmIdpRAuTyi4CMNQV2djRpEPtCuDdHNA+5AKMZ/YqbwjHX0ILLYMay+bM= Received: from AM6P195CA0077.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:86::18) by DU0PR08MB7661.eurprd08.prod.outlook.com (2603:10a6:10:31b::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.32; Tue, 26 Mar 2024 11:56:00 +0000 Received: from AMS0EPF000001B5.eurprd05.prod.outlook.com (2603:10a6:209:86:cafe::b2) by AM6P195CA0077.outlook.office365.com (2603:10a6:209:86::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.13 via Frontend Transport; Tue, 26 Mar 2024 11:56:00 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;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; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AMS0EPF000001B5.mail.protection.outlook.com (10.167.16.169) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.10 via Frontend Transport; Tue, 26 Mar 2024 11:55:58 +0000 Received: ("Tessian outbound 1b0f2681ce6f:v300"); Tue, 26 Mar 2024 11:55:58 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 7293d397934f13b7 X-CR-MTA-TID: 64aa7808 Received: from f542ec014712.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 3221462C-8FA1-42FA-9C19-E17DABDEFB67.1; Tue, 26 Mar 2024 11:55:47 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f542ec014712.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 26 Mar 2024 11:55:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GlCo10ZbjoUflfzd76XoI3HyIg8F5rV5z0QfNH1j8FeJtocm9rbHTitSbfM56qtqt5FD/ELqBQQlgKWnC7Mcrjz3pP2kBbFfq6StU56UJZBbKWTz/S7mLtsWIK9bbXbwFVf0334GNBnFKW26yefY2CzsY/82GzPOqs9dwixbr+a46ONPB6Z0DVgxuHT9VUZ+J4emJUlPa4RHmlTM7rM35tUb7o55qgeHaXMnvWf7yk7zkSa284WIlCO3io9V6kFHnE4O/wy07zkzXeaEd1E2yChvxPabQ52ilMRYEaPTxA7fWzVZyARGdogUerYW29cxuONqbQgyCypYSfmfOnqfcQ== 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=IMCTlaLkNiSZs5pAgL/wAMQuN8zZZTr7rW3tR6+xqak=; b=DfgQ43DfDCzDl2MCwQIt5dojUuGJvRJcGwvKm7uOsTMymP0j912uRiWJurkg98jGcxVwAUUhV+lbMBTCE/9bnYZUvfzojBG1FTYriTvvb6t7sZtjo1WTbPJVdwxS0yjz2+qvkoHqeHwqAR6WzZDkeMmppAGvq/3vZnwq2ij6a9UiEzVJxqWCrwGOrm25BRrGAfI9rPyg4HZxATlqAXsNj0nYELfhMKdWFp/a8WsAdalzVYuM9ndFucC9hbqelIkisTQYvJoTFjVv9oo3GLDf8TDxWuGWkgPjxXTliq9asXLLPC2Mx6kuqMIVialA+3uVC0D6UOhiqXTbQq05erqb6w== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IMCTlaLkNiSZs5pAgL/wAMQuN8zZZTr7rW3tR6+xqak=; b=Gww4J4H7XS1fnAvtYAfRUYARD1G17/yHrsXg73Hs4bny64WcG78817ns37YcCsaFQbXai27DZUkBoNkoUcSmpvPQAb9woVRwgbvWM6HRSlZ+yoTMr2rmIdpRAuTyi4CMNQV2djRpEPtCuDdHNA+5AKMZ/YqbwjHX0ILLYMay+bM= Received: from DB3PR08MB8986.eurprd08.prod.outlook.com (2603:10a6:10:42b::7) by DU0PR08MB8685.eurprd08.prod.outlook.com (2603:10a6:10:403::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.31; Tue, 26 Mar 2024 11:55:43 +0000 Received: from DB3PR08MB8986.eurprd08.prod.outlook.com ([fe80::6892:e6fb:1dfd:e263]) by DB3PR08MB8986.eurprd08.prod.outlook.com ([fe80::6892:e6fb:1dfd:e263%5]) with mapi id 15.20.7409.028; Tue, 26 Mar 2024 11:55:41 +0000 From: Wilco Dijkstra To: Richard Sandiford CC: GCC Patches , Kyrylo Tkachov Subject: Re: [PATCH] libatomic: Fix build for --disable-gnu-indirect-function [PR113986] Thread-Topic: [PATCH] libatomic: Fix build for --disable-gnu-indirect-function [PR113986] Thread-Index: AQHaZnZ0eQ8PUyGqSEaCt27pwXbKy7Es1YcCgB1BrVQ= Date: Tue, 26 Mar 2024 11:55:41 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: x-ms-traffictypediagnostic: DB3PR08MB8986:EE_|DU0PR08MB8685:EE_|AMS0EPF000001B5:EE_|DU0PR08MB7661:EE_ x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: Wvb8kPYrh3ZC3FB+/dP4/krrIceS4PI83c8/EsEyO6MsjDjDofUfpjivRNWWVRR7Fr/LBPcR5p7w3wWkqK0WESejYxhZeTGzatwCyCT3g614f2XUabR3rgR6RGx9vMJEY2D2x4aqbBKHomfFd2WoGId9pYnyF/sZWuRKRDAZlYacTqH65LVRx3iYHdVK2oS8z22WgJlCPVSMWh39P7U/1Dwc2p1r7n8xb3H+Ef80ZCbvRTQy9ueoRBv0VtjXRKi6vAG5fiHVfCP7huepquPAv1v06qEHDfsEtRCU6K0s3HdFWsgkfwZ1Y0WBipzIR0TL+4wk1I1EFKkFjdHtGFiSOf9NY6MyPYG6LmLNeav1xBOHju8+/SNMbiZ6zZpaHYMf8mwN9ClGkXn6zmSiDOHllHwLMYOli0SElOWfymLhhvr/aWvxOBvlIQPoaDGnhhSq1qcodac7MGby31pJ6Rv4ezHZ0e77uXIG9gcCorMTo4028570fAGS/XVpwFqRu9/drSOkqq0nLqwndT8aXhSqMm/J3LVF7pcGAO+70L3d2nDcb7YJl62mQhAzJxinBAn7+Etl2KrK7pYQuH1mV7kWJ1UAJEGZBztGaVWiDFdPNEvqBywTKEJgfXGsY+2kcD8PG5DdWnwVhJ2gugX3PqPiMHTKNKcl+aCr43bu29I/6gM= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB3PR08MB8986.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(376005)(1800799015)(366007);DIR:OUT;SFP:1102; Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB8685 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AMS0EPF000001B5.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 57dbf77f-364d-4152-b36c-08dc4d8bb39e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: r9mt2cKQFsN4ceGOlxBxA9To1D2f++XnN1akdGFdJpXba01pJFbafvFZROCBEFIbtZ66HAiNk98wFOhR26dQXln1zcWmJG7CdYFRP2r3kbv4zQ+aJOFGBELrmnuRfFJLaSA3sr+JVxDOc8xppFt7NdmDQzq4SHLKed+fOa4RzW0oRpmlLATJFDPIdFDcnUQ5rIZgj+1ANFnqtU/F2rwEzYIHeTToE8N/bBCYrgQ0V2tLWE/ISfSywu1lYmCPqvbuGO47nx7JYMzM/RZ6SXtEB0oq1w7YPwWS1RO8ZGPoPjHR/sK2j9FELPqhsGVvxLwUTlrU87oQF7B77FyHeZJ8J4coeCr1x6jnqx5RFZocH64YlxHtHUxp/t7upIDA+gKlud/Q7AkLdCMKDplFDPam35T+TDRpowuVinHFUT2KO6+x/F1FauZsxT9JJs3bx+RNt99PmECmYGrvEwenCoK96XRPPKc0sG4f+GVPwJBMUfMkpYF+e5nqOAF699cemgLUC2Crh9rZOloF9eKcPVXVjJUoyr8K7y9DVhwKXepmCk1S9bFWoqUV+sKrODvGHLohyQiAp2pF1B8sNtxkGJ2iBFQ16uuCynJb6n3NOSwXdAhi9p3T0Uce73nPPOvLT2jIQCmOkZnx0+Ei/kyzbsReF4YZeTgkwQk5WQeE6rRHJmV8W4zvE19JEyo1a3qLrScFyTZTg/UOfr9JTDLKNhYt2Q5mzafmLLEi6pXYNLS2LKP3QU6cHOpbzdQ2XVHffxmM 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:(13230031)(376005)(82310400014)(36860700004)(1800799015);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Mar 2024 11:55:58.8301 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 57dbf77f-364d-4152-b36c-08dc4d8bb39e 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: AMS0EPF000001B5.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB7661 X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi Richard,=0A= =0A= > This description is too brief for me.=A0 Could you say in detail how the= =0A= > new scheme works?=A0 E.g. the description doesn't explain:=0A= >=0A= > -if ARCH_AARCH64_HAVE_LSE128=0A= > -AM_CPPFLAGS=A0=A0=A0=A0=A0=A0 =3D -DHAVE_FEAT_LSE128=0A= > -endif=0A= =0A= That is not needed because we can include auto-config.h in atomic_16.S. I n= eeded=0A= this for HAVE_IFUNC, but then we redefine HAVE_FEAT_LSE128...=0A= =0A= > And what's the purpose of ARCH_AARCH64_HAVE_LSE128 after this change?=0A= =0A= None. I've removed the makefile leftovers in v2.=0A= =0A= > Is the indirection via ALIAS2 necessary?=A0 Couldn't ENTRY just define=0A= > the __atomic_* symbols directly, as non-hidden, if we remove the=0A= > libat_ prefix?=A0 That would make it easier to ensure that the lists=0A= > are kept up-to-date.=0A= =0A= Yes, we need both the libat_ symbol as well as the __atomic_ variant in thi= s=0A= case. One is for internal calls, the other for external. I have a separate = cleanup=0A= patch which hides the extra alias in ENTRY and removes all the libat prefix= es.=0A= However while trivial, that feels more like a stage 1 patch.=0A= =0A= > Shouldn't we skip the ENTRY_FEAT functions and existing aliases=0A= > if !HAVE_IFUNC?=0A= =0A= Yes, that's relatively easy, I've added HAVE_FEAT_LSE2 for that. Also we sk= ip the=0A= aliases at the end.=0A= =0A= > I think it'd be worth (as a prepatch) splitting the file into two=0A= > #included subfiles, one that contains the base AArch64 routines and one= =0A= > that contains the optimised versions.=A0 The former would then be #includ= ed=0A= > for all builds while the latter would be specific to HAVE_IFUNC.=0A= =0A= That sounds like a complete rewrite. We might as well emit our own ifuncs a= t that=0A= point and avoid all of the workarounds needed to fit in the framework of li= batomic.=0A= =0A= So for v2 I have kept things simple and just focus on fixing the bug.=0A= =0A= Cheers,=0A= Wilco=0A= =0A= =0A= v2: =0A= =0A= Fix libatomic build to support --disable-gnu-indirect-function on AArch64.= =0A= Always build atomic_16.S, add aliases to the __atomic_ functions if !HAVE_I= FUNC. =0A= Include auto-config.h in atomic_16.S to avoid having to pass defines via ma= kefiles.=0A= Fix build if HWCAP_ATOMICS/CPUID are not defined.=0A= =0A= Passes regress and bootstrap, OK for commit?=0A= =0A= libatomic:=0A= PR target/113986=0A= * Makefile.in: Regenerated.=0A= * Makefile.am: Make atomic_16.S not depend on HAVE_IFUNC.=0A= Remove predefine of HAVE_FEAT_LSE128.=0A= * acinclude.m4: Remove ARCH_AARCH64_HAVE_LSE128.=0A= * configure: Regenerated.=0A= * config/linux/aarch64/atomic_16.S: Add __atomic_ aliases if !HAVE_= IFUNC. =0A= * config/linux/aarch64/host-config.h: Correctly handle !HAVE_IFUNC.= Add=0A= defines for HWCAP_ATOMICS and HWCAP_CPUID.=0A= =0A= ---=0A= =0A= diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am=0A= index d49c44c7d5fbe83061fddd1f8ef4813a39eb1b8b..980677f353345c050f6cef2d570= 90360216c56cf 100644=0A= --- a/libatomic/Makefile.am=0A= +++ b/libatomic/Makefile.am=0A= @@ -130,12 +130,8 @@ libatomic_la_LIBADD =3D $(foreach s,$(SIZES),$(addsuff= ix _$(s)_.lo,$(SIZEOBJS)))=0A= ## On a target-specific basis, include alternates to be selected by IFUNC.= =0A= if HAVE_IFUNC=0A= if ARCH_AARCH64_LINUX=0A= -if ARCH_AARCH64_HAVE_LSE128=0A= -AM_CPPFLAGS =3D -DHAVE_FEAT_LSE128=0A= -endif=0A= IFUNC_OPTIONS =3D -march=3Darmv8-a+lse=0A= libatomic_la_LIBADD +=3D $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SI= ZEOBJS)))=0A= -libatomic_la_SOURCES +=3D atomic_16.S=0A= =0A= endif=0A= if ARCH_ARM_LINUX=0A= @@ -155,6 +151,10 @@ libatomic_la_LIBADD +=3D $(addsuffix _16_1_.lo,$(SIZEO= BJS)) \=0A= endif=0A= endif=0A= =0A= +if ARCH_AARCH64_LINUX=0A= +libatomic_la_SOURCES +=3D atomic_16.S=0A= +endif=0A= +=0A= libatomic_convenience_la_SOURCES =3D $(libatomic_la_SOURCES)=0A= libatomic_convenience_la_LIBADD =3D $(libatomic_la_LIBADD)=0A= =0A= diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in=0A= index 11c8ec7ba15ba7da5ef55e90bd836317bc270061..d9d529bc502d4ce7b9997640d5f= 40f5d5cc1232c 100644=0A= --- a/libatomic/Makefile.in=0A= +++ b/libatomic/Makefile.in=0A= @@ -90,17 +90,17 @@ build_triplet =3D @build@=0A= host_triplet =3D @host@=0A= target_triplet =3D @target@=0A= @ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_1 =3D $(foreach s,$(S= IZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS)))=0A= -@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_2 =3D atomic_16.S=0A= -@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_3 =3D $(foreach \=0A= +@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_2 =3D $(foreach \=0A= @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ s,$(SIZES),$(addsuffix \=0A= @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ _$(s)_1_.lo,$(SIZEOBJS))) \=0A= @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ $(addsuffix \=0A= @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ _8_2_.lo,$(SIZEOBJS)) \=0A= @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ tas_1_2_.lo=0A= -@ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@am__append_4 =3D $(addsuffix _8_1_.lo,$(S= IZEOBJS))=0A= -@ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@am__append_5 =3D $(addsuffix _16_1_.lo,= $(SIZEOBJS)) \=0A= +@ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@am__append_3 =3D $(addsuffix _8_1_.lo,$(S= IZEOBJS))=0A= +@ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@am__append_4 =3D $(addsuffix _16_1_.lo,= $(SIZEOBJS)) \=0A= @ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@ $(addsuffix _16_2_.lo,$(SIZEOB= JS))=0A= =0A= +@ARCH_AARCH64_LINUX_TRUE@am__append_5 =3D atomic_16.S=0A= subdir =3D .=0A= ACLOCAL_M4 =3D $(top_srcdir)/aclocal.m4=0A= am__aclocal_m4_deps =3D $(top_srcdir)/../config/acx.m4 \=0A= @@ -156,8 +156,7 @@ am__uninstall_files_from_dir =3D { \=0A= }=0A= am__installdirs =3D "$(DESTDIR)$(toolexeclibdir)"=0A= LTLIBRARIES =3D $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES)=0A= -@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__objects_1 =3D \=0A= -@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@ atomic_16.lo=0A= +@ARCH_AARCH64_LINUX_TRUE@am__objects_1 =3D atomic_16.lo=0A= am_libatomic_la_OBJECTS =3D gload.lo gstore.lo gcas.lo gexch.lo \=0A= glfree.lo lock.lo init.lo fenv.lo fence.lo flag.lo \=0A= $(am__objects_1)=0A= @@ -425,7 +424,7 @@ libatomic_la_LDFLAGS =3D $(libatomic_version_info) $(li= batomic_version_script) \=0A= $(lt_host_flags) $(libatomic_darwin_rpath)=0A= =0A= libatomic_la_SOURCES =3D gload.c gstore.c gcas.c gexch.c glfree.c lock.c \= =0A= - init.c fenv.c fence.c flag.c $(am__append_2)=0A= + init.c fenv.c fence.c flag.c $(am__append_5)=0A= SIZEOBJS =3D load store cas exch fadd fsub fand fior fxor fnand tas=0A= EXTRA_libatomic_la_SOURCES =3D $(addsuffix _n.c,$(SIZEOBJS))=0A= libatomic_la_DEPENDENCIES =3D $(libatomic_la_LIBADD) $(libatomic_version_d= ep)=0A= @@ -451,9 +450,8 @@ all_c_files :=3D $(foreach dir,$(search_path),$(wildcar= d $(dir)/*.c))=0A= # Then sort through them to find the one we want, and select the first.=0A= M_SRC =3D $(firstword $(filter %/$(M_FILE), $(all_c_files)))=0A= libatomic_la_LIBADD =3D $(foreach s,$(SIZES),$(addsuffix \=0A= - _$(s)_.lo,$(SIZEOBJS))) $(am__append_1) $(am__append_3) \=0A= - $(am__append_4) $(am__append_5)=0A= -@ARCH_AARCH64_HAVE_LSE128_TRUE@@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@A= M_CPPFLAGS =3D -DHAVE_FEAT_LSE128=0A= + _$(s)_.lo,$(SIZEOBJS))) $(am__append_1) $(am__append_2) \=0A= + $(am__append_3) $(am__append_4)=0A= @ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS =3D -march=3Darmv8= -a+lse=0A= @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS =3D -march=3Darmv7-a+f= p -DHAVE_KERNEL64=0A= @ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS =3D -march=3Di586=0A= diff --git a/libatomic/acinclude.m4 b/libatomic/acinclude.m4=0A= index d4f13174e2c92c4fffb86c106840dd26745fb600..6d2e0b1c355c470e44176964128= 64d20a6c1c62c 100644=0A= --- a/libatomic/acinclude.m4=0A= +++ b/libatomic/acinclude.m4=0A= @@ -99,7 +99,6 @@ AC_DEFUN([LIBAT_TEST_FEAT_AARCH64_LSE128],[=0A= ])=0A= LIBAT_DEFINE_YESNO([HAVE_FEAT_LSE128], [$libat_cv_have_feat_lse128],=0A= [Have LSE128 support for 16 byte integers.])=0A= - AM_CONDITIONAL([ARCH_AARCH64_HAVE_LSE128], [test x$libat_cv_have_feat_ls= e128 =3D xyes])=0A= ])=0A= =0A= dnl=0A= diff --git a/libatomic/config/linux/aarch64/atomic_16.S b/libatomic/config/= linux/aarch64/atomic_16.S=0A= index d4a360a6f7812351249d0a0ad7f60373b7f8c35a..4e3fa870b0338da4cfcdb0879ab= 8bed8d041a0a3 100644=0A= --- a/libatomic/config/linux/aarch64/atomic_16.S=0A= +++ b/libatomic/config/linux/aarch64/atomic_16.S=0A= @@ -38,6 +38,15 @@=0A= The libat__16_i1 entry points are used when LSE128 is available.=0A= The libat__16_i2 entry points are used when LSE2 is available. */= =0A= =0A= +#include "auto-config.h"=0A= +=0A= +#if !HAVE_IFUNC=0A= +# undef HAVE_FEAT_LSE128=0A= +# define HAVE_FEAT_LSE128 0=0A= +#endif=0A= +=0A= +#define HAVE_FEAT_LSE2 HAVE_IFUNC=0A= +=0A= #if HAVE_FEAT_LSE128=0A= .arch armv9-a+lse128=0A= #else=0A= @@ -67,8 +76,8 @@ NAME: \=0A= .cfi_endproc; \=0A= .size NAME, .-NAME;=0A= =0A= -#define ALIAS(NAME, FROM, TO) \=0A= - ALIAS1 (FROM (NAME),TO (NAME))=0A= +#define ALIAS(NAME, FROM, TO) ALIAS1 (FROM (NAME),TO (NAME))=0A= +#define ALIAS2(NAME) ALIAS1 (__atomic_##NAME, libat_##NAME)=0A= =0A= #define ALIAS1(ALIAS, NAME) \=0A= .global ALIAS; \=0A= @@ -125,6 +134,7 @@ ENTRY (libat_load_16)=0A= END (libat_load_16)=0A= =0A= =0A= +#if HAVE_FEAT_LSE2=0A= ENTRY_FEAT (libat_load_16, LSE2)=0A= cbnz w1, 1f=0A= =0A= @@ -146,6 +156,7 @@ ENTRY_FEAT (libat_load_16, LSE2)=0A= dmb ishld=0A= ret=0A= END_FEAT (libat_load_16, LSE2)=0A= +#endif=0A= =0A= =0A= ENTRY (libat_store_16)=0A= @@ -165,6 +176,7 @@ ENTRY (libat_store_16)=0A= END (libat_store_16)=0A= =0A= =0A= +#if HAVE_FEAT_LSE2=0A= ENTRY_FEAT (libat_store_16, LSE2)=0A= cbnz w4, 1f=0A= =0A= @@ -178,6 +190,7 @@ ENTRY_FEAT (libat_store_16, LSE2)=0A= cbnz w4, 1b=0A= ret=0A= END_FEAT (libat_store_16, LSE2)=0A= +#endif=0A= =0A= =0A= ENTRY (libat_exchange_16)=0A= @@ -279,6 +292,7 @@ ENTRY (libat_compare_exchange_16)=0A= END (libat_compare_exchange_16)=0A= =0A= =0A= +#if HAVE_FEAT_LSE2=0A= ENTRY_FEAT (libat_compare_exchange_16, LSE2)=0A= ldp exp0, exp1, [x1]=0A= mov tmp0, exp0=0A= @@ -313,6 +327,7 @@ ENTRY_FEAT (libat_compare_exchange_16, LSE2)=0A= 4: caspal exp0, exp1, in0, in1, [x0]=0A= b 0b=0A= END_FEAT (libat_compare_exchange_16, LSE2)=0A= +#endif=0A= =0A= =0A= ENTRY (libat_fetch_add_16)=0A= @@ -710,13 +725,14 @@ END (libat_test_and_set_16)=0A= =0A= /* Alias entry points which are the same in LSE2 and LSE128. */=0A= =0A= -#if !HAVE_FEAT_LSE128=0A= +#if HAVE_IFUNC=0A= +# if !HAVE_FEAT_LSE128=0A= ALIAS (libat_exchange_16, LSE128, LSE2)=0A= ALIAS (libat_fetch_or_16, LSE128, LSE2)=0A= ALIAS (libat_fetch_and_16, LSE128, LSE2)=0A= ALIAS (libat_or_fetch_16, LSE128, LSE2)=0A= ALIAS (libat_and_fetch_16, LSE128, LSE2)=0A= -#endif=0A= +# endif=0A= ALIAS (libat_load_16, LSE128, LSE2)=0A= ALIAS (libat_store_16, LSE128, LSE2)=0A= ALIAS (libat_compare_exchange_16, LSE128, LSE2)=0A= @@ -747,6 +763,29 @@ ALIAS (libat_fetch_nand_16, LSE2, CORE)=0A= ALIAS (libat_nand_fetch_16, LSE2, CORE)=0A= ALIAS (libat_test_and_set_16, LSE2, CORE)=0A= =0A= +#else=0A= +=0A= +/* Emit __atomic_* entrypoints if no ifuncs. */=0A= +=0A= +ALIAS2 (load_16)=0A= +ALIAS2 (store_16)=0A= +ALIAS2 (compare_exchange_16)=0A= +ALIAS2 (exchange_16)=0A= +ALIAS2 (fetch_add_16)=0A= +ALIAS2 (add_fetch_16)=0A= +ALIAS2 (fetch_sub_16)=0A= +ALIAS2 (sub_fetch_16)=0A= +ALIAS2 (fetch_or_16)=0A= +ALIAS2 (or_fetch_16)=0A= +ALIAS2 (fetch_and_16)=0A= +ALIAS2 (and_fetch_16)=0A= +ALIAS2 (fetch_xor_16)=0A= +ALIAS2 (xor_fetch_16)=0A= +ALIAS2 (fetch_nand_16)=0A= +ALIAS2 (nand_fetch_16)=0A= +ALIAS2 (test_and_set_16)=0A= +#endif=0A= +=0A= /* GNU_PROPERTY_AARCH64_* macros from elf.h for use in asm code. */=0A= #define FEATURE_1_AND 0xc0000000=0A= #define FEATURE_1_BTI 1=0A= diff --git a/libatomic/config/linux/aarch64/host-config.h b/libatomic/confi= g/linux/aarch64/host-config.h=0A= index 4e3541240633dc26de4a57c506b7e4b0c50185c2..d28449109a5e8beef650972e5a8= c215671f4a01b 100644=0A= --- a/libatomic/config/linux/aarch64/host-config.h=0A= +++ b/libatomic/config/linux/aarch64/host-config.h=0A= @@ -24,6 +24,19 @@=0A= #if HAVE_IFUNC=0A= #include =0A= =0A= +#ifndef HWCAP_ATOMICS=0A= +# define HWCAP_ATOMICS (1 << 8)=0A= +#endif=0A= +#ifndef HWCAP_CPUID=0A= +# define HWCAP_CPUID (1 << 11)=0A= +#endif=0A= +#ifndef HWCAP_USCAT=0A= +# define HWCAP_USCAT (1 << 25)=0A= +#endif=0A= +#ifndef HWCAP2_LSE128=0A= +# define HWCAP2_LSE128 (1UL << 47)=0A= +#endif=0A= +=0A= #if __has_include()=0A= # include =0A= #else=0A= @@ -35,7 +48,6 @@ typedef struct __ifunc_arg_t {=0A= # define _IFUNC_ARG_HWCAP (1ULL << 62)=0A= #endif=0A= =0A= -#ifdef HWCAP_USCAT=0A= # if N =3D=3D 16=0A= # define IFUNC_COND_1 (has_lse128 (hwcap, features))=0A= # define IFUNC_COND_2 (has_lse2 (hwcap, features))=0A= @@ -44,19 +56,6 @@ typedef struct __ifunc_arg_t {=0A= # define IFUNC_COND_1 (hwcap & HWCAP_ATOMICS)=0A= # define IFUNC_NCOND(N) 1=0A= # endif=0A= -#else=0A= -# define IFUNC_COND_1 (false)=0A= -# define IFUNC_NCOND(N) 1=0A= -#endif=0A= -=0A= -#endif /* HAVE_IFUNC */=0A= -=0A= -/* All 128-bit atomic functions are defined in aarch64/atomic_16.S. */=0A= -#if N =3D=3D 16=0A= -# define DONE 1=0A= -#endif=0A= -=0A= -#ifdef HWCAP_USCAT=0A= =0A= #define MIDR_IMPLEMENTOR(midr) (((midr) >> 24) & 255)=0A= #define MIDR_PARTNUM(midr) (((midr) >> 4) & 0xfff)=0A= @@ -89,11 +88,6 @@ has_lse2 (unsigned long hwcap, const __ifunc_arg_t *feat= ures)=0A= =0A= #define AT_FEAT_FIELD(isar0) (((isar0) >> 20) & 15)=0A= =0A= -/* Ensure backwards compatibility with glibc <=3D 2.38. */=0A= -#ifndef HWCAP2_LSE128=0A= -#define HWCAP2_LSE128 (1UL << 47)=0A= -#endif=0A= -=0A= static inline bool=0A= has_lse128 (unsigned long hwcap, const __ifunc_arg_t *features)=0A= {=0A= @@ -116,6 +110,14 @@ has_lse128 (unsigned long hwcap, const __ifunc_arg_t *= features)=0A= return false;=0A= }=0A= =0A= +#endif /* HAVE_IFUNC */=0A= +=0A= +/* All 128-bit atomic functions are defined in aarch64/atomic_16.S. */=0A= +#if N =3D=3D 16=0A= +# define DONE 1=0A= +# if !HAVE_IFUNC=0A= +# define IFUNC_ALT 1=0A= +# endif=0A= #endif=0A= =0A= #include_next =0A= diff --git a/libatomic/configure b/libatomic/configure=0A= index 8ab730d80828199caaf16d4aa9e1e36eeef280db..8ca72f08dfd21660e105c0ec3ad= 684c9b6aedb73 100755=0A= --- a/libatomic/configure=0A= +++ b/libatomic/configure=0A= @@ -656,8 +656,6 @@ LIBAT_BUILD_VERSIONED_SHLIB_FALSE=0A= LIBAT_BUILD_VERSIONED_SHLIB_TRUE=0A= OPT_LDFLAGS=0A= SECTION_LDFLAGS=0A= -ARCH_AARCH64_HAVE_LSE128_FALSE=0A= -ARCH_AARCH64_HAVE_LSE128_TRUE=0A= SYSROOT_CFLAGS_FOR_TARGET=0A= enable_aarch64_lse=0A= libtool_VERSION=0A= @@ -14740,15 +14738,6 @@ cat >>confdefs.h <<_ACEOF=0A= _ACEOF=0A= =0A= =0A= - if test x$libat_cv_have_feat_lse128 =3D xyes; then=0A= - ARCH_AARCH64_HAVE_LSE128_TRUE=3D=0A= - ARCH_AARCH64_HAVE_LSE128_FALSE=3D'#'=0A= -else=0A= - ARCH_AARCH64_HAVE_LSE128_TRUE=3D'#'=0A= - ARCH_AARCH64_HAVE_LSE128_FALSE=3D=0A= -fi=0A= -=0A= -=0A= =0A= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering i= s bigendian" >&5=0A= $as_echo_n "checking whether byte ordering is bigendian... " >&6; }=0A= @@ -16042,11 +16031,6 @@ if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && tes= t -z "${ENABLE_DARWIN_AT_RPATH=0A= as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined= .=0A= Usually this means the macro was only invoked conditionally." "$LINENO" 5= =0A= fi=0A= -if test -z "${ARCH_AARCH64_HAVE_LSE128_TRUE}" && test -z "${ARCH_AARCH64_H= AVE_LSE128_FALSE}"; then=0A= - as_fn_error $? "conditional \"ARCH_AARCH64_HAVE_LSE128\" was never defin= ed.=0A= -Usually this means the macro was only invoked conditionally." "$LINENO" 5= =0A= -fi=0A= -=0A= if test -z "${LIBAT_BUILD_VERSIONED_SHLIB_TRUE}" && test -z "${LIBAT_BUILD= _VERSIONED_SHLIB_FALSE}"; then=0A= as_fn_error $? "conditional \"LIBAT_BUILD_VERSIONED_SHLIB\" was never de= fined.=0A= Usually this means the macro was only invoked conditionally." "$LINENO" 5= =0A= =0A=