From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 124852 invoked by alias); 26 Feb 2018 12:30:45 -0000 Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org Received: (qmail 121696 invoked by uid 89); 26 Feb 2018 12:30:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=yi X-HELO: EUR01-DB5-obe.outbound.protection.outlook.com Received: from mail-db5eur01on0040.outbound.protection.outlook.com (HELO EUR01-DB5-obe.outbound.protection.outlook.com) (104.47.2.40) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 26 Feb 2018 12:30:32 +0000 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Szabolcs.Nagy@arm.com; Received: from [10.2.206.230] (217.140.96.140) by VI1PR0802MB2493.eurprd08.prod.outlook.com (2603:10a6:800:b4::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.527.15; Mon, 26 Feb 2018 12:30:21 +0000 Cc: nd@arm.com Subject: Re: GCC interpretation of C11 atomics (DR 459) To: Ruslan Nikolaev , "gcc@gcc.gnu.org" References: <1615980330.4453149.1519617655582.ref@mail.yahoo.com> <1615980330.4453149.1519617655582@mail.yahoo.com> From: Szabolcs Nagy Message-ID: Date: Mon, 26 Feb 2018 12:30:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux aarch64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: <1615980330.4453149.1519617655582@mail.yahoo.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-ClientProxiedBy: CWLP265CA0016.GBRP265.PROD.OUTLOOK.COM (2603:10a6:401:10::28) To VI1PR0802MB2493.eurprd08.prod.outlook.com (2603:10a6:800:b4::23) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: eccbcb41-6c0e-4b4b-2692-08d57d14b415 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(2017052603307)(7153060)(7193020);SRVR:VI1PR0802MB2493; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0802MB2493;3:dS42jlYTgNdhohyiz1mDLy9Qh266VFlabv7rB3LzEH7ou+3PsehOp6jpCWWLbDHZ77o3AdHxaz11MzCVM84hENZtd3SK1NdGHmieiww2v1/zt6NprU7c/OrZS03iv960Tw1/usSj9IcMyBWEwFJSimQV++B3qyOlk31KBLMaCj57RaC13JdQv48vFC3sV4rgDbHp7aYWTddnhkgdZj2ormk9INVzlpeMNdDdw10AO6fQ7Vbc7VcH7qctpGyf3KD/;25:7yjK3gzpc5w7n77xoLuL/l9LK9FnT6US6HIg0MIMdkgrlntCqpRZxdQXbYo56K1GU0tzVej6TsebV7vIMHtbSridVUZaun0E0DM3HA9eXv4JuwQmLVC0jtxSirO8qxTXMiPjA9J7UsKa0bHVZhPi/TCdywZ2ulMo3XzmZZB2s8uOKCGGY0rs1z2FLF6Hinxye/0NSdSYS+LWna7lEi7J7lmVMjeFMec1to9+W7H+RGdakedmW0pk+p/7SzmT+7r/FOStQF8/sdomrEBCncUF1nLyyt9OcR5OJGJ6vKThqCiv9744J7UEnOgJ1fi+A4CGe+R9YF0bR6BhzurF/oLUaA==;31:9XNZU9zQytxit+VFzIH3rSx713yQjLVsBPZ/V/67iQxjt3axEU86UTbyiwez9dXUFXtR3WwtDhstKQXUk3fu1U7h9ymOvbpyPLGsXzE/ZG66ceQYlc7OlGCimABXdvmFLkEyBBFEviM2zhBqnAN3svHCeZDmVtRsVDMQNNE0TnQFjtCHnOV/XQEd77EPEPeGImVOrd5C3kp+IpAojbEm8DC5cxQtnDYiK+0Lx3AwbIY= X-MS-TrafficTypeDiagnostic: VI1PR0802MB2493: NoDisclaimer: True X-Microsoft-Exchange-Diagnostics: 1;VI1PR0802MB2493;20:LV2YFyytNnKMeb0lopVhPVx6ig4NKXW3Gs6Mt4Csy1M4L/1sZAHpMVHjH+WDUkuGy+lubFEG5evgucUdbzyCZXjZOEE16l9IjfEfTc/Vcon3W8gDPBBa1r3/47KGRbax3LNvgS3xDmPsWsI9dVB7b6p6WngnH17zjLHcimFcBA4=;4:hK27+e7R4SpN8KtJZZ2lUloYMEWbw6+OTBRQfftija6uucHLMMh8EUDJ9Ffl+P8NEtBKofot07kPHmgk94pT4LNUGRzSL6lxlHITfzltLsWIAi1A3TSYBCH8z6nov8sU5ySgtgy8pR6tOvFrhSbwmV1OBfwmglLE9JAKpFprevybugIat+Bp4c1HxlsMmZnf04EoxEfPnjMTCNT42PO6X0c/AKUhQ7tXrA+kzl+U9y5X7L3PFa4TODx9Njrf1nOT8mOzOu41Aj/eO9TTJ0HD2A== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(8211001083)(6040501)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(3231220)(944501161)(52105095)(10201501046)(6055026)(6041288)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(6072148)(201708071742011);SRVR:VI1PR0802MB2493;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0802MB2493; X-Forefront-PRVS: 05954A7C45 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6049001)(376002)(396003)(39380400002)(39860400002)(346002)(366004)(189003)(199004)(66066001)(106356001)(52146003)(23676004)(2486003)(52116002)(64126003)(31686004)(67846002)(36756003)(50466002)(229853002)(2501003)(72206003)(7736002)(2950100002)(6666003)(316002)(8676002)(76176011)(8936002)(5660300001)(81156014)(81166006)(26005)(16526019)(77096007)(386003)(305945005)(53546011)(6116002)(3846002)(2870700001)(2906002)(53936002)(6246003)(58126008)(25786009)(39060400002)(4326008)(110136005)(105586002)(6486002)(68736007)(16576012)(65826007)(478600001)(65806001)(47776003)(31696002)(65956001)(86362001)(97736004);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0802MB2493;H:[10.2.206.230];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; Received-SPF: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjA4MDJNQjI0OTM7MjM6cGFQbVBXTnVvb2VTSkc5ZTd1NlVpMUVG?= =?utf-8?B?VDdQZDJqS3VZeDhFQ2J5N2dCazArdjZPeTZDVWx6TXEwQmJ3TENPNzZ2L3la?= =?utf-8?B?NlpyUzJzYXF1ZFVWVHFCWW9MUGJtN2pDSTNzay9tdE5aRnM2TUczUTRDYWhX?= =?utf-8?B?bWRlMlFHRGlsM3ZtdDBhQmJnTElUUTFSR2RkS0doVkdDdVRrOTVVeDdxT3Fv?= =?utf-8?B?TXJ6Y21GR3MxS2NzZTdQbUlkcGZ5VEF1ZFhTR0E1RVc3ajJRVHBPd3Q0bFRF?= =?utf-8?B?SHROdmZldE9CdXB0dnM1OWFMVnJ6SUhVQXpMMDN4MzNteE9rWjVaVENFTG0w?= =?utf-8?B?V0RwZ2RmZys5UXhWLzNwcXJsU1RzUmV4U2laYlMvNU9QaGVhOFh5emluR2ZB?= =?utf-8?B?d1lNNDRsQ242K0VKa3dKVWUxdHc3M2ZrcXRneTlkUVVDOXVKQmZ4Tm4yb09x?= =?utf-8?B?SEFSa0FKeTBqZU93czN6ekpoeUhiSXlJQzRFYXc5YXhMdTRVa0ZURUdWZzht?= =?utf-8?B?amZrS1lIdWFrWldxWEEveHlyOThUY0Y0QVo3YjJRUHI1ak5oTXF4OHZNT3pT?= =?utf-8?B?U1NHWGxuZVBZM2VGY3hTVWVXTnh0aW1aWGd2azdvNGI2R0NLMDhqWUlBZjNn?= =?utf-8?B?MC9hY0l5MUdNTmxRb3krbWhwUjFxeSttY2JDK1FQVlVjL3dxWFA1a0NRYjRO?= =?utf-8?B?VXh5WC9jSW92bmU1UzdDK3N3V1JLZGtVM0p6N2lYSTIvb0F2SEIrVS81V0lL?= =?utf-8?B?blZQS1JMZW1aWGR6ckE2dFFiVElYdCtsajBYMmNBR29HcXo2UUpGRnJKTkpi?= =?utf-8?B?Nk5VNG1ZRlFraWQ3NS9CT1FuOERpU3ZiY1h2MlVxSW40OUJob3pzNDhpcFZw?= =?utf-8?B?TTQ1Q0VHL0xZSHF0c2ZNOTNPODhkNGN0T0RvUDhOcHBzb1BkNFU2eC8rdUw2?= =?utf-8?B?NGhQYjRRNWI1LzFhU3ZUTEluTmVpUlVLRkVDajNYbzhwNlY1aUpYYkZIWVFn?= =?utf-8?B?Q21Scm5YQnpnWWRFL1ZVKzFOVkZkWkV1WXhSdkxkYTZablNhd2dLUEtaaGQw?= =?utf-8?B?ck5NVi90VUwrNHcrNVg0RzZpZkpBcmVRaGxUQ2N0dmYrVUNLTHF0anZMRVMz?= =?utf-8?B?ajhRNVo5b0drQ1JmbEpyQTEyZjYrM3lGMmJlUTRibG04VFl2L0JTWm9nVkY1?= =?utf-8?B?TFEwTXFhU1hXdW5SNkxCSkE1TFpuMjNjSE42ejRlWGxnaDlLdnVBeE80NlE1?= =?utf-8?B?S3krQmNaUkNtc05rTXZSdFZ5MlFETzBPMkN3YnV4VVoyNHFINC92ZkFYZzhQ?= =?utf-8?B?TTFMWXRHZllyUW5OOWphM0xNOGM5b0dvZDNlQi9GQmZFYWxmY0gxNnRaMGRU?= =?utf-8?B?S3ZRMmNDZElHMG5NMUlBWEdXNTkvSFlEUE12QytiNHdpSXlPNkxQU0VkUTY3?= =?utf-8?B?Q3Q3akRndVJXNE5oNDdpc21LOEJHS0xQVTJnN3lxTTF3aHAyQ0xJOWNubE80?= =?utf-8?B?dHFmcTFIeEs5Tk05QkJiUDZjOG1PQ21NcnErQnB5SkY2RXo1bDZONFVMb3cv?= =?utf-8?B?USs0L2hZdXcrTXBVWTdadDdibTZXMkdHTjNuY29JNzZpR0lNUXZJcXhndG9n?= =?utf-8?B?RGlRejdINCt3ZWRFaDdCOG5obkV2akZJME4zdnZHMHVSMmtnL0ZQQ0MySjBV?= =?utf-8?B?dlJxQnI3Vk03QjYrQkpuKzlrck02b0g2Um9zRTExTWhzdXF5d013aDRjMWs3?= =?utf-8?B?LzI3bnBMeVRNTG4yejcrdGVTeVYrcmpEYWN3cU4wYlhPSDBSaWFibWdsNDNt?= =?utf-8?B?Ymd2SE5oa1NBSkVRUHlPMUEzL0J6eVBNVGVXSlBudzZkbXg4a3NZYzVFVWVK?= =?utf-8?B?cDZqZFF2R3ZzQVk5dklCNGs3KzJnNEdMa21aMjJhUnRSRHhKRGZjdUJOdkYr?= =?utf-8?B?US9EcDJ2RStvdVE9PQ==?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0802MB2493;6:eCoMyKOOiosN4ZDeQvB/YOrQnbwuFkCBmx6p+Guf/TyZPTodLv3bdvGXXgTYFvZz/rU5qd4X6QanApapT0F7Nyp8N/D33lxauzRJBnkwir9LSFZG6Mx6bELxoVn7F+/sWnSwVNxsOd+jmht4Nxtn42/eSg97wKZBFqqus6Gcig78E3umFxuJygmpZCmVY5SL0aQai/LFNWMr76g+nLL8+kRJlG+DoFN02VAvoFg3wqIsmlp9aOf+rVfbK2nLMLksgryY9k+RRSpNB59kM6PDBAMErQXwncGakZH4HUaQMSkzeZjB7BuldKZR5jNruQpoog3AMCq3SJk7zi/6vO4oX2CaYG43DFILCX2IGa1gKvA=;5:ghRMkO1s0G6eRZzQSXep/LE05H//qf/U00evMNbbHMWOex3QKqvXq4zv7JeW+zerZKtuPtSSOMUOEnjcdkHh4EYdL03caKP48UgRjuoYhUcvLUmosQ9Igtl1bRewSfGhojzxDWFCMBx3wGQrnuTyXlWOs13xSRxK0cbJoyy8Wok=;24:1P2EYWYlJgPaiz1BNtJfo5mlje2IkowBP2NCs28CnUihq9CBPN7tEnXZlawVxz83Uu16+Bs6clIWELWsQXsqV57jpxOht0MRzOZhsZOoJ94=;7:KSbwxM8/3A3WZ7jTF/E0LzizW23WczOem8jukKyDpN0dKP9tvaK9UhHNkwFkNEQdnOeuxlxd6NETkvthFigUxkArjZIIcLyCRT/0cGdGMyJU3z+bWRxI2gUHgbtzI/TXRqzbEbhxWP9BQtUSl0Pv2uAfcqpr90D4GOwJbYv0eywB6mvxunma6ujp+lJVwk2xYns8zmBw/NtBQi/bMFQtcdKGYPqBDhoWnp5PlkHHcrt9cIwPqRuqa9sCZiuhZBHE SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Feb 2018 12:30:21.4864 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: eccbcb41-6c0e-4b4b-2692-08d57d14b415 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2493 X-IsSubscribed: yes X-SW-Source: 2018-02/txt/msg00189.txt.bz2 On 26/02/18 04:00, Ruslan Nikolaev via gcc wrote: > 1. Not consistent with clang/llvm which completely supports double-width atomics for arm32, arm64, x86 and x86-64 making it possible to write portable code (w/o specific extensions or assembly code) across all these architectures (which is finally possible with C11!) this should be reported as a bug against clang. there is no abi guarantee that double-width atomics will be able to synchronize with code in other modules, you have to introduce a new abi to do this whatever that takes (new elf flag, new dynamic linker name,..). > 4. atomic_load can be implemented using read-modify-write as it is the only option for x86-64 and arm64 (see below). > no, it can't be. >      [..]  The actual nature of read-only memory and how it can be used are outside the scope of the standard, so there is nothing to prevent atomic_load from being implemented as a read-modify-write operation. > rmw load is only valid if the implementation can guarantee that atomic objects are never read-only. current implementations on linux (including clang) don't do that, so an rmw load can observably break conforming c code: a static global const object is placed in .rodata section and thus rmw on it is a crash at runtime contrary to c standard requirements. on an aarch64 machine clang miscompiles this code: $ cat a.c #include static const _Atomic struct S {long i,j;} x; int f(const _Atomic struct S *p) { struct S y = *p; return y.i; } int main() { return f(&x); } $ gcc a.c -latomic $ ./a.out $ clang a.c -latomic $ ./a.out Segmentation fault (core dumped)