From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-eopbgr130058.outbound.protection.outlook.com [40.107.13.58]) by sourceware.org (Postfix) with ESMTPS id A3C1E385275C for ; Fri, 14 Oct 2022 16:38:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A3C1E385275C 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-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=bkAlJ7PCld4EkRWMBGhWMQODNTxDD+UsSxGtwVAsGXVoMUX6M77Cq+ksjqW5xXFkmf2p/818Syoc/7JuFrSf/dAeHLOFoPLGKLWTKJYyO3kNokPtGOvf+7tlzCVVELeLVWxnIRIl24gBqIog/Kvc8ypvo1qwAl8qLK5f9rTom1KfphcnFsNTC/xrz0UmkXaSSp/UztZ7VyOYHrDrAJzSpXeHrbs23ajvdoVnYOS0dYZl0MXeEOiiRASISWxqpc2zyrlD7RnHnxKQ3Cu9qs3bg9HUQpNbJeh6yb+9aIOgIk/v1i3VOnok5+5MvwRk2txDOf7hMQnoxzHMxMj1ljRKjA== 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=b75jjQAdFhzbSdJxc1ezyCUatBmiqOLIQEqTO0vuS48=; b=gsQRS2eUB/QRxGa5ZEkPKWL4mPwbtDiTlQ9zK5L7v8/EpebR6PnNqb1AXfBIiTpR7ZfVx7eGEjAWfU2nXO1u5BipPr4C9UVPlQkPIhqKfbEMAYJUGOEGsKIkCzx5lJmN9XVdqAWIPrO9qd++wZL3iIGWFk2Mg6iik08dseHRhmXBO4iv1Y/07BvEydPlR74yChuIqcO/2JbVacAkQEpTbdxHtxG4Y1084IC11M6wmksIqnP35frB0HXs6sY+7QBpvzw5ilFR5H3TeQxogFUAAHtS3TPzXD1wdB+XVpUdVCvIBaKkM7gAOVANp5UydSTBWCoZwrE6rRNwScWCDDNfWQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=sourceware.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=b75jjQAdFhzbSdJxc1ezyCUatBmiqOLIQEqTO0vuS48=; b=GhgN1tUgPz6XYqqTeA2tmJYxGABUvgzIRyYa3KQkz6IZqtw56G3M6TI/oj7nY4wAT+hpEE1ZhJ0pMa5GdPpfdfjDR2PiNXUJriVHq5QtIJNfYnRqdUWMSdWFnQHDbWhdletsKY8N13M4UF0D6sj6siCTjJx3dc/NkgjX4QUdp1o= Received: from DBBPR09CA0032.eurprd09.prod.outlook.com (2603:10a6:10:d4::20) by AS2PR08MB8717.eurprd08.prod.outlook.com (2603:10a6:20b:55d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.26; Fri, 14 Oct 2022 16:38:42 +0000 Received: from DBAEUR03FT013.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:d4:cafe::f5) by DBBPR09CA0032.outlook.office365.com (2603:10a6:10:d4::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.30 via Frontend Transport; Fri, 14 Oct 2022 16:38:42 +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 DBAEUR03FT013.mail.protection.outlook.com (100.127.142.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.10 via Frontend Transport; Fri, 14 Oct 2022 16:38:42 +0000 Received: ("Tessian outbound 58faf9791229:v130"); Fri, 14 Oct 2022 16:38:42 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 316c03ab8dab04e3 X-CR-MTA-TID: 64aa7808 Received: from 018a60fe61e0.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 47B4E537-CBEA-4CB8-B6FA-EDF05861C1DE.1; Fri, 14 Oct 2022 16:38:35 +0000 Received: from EUR01-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 018a60fe61e0.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 14 Oct 2022 16:38:35 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HRnWS8Dxl2VzqicdZscwI7AaKMtqGBONEJ94hbbU4wYEq1iwgELVu/CjpBA5zL69HgViimGBCSbdqsUEl43av0DSrtiIL5/qvR803f9xLTcnNS3shYRjzKfPoKlMV7yC7Mm59E7A6qhYesIexALxqmNCnT92tHXfyYTgmpIhYOqSPjBebU0+gnAINd7kjbxUGYFexpF2GeUYr/l32YvAezFvVhrbdMT07mVoNYQ961580V2k+3OPjIducKWD9Ckdtv+I7TI/uTHzU/lgx6M1g9/1n+3D0Y7LBp299xD3aNPDjpa7JR0/P3qdc6w/W5hO3tpKZWtdBSBR7ERkCrwsvw== 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=b75jjQAdFhzbSdJxc1ezyCUatBmiqOLIQEqTO0vuS48=; b=lDYKUM27k6iTbm4vGyrrD3i80dA8yCpP3iAylRJO5T7lMoJcK/xDMCmSyhOQ4yIfIoMDrxzY/4QUj9uNSSLxhQbbKaB2mwsePDXdF5ihq6IwDG/hDcAj9Ga1Pl1616mF+O4M/BiCV8szcYxf2i4gb7fi6H6vRcHVkzujjH1HFn48HCp6hbCHnvqlzAGZzwoqAr2nC5tppptsy5GQjLQh9fg/I0ZmMPWn08RxDA95a3VJ9BlkLTlKUGnZ6u6mPJZGmeE37kxTUldR7fxhbrqj4OXAbcCCMJq05AEBtYhej+VmHH8bV0lb5MYxbqClrs/rg6DrB6GlwO0f5+CRWjtz1Q== 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=b75jjQAdFhzbSdJxc1ezyCUatBmiqOLIQEqTO0vuS48=; b=GhgN1tUgPz6XYqqTeA2tmJYxGABUvgzIRyYa3KQkz6IZqtw56G3M6TI/oj7nY4wAT+hpEE1ZhJ0pMa5GdPpfdfjDR2PiNXUJriVHq5QtIJNfYnRqdUWMSdWFnQHDbWhdletsKY8N13M4UF0D6sj6siCTjJx3dc/NkgjX4QUdp1o= Received: from AS4PR08MB7901.eurprd08.prod.outlook.com (2603:10a6:20b:51c::16) by AS8PR08MB6133.eurprd08.prod.outlook.com (2603:10a6:20b:298::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.29; Fri, 14 Oct 2022 16:38:32 +0000 Received: from AS4PR08MB7901.eurprd08.prod.outlook.com ([fe80::3991:ebed:c15b:de1e]) by AS4PR08MB7901.eurprd08.prod.outlook.com ([fe80::3991:ebed:c15b:de1e%5]) with mapi id 15.20.5723.026; Fri, 14 Oct 2022 16:38:32 +0000 From: Wilco Dijkstra To: 'GNU C Library' CC: Adhemerval Zanella Subject: [PATCH v4] Remove catomics Thread-Topic: [PATCH v4] Remove catomics Thread-Index: AQHY3+sI8nbpaQDMMUC93bJp0o8KHA== Date: Fri, 14 Oct 2022 16:38:32 +0000 Message-ID: Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: AS4PR08MB7901:EE_|AS8PR08MB6133:EE_|DBAEUR03FT013:EE_|AS2PR08MB8717:EE_ X-MS-Office365-Filtering-Correlation-Id: 4499a205-25b4-4d3d-86ae-08daae028e19 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: FQbHy6+AOy+yOwImBmG0yS9CD0FWMvQHfmoqhWN8qNR3gGtxiFSOab22TPWm/4cu3vI3J4jH9rpLGiQlhjn3doA5PYadeuhaer185zWCaKFDVn+Z/4dGncbgpLdLZI5hy/KEwSR8RS46LjPugj85LCQ2NBW5N/89zpSMhrRYZvqgA6fIyqQ8sIoMCYbxNoRJQGK6PRFYBaxvjriZUwiC0Pcy3UQ2N2Nj4w0B8q2C4SOoEZB1DdeIdqh5Q8D0xxscQLQSz50J0lHjVCpFj9lGNlkvTwRCNe890grLgbyYDCd1X9m1wy11wu+qxX+xT6pu7OuDkjMBuqYniYriNdktaQ8hh59KOonbY34tzBVTwig5mhg9YSXiGlrXEbmGFz+dbPIEGigVdrhtk+fDrLPhxYOpXyIuI+zEOF4sn3JGbcuoznGgiStOZ+tKGO/NMLJonD+AioNCLYe52JwIe+vi1EVoHZk0yZrn3rteBF/mOVc5yIs4mnN4MaAPkjGNVXG5eyqU8LNAS8fWRhktUpiMqeJMpGg4r/zZoHnW17w0hVonyZNJq5dui8X3dr01OV2FgwcrIY8qxosqqDiPZA/gwN9ec7WSVPA4maQ1ow/8Kaep7qYBCg4qn2llLDDsTIuveYyTyex9NivC5hiRKHUQBJWwBCVeND9osorGEw6+yBMsR8Ememl3ZBE6EDP1xlQgIIFqzLjCwu28yHPNevCLWDS0tyqi5w2HiLYmR/Ee1bDO4Yg7AkxAAZ24vyrbWKE0vIaqG8fbQ5DnfxlA2c+BCg== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS4PR08MB7901.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(39860400002)(396003)(346002)(136003)(376002)(366004)(451199015)(7696005)(9686003)(6506007)(26005)(71200400001)(478600001)(55016003)(122000001)(38100700002)(86362001)(38070700005)(33656002)(186003)(5660300002)(83380400001)(30864003)(52536014)(8936002)(8676002)(2906002)(66556008)(66946007)(91956017)(76116006)(4326008)(64756008)(6916009)(316002)(66446008)(66476007)(41300700001)(579004)(559001);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6133 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT013.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: bc8be3a8-ccca-46c5-ad12-08daae028871 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: TLYtgeGwEyN6GfeN1BvWL0F3+uy7aUAzz2FRZaRZsI4k2d4e5L+EuV1JA33UEDUx2wuGWpBtjCNGis1mwpUqGj0XZhpYupLq0UUQy9OvfGSwkWPlKD5lhIUNP2nTaoEQ1DSg3kymg5PvcTWNpIzOiCyWhkfkE+GFWet/U8+qffw3RPvA0H3pfQ8S5NHvnvmdk9JufXxtfbTzTh0+2KJ7I3ioMvOqgFVJIXMWlcC5grlfEQ9ucWicfUNhhfvVTI+brNmJuvFejI8p3vc0EnacTyQIqvqXdebTfRSYF9OTfBPSxH1hK7JyPRk7EAKrSdTbfHnzsVjtDXJqRKASmIQ3GywRz3POuxztLqbvb5o4fyfsNFOsq1tNFiYSlCptFE9r7Yje9/CqyNbz1qnq0f0Is54T5aAZIfvmfE20qia1y1323DBVMcs3KsMWdUyKWicVo/73Sn++YR+j6PhHYUORltrSdW2B6O0+p9Nqa7YZqeFG+RxolMxa3PU+6QJFRo9l9ucynuoMpOr17XVzyhLZHmc7TVuUUpt1fwjqD1dKw6vbmp9Myz+nN1NE3ZGCwvkIotMF7o+np2X0W8Lwyrcgh7/HAwaP6atdK6cVrpx+6cbiHb/2WzWbJ6SYw7FoVo72VAyx67GI8FQeFxsNUQk7qWcvsJVFxZI6ocuzU2jZKJ4yMeFEWOFv6CtzZiZudPD0QLIAT2154ppfZtdpW5PA1eQxay2NxBdszrDIzMhXnqjSiGjYCGJ+FGJv4GbeX0tLYmXsXEAiA3/DjPquAk7Xaw== 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:(13230022)(4636009)(396003)(39860400002)(136003)(346002)(376002)(451199015)(40470700004)(46966006)(36840700001)(36860700001)(83380400001)(47076005)(33656002)(6916009)(52536014)(316002)(186003)(70206006)(4326008)(70586007)(8936002)(8676002)(9686003)(40480700001)(336012)(82740400003)(55016003)(41300700001)(86362001)(26005)(30864003)(5660300002)(82310400005)(40460700003)(107886003)(6506007)(356005)(81166007)(2906002)(478600001)(7696005);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Oct 2022 16:38:42.3551 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4499a205-25b4-4d3d-86ae-08daae028e19 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: DBAEUR03FT013.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB8717 X-Spam-Status: No, score=-11.1 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: v4: rebased to latest trunk=0A= =0A= The catomics are not supported on most targets and are only used in a few p= laces which are not=0A= performance critical, so replace all uses with more standard atomics.=0A= Replace uses of catomic_add, catomic_increment, catomic_decrement and catom= ic_fetch_and_add=0A= with atomic_fetch_add_relaxed which maps to a standard compiler builtin. Re= laxed memory ordering=0A= is correct for simple counters since they only need atomicity.=0A= =0A= Passes regress on AArch64 and build-many-glibcs=0A= =0A= ---=0A= =0A= diff --git a/elf/dl-fptr.c b/elf/dl-fptr.c=0A= index 6645a260b809ecd521796e0d1adee56b3e0bd993..d6e63b807b597b886562657da2d= 007fc9053be72 100644=0A= --- a/elf/dl-fptr.c=0A= +++ b/elf/dl-fptr.c=0A= @@ -40,7 +40,7 @@=0A= =0A= #ifndef COMPARE_AND_SWAP=0A= # define COMPARE_AND_SWAP(ptr, old, new) \=0A= - (catomic_compare_and_exchange_bool_acq (ptr, new, old) =3D=3D 0)=0A= + (atomic_compare_and_exchange_bool_acq (ptr, new, old) =3D=3D 0)=0A= #endif=0A= =0A= ElfW(Addr) _dl_boot_fptr_table [ELF_MACHINE_BOOT_FPTR_TABLE_LEN];=0A= diff --git a/elf/dl-profile.c b/elf/dl-profile.c=0A= index 96ba6067240f2a2fec905442647b04272db523df..0af1f577d2d695d08edce9e13d9= b39f77911b1d5 100644=0A= --- a/elf/dl-profile.c=0A= +++ b/elf/dl-profile.c=0A= @@ -552,7 +552,7 @@ _dl_mcount (ElfW(Addr) frompc, ElfW(Addr) selfpc)=0A= froms[newfromidx].here =3D &data[narcs];=0A= froms[newfromidx].link =3D tos[to_index];=0A= tos[to_index] =3D newfromidx;=0A= - catomic_increment (&narcs);=0A= + atomic_fetch_add_relaxed (&narcs, 1);=0A= }=0A= =0A= /* If we still have no entry stop searching and insert. */=0A= diff --git a/include/atomic.h b/include/atomic.h=0A= index 2cb52c9cfd894308b97b97a04dd574b2287bf1b2..227581d60d85ba6d0f7223a94bb= d6ff90e50ff1c 100644=0A= --- a/include/atomic.h=0A= +++ b/include/atomic.h=0A= @@ -24,13 +24,6 @@=0A= - atomic arithmetic and logic operation on memory. They all=0A= have the prefix "atomic_".=0A= =0A= - - conditionally atomic operations of the same kinds. These=0A= - always behave identical but can be faster when atomicity=0A= - is not really needed since only one thread has access to=0A= - the memory location. In that case the code is slower in=0A= - the multi-thread case. The interfaces have the prefix=0A= - "catomic_".=0A= -=0A= - support functions like barriers. They also have the prefix=0A= "atomic_".=0A= =0A= @@ -93,29 +86,6 @@=0A= #endif=0A= =0A= =0A= -#ifndef catomic_compare_and_exchange_val_acq=0A= -# ifdef __arch_c_compare_and_exchange_val_32_acq=0A= -# define catomic_compare_and_exchange_val_acq(mem, newval, oldval) \=0A= - __atomic_val_bysize (__arch_c_compare_and_exchange_val,acq, \=0A= - mem, newval, oldval)=0A= -# else=0A= -# define catomic_compare_and_exchange_val_acq(mem, newval, oldval) \=0A= - atomic_compare_and_exchange_val_acq (mem, newval, oldval)=0A= -# endif=0A= -#endif=0A= -=0A= -=0A= -#ifndef catomic_compare_and_exchange_val_rel=0A= -# ifndef atomic_compare_and_exchange_val_rel=0A= -# define catomic_compare_and_exchange_val_rel(mem, newval, oldval) = \=0A= - catomic_compare_and_exchange_val_acq (mem, newval, oldval)=0A= -# else=0A= -# define catomic_compare_and_exchange_val_rel(mem, newval, oldval) = \=0A= - atomic_compare_and_exchange_val_rel (mem, newval, oldval)=0A= -# endif=0A= -#endif=0A= -=0A= -=0A= #ifndef atomic_compare_and_exchange_val_rel=0A= # define atomic_compare_and_exchange_val_rel(mem, newval, oldval) \= =0A= atomic_compare_and_exchange_val_acq (mem, newval, oldval)=0A= @@ -141,23 +111,6 @@=0A= #endif=0A= =0A= =0A= -#ifndef catomic_compare_and_exchange_bool_acq=0A= -# ifdef __arch_c_compare_and_exchange_bool_32_acq=0A= -# define catomic_compare_and_exchange_bool_acq(mem, newval, oldval) \=0A= - __atomic_bool_bysize (__arch_c_compare_and_exchange_bool,acq, \= =0A= - mem, newval, oldval)=0A= -# else=0A= -# define catomic_compare_and_exchange_bool_acq(mem, newval, oldval) \=0A= - ({ /* Cannot use __oldval here, because macros later in this file might = \=0A= - call this macro with __oldval argument. */ \=0A= - __typeof (oldval) __atg4_old =3D (oldval); \=0A= - catomic_compare_and_exchange_val_acq (mem, newval, __atg4_old) = \=0A= - !=3D __atg4_old; \=0A= - })=0A= -# endif=0A= -#endif=0A= -=0A= -=0A= /* Store NEWVALUE in *MEM and return the old value. */=0A= #ifndef atomic_exchange_acq=0A= # define atomic_exchange_acq(mem, newvalue) \=0A= @@ -212,23 +165,6 @@=0A= atomic_exchange_and_add_acq(mem, value)=0A= #endif=0A= =0A= -#ifndef catomic_exchange_and_add=0A= -# define catomic_exchange_and_add(mem, value) \=0A= - ({ __typeof (*(mem)) __atg7_oldv; \=0A= - __typeof (mem) __atg7_memp =3D (mem); \=0A= - __typeof (*(mem)) __atg7_value =3D (value); \=0A= - \=0A= - do \=0A= - __atg7_oldv =3D *__atg7_memp; \=0A= - while (__builtin_expect \=0A= - (catomic_compare_and_exchange_bool_acq (__atg7_memp, \=0A= - __atg7_oldv \=0A= - + __atg7_value, \=0A= - __atg7_oldv), 0)); \=0A= - \=0A= - __atg7_oldv; })=0A= -#endif=0A= -=0A= =0A= #ifndef atomic_max=0A= # define atomic_max(mem, value) \=0A= @@ -247,24 +183,6 @@=0A= #endif=0A= =0A= =0A= -#ifndef catomic_max=0A= -# define catomic_max(mem, value) \=0A= - do { \=0A= - __typeof (*(mem)) __atg9_oldv; \=0A= - __typeof (mem) __atg9_memp =3D (mem); \=0A= - __typeof (*(mem)) __atg9_value =3D (value); \=0A= - do { \=0A= - __atg9_oldv =3D *__atg9_memp; \=0A= - if (__atg9_oldv >=3D __atg9_value) \=0A= - break; \=0A= - } while (__builtin_expect \=0A= - (catomic_compare_and_exchange_bool_acq (__atg9_memp, \=0A= - __atg9_value, \=0A= - __atg9_oldv), 0)); \=0A= - } while (0)=0A= -#endif=0A= -=0A= -=0A= #ifndef atomic_min=0A= # define atomic_min(mem, value) \=0A= do { \=0A= @@ -288,32 +206,16 @@=0A= #endif=0A= =0A= =0A= -#ifndef catomic_add=0A= -# define catomic_add(mem, value) \=0A= - (void) catomic_exchange_and_add ((mem), (value))=0A= -#endif=0A= -=0A= -=0A= #ifndef atomic_increment=0A= # define atomic_increment(mem) atomic_add ((mem), 1)=0A= #endif=0A= =0A= =0A= -#ifndef catomic_increment=0A= -# define catomic_increment(mem) catomic_add ((mem), 1)=0A= -#endif=0A= -=0A= -=0A= #ifndef atomic_increment_val=0A= # define atomic_increment_val(mem) (atomic_exchange_and_add ((mem), 1) + 1= )=0A= #endif=0A= =0A= =0A= -#ifndef catomic_increment_val=0A= -# define catomic_increment_val(mem) (catomic_exchange_and_add ((mem), 1) += 1)=0A= -#endif=0A= -=0A= -=0A= /* Add one to *MEM and return true iff it's now zero. */=0A= #ifndef atomic_increment_and_test=0A= # define atomic_increment_and_test(mem) \=0A= @@ -326,21 +228,11 @@=0A= #endif=0A= =0A= =0A= -#ifndef catomic_decrement=0A= -# define catomic_decrement(mem) catomic_add ((mem), -1)=0A= -#endif=0A= -=0A= -=0A= #ifndef atomic_decrement_val=0A= # define atomic_decrement_val(mem) (atomic_exchange_and_add ((mem), -1) - = 1)=0A= #endif=0A= =0A= =0A= -#ifndef catomic_decrement_val=0A= -# define catomic_decrement_val(mem) (catomic_exchange_and_add ((mem), -1) = - 1)=0A= -#endif=0A= -=0A= -=0A= /* Subtract 1 from *MEM and return true iff it's now zero. */=0A= #ifndef atomic_decrement_and_test=0A= # define atomic_decrement_and_test(mem) \=0A= @@ -421,22 +313,6 @@=0A= } while (0)=0A= #endif=0A= =0A= -#ifndef catomic_and=0A= -# define catomic_and(mem, mask) \=0A= - do { \=0A= - __typeof (*(mem)) __atg20_old; \=0A= - __typeof (mem) __atg20_memp =3D (mem); \=0A= - __typeof (*(mem)) __atg20_mask =3D (mask); \=0A= - \=0A= - do \=0A= - __atg20_old =3D (*__atg20_memp); \=0A= - while (__builtin_expect \=0A= - (catomic_compare_and_exchange_bool_acq (__atg20_memp, \=0A= - __atg20_old & __atg20_mask,\=0A= - __atg20_old), 0)); \=0A= - } while (0)=0A= -#endif=0A= -=0A= /* Atomically *mem &=3D mask and return the old value of *mem. */=0A= #ifndef atomic_and_val=0A= # define atomic_and_val(mem, mask) \=0A= @@ -471,22 +347,6 @@=0A= } while (0)=0A= #endif=0A= =0A= -#ifndef catomic_or=0A= -# define catomic_or(mem, mask) \=0A= - do { \=0A= - __typeof (*(mem)) __atg18_old; \=0A= - __typeof (mem) __atg18_memp =3D (mem); \=0A= - __typeof (*(mem)) __atg18_mask =3D (mask); \=0A= - \=0A= - do \=0A= - __atg18_old =3D (*__atg18_memp); \=0A= - while (__builtin_expect \=0A= - (catomic_compare_and_exchange_bool_acq (__atg18_memp, \=0A= - __atg18_old | __atg18_mask,\=0A= - __atg18_old), 0)); \=0A= - } while (0)=0A= -#endif=0A= -=0A= /* Atomically *mem |=3D mask and return the old value of *mem. */=0A= #ifndef atomic_or_val=0A= # define atomic_or_val(mem, mask) \=0A= diff --git a/malloc/arena.c b/malloc/arena.c=0A= index 36786530edafe02cab0177b6afb8bcbe32323a96..3826caa04d99bf6bcf33dae46ae= fffca7607a33c 100644=0A= --- a/malloc/arena.c=0A= +++ b/malloc/arena.c=0A= @@ -950,11 +950,11 @@ arena_get2 (size_t size, mstate avoid_arena)=0A= enough address space to create that many arenas. */=0A= if (__glibc_unlikely (n <=3D narenas_limit - 1))=0A= {=0A= - if (catomic_compare_and_exchange_bool_acq (&narenas, n + 1, n))= =0A= + if (atomic_compare_and_exchange_bool_acq (&narenas, n + 1, n))= =0A= goto repeat;=0A= a =3D _int_new_arena (size);=0A= if (__glibc_unlikely (a =3D=3D NULL))=0A= - catomic_decrement (&narenas);=0A= + atomic_fetch_add_relaxed (&narenas, -1);=0A= }=0A= else=0A= a =3D reused_arena (avoid_arena);=0A= diff --git a/malloc/malloc.c b/malloc/malloc.c=0A= index 953183e9567b65b5e1f308f1fe8c9323c0fc2e1f..4059f856b5b9cd6490e67cef387= 60733592fb5f6 100644=0A= --- a/malloc/malloc.c=0A= +++ b/malloc/malloc.c=0A= @@ -3808,7 +3808,7 @@ _int_malloc (mstate av, size_t bytes)=0A= if (__glibc_unlikely (pp !=3D NULL && misaligned_chunk (pp))) = \=0A= malloc_printerr ("malloc(): unaligned fastbin chunk detected"); \=0A= } \=0A= - while ((pp =3D catomic_compare_and_exchange_val_acq (fb, pp, victim)) \= =0A= + while ((pp =3D atomic_compare_and_exchange_val_acq (fb, pp, victim)) \= =0A= !=3D victim); \=0A= =0A= if ((unsigned long) (nb) <=3D (unsigned long) (get_max_fast ()))=0A= @@ -4526,7 +4526,7 @@ _int_free (mstate av, mchunkptr p, int have_lock)=0A= old2 =3D old;=0A= p->fd =3D PROTECT_PTR (&p->fd, old);=0A= }=0A= - while ((old =3D catomic_compare_and_exchange_val_rel (fb, p, old2))= =0A= + while ((old =3D atomic_compare_and_exchange_val_rel (fb, p, old2))= =0A= !=3D old2);=0A= =0A= /* Check that size of fastbin chunk at the top is the same as=0A= diff --git a/malloc/memusage.c b/malloc/memusage.c=0A= index f30906dffb2731c104ea375af48f59c65bcc7c9c..74712834fa8b96fb2d9589d34b3= 4ab07d05a84ca 100644=0A= --- a/malloc/memusage.c=0A= +++ b/malloc/memusage.c=0A= @@ -148,8 +148,8 @@ update_data (struct header *result, size_t len, size_t = old_len)=0A= =0A= /* Compute current heap usage and compare it with the maximum value. */= =0A= size_t heap=0A= - =3D catomic_exchange_and_add (¤t_heap, len - old_len) + len - ol= d_len;=0A= - catomic_max (&peak_heap, heap);=0A= + =3D atomic_fetch_add_relaxed (¤t_heap, len - old_len) + len - ol= d_len;=0A= + atomic_max (&peak_heap, heap);=0A= =0A= /* Compute current stack usage and compare it with the maximum=0A= value. The base stack pointer might not be set if this is not=0A= @@ -172,15 +172,15 @@ update_data (struct header *result, size_t len, size_= t old_len)=0A= start_sp =3D sp;=0A= size_t current_stack =3D start_sp - sp;=0A= #endif=0A= - catomic_max (&peak_stack, current_stack);=0A= + atomic_max (&peak_stack, current_stack);=0A= =0A= /* Add up heap and stack usage and compare it with the maximum value. *= /=0A= - catomic_max (&peak_total, heap + current_stack);=0A= + atomic_max (&peak_total, heap + current_stack);=0A= =0A= /* Store the value only if we are writing to a file. */=0A= if (fd !=3D -1)=0A= {=0A= - uint32_t idx =3D catomic_exchange_and_add (&buffer_cnt, 1);=0A= + uint32_t idx =3D atomic_fetch_add_relaxed (&buffer_cnt, 1);=0A= if (idx + 1 >=3D 2 * buffer_size)=0A= {=0A= /* We try to reset the counter to the correct range. If=0A= @@ -188,7 +188,7 @@ update_data (struct header *result, size_t len, size_t = old_len)=0A= counter it does not matter since that thread will take=0A= care of the correction. */=0A= uint32_t reset =3D (idx + 1) % (2 * buffer_size);=0A= - catomic_compare_and_exchange_val_acq (&buffer_cnt, reset, idx + = 1);=0A= + atomic_compare_and_exchange_val_acq (&buffer_cnt, reset, idx + 1= );=0A= if (idx >=3D 2 * buffer_size)=0A= idx =3D reset - 1;=0A= }=0A= @@ -362,24 +362,24 @@ malloc (size_t len)=0A= return (*mallocp)(len);=0A= =0A= /* Keep track of number of calls. */=0A= - catomic_increment (&calls[idx_malloc]);=0A= + atomic_fetch_add_relaxed (&calls[idx_malloc], 1);=0A= /* Keep track of total memory consumption for `malloc'. */=0A= - catomic_add (&total[idx_malloc], len);=0A= + atomic_fetch_add_relaxed (&total[idx_malloc], len);=0A= /* Keep track of total memory requirement. */=0A= - catomic_add (&grand_total, len);=0A= + atomic_fetch_add_relaxed (&grand_total, len);=0A= /* Remember the size of the request. */=0A= if (len < 65536)=0A= - catomic_increment (&histogram[len / 16]);=0A= + atomic_fetch_add_relaxed (&histogram[len / 16], 1);=0A= else=0A= - catomic_increment (&large);=0A= + atomic_fetch_add_relaxed (&large, 1);=0A= /* Total number of calls of any of the functions. */=0A= - catomic_increment (&calls_total);=0A= + atomic_fetch_add_relaxed (&calls_total, 1);=0A= =0A= /* Do the real work. */=0A= result =3D (struct header *) (*mallocp)(len + sizeof (struct header));= =0A= if (result =3D=3D NULL)=0A= {=0A= - catomic_increment (&failed[idx_malloc]);=0A= + atomic_fetch_add_relaxed (&failed[idx_malloc], 1);=0A= return NULL;=0A= }=0A= =0A= @@ -430,21 +430,21 @@ realloc (void *old, size_t len)=0A= }=0A= =0A= /* Keep track of number of calls. */=0A= - catomic_increment (&calls[idx_realloc]);=0A= + atomic_fetch_add_relaxed (&calls[idx_realloc], 1);=0A= if (len > old_len)=0A= {=0A= /* Keep track of total memory consumption for `realloc'. */=0A= - catomic_add (&total[idx_realloc], len - old_len);=0A= + atomic_fetch_add_relaxed (&total[idx_realloc], len - old_len);=0A= /* Keep track of total memory requirement. */=0A= - catomic_add (&grand_total, len - old_len);=0A= + atomic_fetch_add_relaxed (&grand_total, len - old_len);=0A= }=0A= =0A= if (len =3D=3D 0 && old !=3D NULL)=0A= {=0A= /* Special case. */=0A= - catomic_increment (&realloc_free);=0A= + atomic_fetch_add_relaxed (&realloc_free, 1);=0A= /* Keep track of total memory freed using `free'. */=0A= - catomic_add (&total[idx_free], real->length);=0A= + atomic_fetch_add_relaxed (&total[idx_free], real->length);=0A= =0A= /* Update the allocation data and write out the records if necessary= . */=0A= update_data (NULL, 0, old_len);=0A= @@ -457,26 +457,26 @@ realloc (void *old, size_t len)=0A= =0A= /* Remember the size of the request. */=0A= if (len < 65536)=0A= - catomic_increment (&histogram[len / 16]);=0A= + atomic_fetch_add_relaxed (&histogram[len / 16], 1);=0A= else=0A= - catomic_increment (&large);=0A= + atomic_fetch_add_relaxed (&large, 1);=0A= /* Total number of calls of any of the functions. */=0A= - catomic_increment (&calls_total);=0A= + atomic_fetch_add_relaxed (&calls_total, 1);=0A= =0A= /* Do the real work. */=0A= result =3D (struct header *) (*reallocp)(real, len + sizeof (struct head= er));=0A= if (result =3D=3D NULL)=0A= {=0A= - catomic_increment (&failed[idx_realloc]);=0A= + atomic_fetch_add_relaxed (&failed[idx_realloc], 1);=0A= return NULL;=0A= }=0A= =0A= /* Record whether the reduction/increase happened in place. */=0A= if (real =3D=3D result)=0A= - catomic_increment (&inplace);=0A= + atomic_fetch_add_relaxed (&inplace, 1);=0A= /* Was the buffer increased? */=0A= if (old_len > len)=0A= - catomic_increment (&decreasing);=0A= + atomic_fetch_add_relaxed (&decreasing, 1);=0A= =0A= /* Update the allocation data and write out the records if necessary. *= /=0A= update_data (result, len, old_len);=0A= @@ -508,16 +508,16 @@ calloc (size_t n, size_t len)=0A= return (*callocp)(n, len);=0A= =0A= /* Keep track of number of calls. */=0A= - catomic_increment (&calls[idx_calloc]);=0A= + atomic_fetch_add_relaxed (&calls[idx_calloc], 1);=0A= /* Keep track of total memory consumption for `calloc'. */=0A= - catomic_add (&total[idx_calloc], size);=0A= + atomic_fetch_add_relaxed (&total[idx_calloc], size);=0A= /* Keep track of total memory requirement. */=0A= - catomic_add (&grand_total, size);=0A= + atomic_fetch_add_relaxed (&grand_total, size);=0A= /* Remember the size of the request. */=0A= if (size < 65536)=0A= - catomic_increment (&histogram[size / 16]);=0A= + atomic_fetch_add_relaxed (&histogram[size / 16], 1);=0A= else=0A= - catomic_increment (&large);=0A= + atomic_fetch_add_relaxed (&large, 1);=0A= /* Total number of calls of any of the functions. */=0A= ++calls_total;=0A= =0A= @@ -525,7 +525,7 @@ calloc (size_t n, size_t len)=0A= result =3D (struct header *) (*mallocp)(size + sizeof (struct header));= =0A= if (result =3D=3D NULL)=0A= {=0A= - catomic_increment (&failed[idx_calloc]);=0A= + atomic_fetch_add_relaxed (&failed[idx_calloc], 1);=0A= return NULL;=0A= }=0A= =0A= @@ -563,7 +563,7 @@ free (void *ptr)=0A= /* `free (NULL)' has no effect. */=0A= if (ptr =3D=3D NULL)=0A= {=0A= - catomic_increment (&calls[idx_free]);=0A= + atomic_fetch_add_relaxed (&calls[idx_free], 1);=0A= return;=0A= }=0A= =0A= @@ -577,9 +577,9 @@ free (void *ptr)=0A= }=0A= =0A= /* Keep track of number of calls. */=0A= - catomic_increment (&calls[idx_free]);=0A= + atomic_fetch_add_relaxed (&calls[idx_free], 1);=0A= /* Keep track of total memory freed using `free'. */=0A= - catomic_add (&total[idx_free], real->length);=0A= + atomic_fetch_add_relaxed (&total[idx_free], real->length);=0A= =0A= /* Update the allocation data and write out the records if necessary. *= /=0A= update_data (NULL, 0, real->length);=0A= @@ -614,22 +614,22 @@ mmap (void *start, size_t len, int prot, int flags, i= nt fd, off_t offset)=0A= ? idx_mmap_a : prot & PROT_WRITE ? idx_mmap_w : idx_mmap_= r);=0A= =0A= /* Keep track of number of calls. */=0A= - catomic_increment (&calls[idx]);=0A= + atomic_fetch_add_relaxed (&calls[idx], 1);=0A= /* Keep track of total memory consumption for `malloc'. */=0A= - catomic_add (&total[idx], len);=0A= + atomic_fetch_add_relaxed (&total[idx], len);=0A= /* Keep track of total memory requirement. */=0A= - catomic_add (&grand_total, len);=0A= + atomic_fetch_add_relaxed (&grand_total, len);=0A= /* Remember the size of the request. */=0A= if (len < 65536)=0A= - catomic_increment (&histogram[len / 16]);=0A= + atomic_fetch_add_relaxed (&histogram[len / 16], 1);=0A= else=0A= - catomic_increment (&large);=0A= + atomic_fetch_add_relaxed (&large, 1);=0A= /* Total number of calls of any of the functions. */=0A= - catomic_increment (&calls_total);=0A= + atomic_fetch_add_relaxed (&calls_total, 1);=0A= =0A= /* Check for failures. */=0A= if (result =3D=3D NULL)=0A= - catomic_increment (&failed[idx]);=0A= + atomic_fetch_add_relaxed (&failed[idx], 1);=0A= else if (idx =3D=3D idx_mmap_w)=0A= /* Update the allocation data and write out the records if=0A= necessary. Note the first parameter is NULL which means=0A= @@ -667,22 +667,22 @@ mmap64 (void *start, size_t len, int prot, int flags,= int fd, off64_t offset)=0A= ? idx_mmap_a : prot & PROT_WRITE ? idx_mmap_w : idx_mmap_= r);=0A= =0A= /* Keep track of number of calls. */=0A= - catomic_increment (&calls[idx]);=0A= + atomic_fetch_add_relaxed (&calls[idx], 1);=0A= /* Keep track of total memory consumption for `malloc'. */=0A= - catomic_add (&total[idx], len);=0A= + atomic_fetch_add_relaxed (&total[idx], len);=0A= /* Keep track of total memory requirement. */=0A= - catomic_add (&grand_total, len);=0A= + atomic_fetch_add_relaxed (&grand_total, len);=0A= /* Remember the size of the request. */=0A= if (len < 65536)=0A= - catomic_increment (&histogram[len / 16]);=0A= + atomic_fetch_add_relaxed (&histogram[len / 16], 1);=0A= else=0A= - catomic_increment (&large);=0A= + atomic_fetch_add_relaxed (&large, 1);=0A= /* Total number of calls of any of the functions. */=0A= - catomic_increment (&calls_total);=0A= + atomic_fetch_add_relaxed (&calls_total, 1);=0A= =0A= /* Check for failures. */=0A= if (result =3D=3D NULL)=0A= - catomic_increment (&failed[idx]);=0A= + atomic_fetch_add_relaxed (&failed[idx], 1);=0A= else if (idx =3D=3D idx_mmap_w)=0A= /* Update the allocation data and write out the records if=0A= necessary. Note the first parameter is NULL which means=0A= @@ -722,33 +722,33 @@ mremap (void *start, size_t old_len, size_t len, int = flags, ...)=0A= if (!not_me && trace_mmap)=0A= {=0A= /* Keep track of number of calls. */=0A= - catomic_increment (&calls[idx_mremap]);=0A= + atomic_fetch_add_relaxed (&calls[idx_mremap], 1);=0A= if (len > old_len)=0A= {=0A= /* Keep track of total memory consumption for `malloc'. */=0A= - catomic_add (&total[idx_mremap], len - old_len);=0A= + atomic_fetch_add_relaxed (&total[idx_mremap], len - old_len);=0A= /* Keep track of total memory requirement. */=0A= - catomic_add (&grand_total, len - old_len);=0A= + atomic_fetch_add_relaxed (&grand_total, len - old_len);=0A= }=0A= /* Remember the size of the request. */=0A= if (len < 65536)=0A= - catomic_increment (&histogram[len / 16]);=0A= + atomic_fetch_add_relaxed (&histogram[len / 16], 1);=0A= else=0A= - catomic_increment (&large);=0A= + atomic_fetch_add_relaxed (&large, 1);=0A= /* Total number of calls of any of the functions. */=0A= - catomic_increment (&calls_total);=0A= + atomic_fetch_add_relaxed (&calls_total, 1);=0A= =0A= /* Check for failures. */=0A= if (result =3D=3D NULL)=0A= - catomic_increment (&failed[idx_mremap]);=0A= + atomic_fetch_add_relaxed (&failed[idx_mremap], 1);=0A= else=0A= {=0A= /* Record whether the reduction/increase happened in place. */= =0A= if (start =3D=3D result)=0A= - catomic_increment (&inplace_mremap);=0A= + atomic_fetch_add_relaxed (&inplace_mremap, 1);=0A= /* Was the buffer increased? */=0A= if (old_len > len)=0A= - catomic_increment (&decreasing_mremap);=0A= + atomic_fetch_add_relaxed (&decreasing_mremap, 1);=0A= =0A= /* Update the allocation data and write out the records if=0A= necessary. Note the first parameter is NULL which means=0A= @@ -783,19 +783,19 @@ munmap (void *start, size_t len)=0A= if (!not_me && trace_mmap)=0A= {=0A= /* Keep track of number of calls. */=0A= - catomic_increment (&calls[idx_munmap]);=0A= + atomic_fetch_add_relaxed (&calls[idx_munmap], 1);=0A= =0A= if (__glibc_likely (result =3D=3D 0))=0A= {=0A= /* Keep track of total memory freed using `free'. */=0A= - catomic_add (&total[idx_munmap], len);=0A= + atomic_fetch_add_relaxed (&total[idx_munmap], len);=0A= =0A= /* Update the allocation data and write out the records if=0A= necessary. */=0A= update_data (NULL, 0, len);=0A= }=0A= else=0A= - catomic_increment (&failed[idx_munmap]);=0A= + atomic_fetch_add_relaxed (&failed[idx_munmap], 1);=0A= }=0A= =0A= return result;=0A= diff --git a/manual/memory.texi b/manual/memory.texi=0A= index f69824841e5e352e8562f87b6c5dd4d96424f59f..2dfd09ea4aace004067e2e1d51c= 9e1292d1f7452 100644=0A= --- a/manual/memory.texi=0A= +++ b/manual/memory.texi=0A= @@ -354,7 +354,7 @@ this function is in @file{stdlib.h}.=0A= @c that's protected by list_lock; next_free is only modified while=0A= @c list_lock is held too. All other data members of an arena, as well=0A= @c as the metadata of the memory areas assigned to it, are only modified= =0A= -@c while holding the arena's mutex (fastbin pointers use catomic ops=0A= +@c while holding the arena's mutex (fastbin pointers use atomic ops=0A= @c because they may be modified by free without taking the arena's=0A= @c lock). Some reassurance was needed for fastbins, for it wasn't clear= =0A= @c how they were initialized. It turns out they are always=0A= @@ -383,7 +383,7 @@ this function is in @file{stdlib.h}.=0A= @c mutex_lock (arena lock) dup @asulock @aculock [returns locked]=0A= @c __get_nprocs ext ok @acsfd=0A= @c NARENAS_FROM_NCORES ok=0A= -@c catomic_compare_and_exchange_bool_acq ok=0A= +@c atomic_compare_and_exchange_bool_acq ok=0A= @c _int_new_arena ok @asulock @aculock @acsmem=0A= @c new_heap ok @acsmem=0A= @c mmap ok @acsmem=0A= @@ -397,7 +397,7 @@ this function is in @file{stdlib.h}.=0A= @c mutex_lock (list_lock) dup @asulock @aculock=0A= @c atomic_thread_fence_release ok=0A= @c mutex_unlock (list_lock) @aculock=0A= -@c catomic_decrement ok=0A= +@c atomic_fetch_add_relaxed ok=0A= @c reused_arena @asulock @aculock=0A= @c reads&writes next_to_use and iterates over arena next without guar= ds=0A= @c those are harmless as long as we don't drop arenas from the=0A= @@ -414,7 +414,7 @@ this function is in @file{stdlib.h}.=0A= @c get_max_fast ok=0A= @c fastbin_index ok=0A= @c fastbin ok=0A= -@c catomic_compare_and_exhange_val_acq ok=0A= +@c atomic_compare_and_exhange_val_acq ok=0A= @c malloc_printerr dup @mtsenv=0A= @c if we get to it, we're toast already, undefined behavior must have= =0A= @c been invoked before=0A= @@ -521,10 +521,10 @@ this function is in @file{stdlib.h}.=0A= @c chunk2mem dup ok=0A= @c free_perturb ok=0A= @c set_fastchunks ok=0A= -@c catomic_and ok=0A= +@c atomic_and ok=0A= @c fastbin_index dup ok=0A= @c fastbin dup ok=0A= -@c catomic_compare_and_exchange_val_rel ok=0A= +@c atomic_compare_and_exchange_val_rel ok=0A= @c chunk_is_mmapped ok=0A= @c contiguous dup ok=0A= @c prev_inuse ok=0A= @@ -706,7 +706,7 @@ The prototype for this function is in @file{stdlib.h}.= =0A= @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd= {} @acsmem{}}}=0A= @c __libc_free @asulock @aculock @acsfd @acsmem=0A= @c releasing memory into fastbins modifies the arena without taking=0A= -@c its mutex, but catomic operations ensure safety. If two (or more)=0A= +@c its mutex, but atomic operations ensure safety. If two (or more)=0A= @c threads are running malloc and have their own arenas locked when=0A= @c each gets a signal whose handler free()s large (non-fastbin-able)=0A= @c blocks from each other's arena, we deadlock; this is a more general= =0A= diff --git a/misc/tst-atomic.c b/misc/tst-atomic.c=0A= index 6d681a7bfdf4f48b4c04a073ebd480326dbd3cc8..4f9d2c1a46b363d346dbc2fa096= 2ae196844a43a 100644=0A= --- a/misc/tst-atomic.c=0A= +++ b/misc/tst-atomic.c=0A= @@ -393,117 +393,6 @@ do_test (void)=0A= }=0A= #endif=0A= =0A= -#ifdef catomic_compare_and_exchange_val_acq=0A= - mem =3D 24;=0A= - if (catomic_compare_and_exchange_val_acq (&mem, 35, 24) !=3D 24=0A= - || mem !=3D 35)=0A= - {=0A= - puts ("catomic_compare_and_exchange_val_acq test 1 failed");=0A= - ret =3D 1;=0A= - }=0A= -=0A= - mem =3D 12;=0A= - if (catomic_compare_and_exchange_val_acq (&mem, 10, 15) !=3D 12=0A= - || mem !=3D 12)=0A= - {=0A= - puts ("catomic_compare_and_exchange_val_acq test 2 failed");=0A= - ret =3D 1;=0A= - }=0A= -=0A= - mem =3D -15;=0A= - if (catomic_compare_and_exchange_val_acq (&mem, -56, -15) !=3D -15=0A= - || mem !=3D -56)=0A= - {=0A= - puts ("catomic_compare_and_exchange_val_acq test 3 failed");=0A= - ret =3D 1;=0A= - }=0A= -=0A= - mem =3D -1;=0A= - if (catomic_compare_and_exchange_val_acq (&mem, 17, 0) !=3D -1=0A= - || mem !=3D -1)=0A= - {=0A= - puts ("catomic_compare_and_exchange_val_acq test 4 failed");=0A= - ret =3D 1;=0A= - }=0A= -#endif=0A= -=0A= - mem =3D 24;=0A= - if (catomic_compare_and_exchange_bool_acq (&mem, 35, 24)=0A= - || mem !=3D 35)=0A= - {=0A= - puts ("catomic_compare_and_exchange_bool_acq test 1 failed");=0A= - ret =3D 1;=0A= - }=0A= -=0A= - mem =3D 12;=0A= - if (! catomic_compare_and_exchange_bool_acq (&mem, 10, 15)=0A= - || mem !=3D 12)=0A= - {=0A= - puts ("catomic_compare_and_exchange_bool_acq test 2 failed");=0A= - ret =3D 1;=0A= - }=0A= -=0A= - mem =3D -15;=0A= - if (catomic_compare_and_exchange_bool_acq (&mem, -56, -15)=0A= - || mem !=3D -56)=0A= - {=0A= - puts ("catomic_compare_and_exchange_bool_acq test 3 failed");=0A= - ret =3D 1;=0A= - }=0A= -=0A= - mem =3D -1;=0A= - if (! catomic_compare_and_exchange_bool_acq (&mem, 17, 0)=0A= - || mem !=3D -1)=0A= - {=0A= - puts ("catomic_compare_and_exchange_bool_acq test 4 failed");=0A= - ret =3D 1;=0A= - }=0A= -=0A= - mem =3D 2;=0A= - if (catomic_exchange_and_add (&mem, 11) !=3D 2=0A= - || mem !=3D 13)=0A= - {=0A= - puts ("catomic_exchange_and_add test failed");=0A= - ret =3D 1;=0A= - }=0A= -=0A= - mem =3D -21;=0A= - catomic_add (&mem, 22);=0A= - if (mem !=3D 1)=0A= - {=0A= - puts ("catomic_add test failed");=0A= - ret =3D 1;=0A= - }=0A= -=0A= - mem =3D -1;=0A= - catomic_increment (&mem);=0A= - if (mem !=3D 0)=0A= - {=0A= - puts ("catomic_increment test failed");=0A= - ret =3D 1;=0A= - }=0A= -=0A= - mem =3D 2;=0A= - if (catomic_increment_val (&mem) !=3D 3)=0A= - {=0A= - puts ("catomic_increment_val test failed");=0A= - ret =3D 1;=0A= - }=0A= -=0A= - mem =3D 17;=0A= - catomic_decrement (&mem);=0A= - if (mem !=3D 16)=0A= - {=0A= - puts ("catomic_decrement test failed");=0A= - ret =3D 1;=0A= - }=0A= -=0A= - if (catomic_decrement_val (&mem) !=3D 15)=0A= - {=0A= - puts ("catomic_decrement_val test failed");=0A= - ret =3D 1;=0A= - }=0A= -=0A= /* Tests for C11-like atomics. */=0A= mem =3D 11;=0A= if (atomic_load_relaxed (&mem) !=3D 11 || atomic_load_acquire (&mem) != =3D 11)=0A= diff --git a/sysdeps/hppa/dl-fptr.c b/sysdeps/hppa/dl-fptr.c=0A= index 97882a8106a719642b2778d3ca8a69ef202cce2d..0562467d6f79f76b78b2cf169fd= d059a993296d3 100644=0A= --- a/sysdeps/hppa/dl-fptr.c=0A= +++ b/sysdeps/hppa/dl-fptr.c=0A= @@ -41,10 +41,8 @@=0A= # error "ELF_MACHINE_LOAD_ADDRESS is not defined."=0A= #endif=0A= =0A= -#ifndef COMPARE_AND_SWAP=0A= -# define COMPARE_AND_SWAP(ptr, old, new) \=0A= - (catomic_compare_and_exchange_bool_acq (ptr, new, old) =3D=3D 0)=0A= -#endif=0A= +#define COMPARE_AND_SWAP(ptr, old, new) \=0A= + (atomic_compare_and_exchange_bool_acq (ptr, new, old) =3D=3D 0)=0A= =0A= ElfW(Addr) _dl_boot_fptr_table [ELF_MACHINE_BOOT_FPTR_TABLE_LEN];=0A= =0A=