From nobody Sat Oct 31 10:06:32 2026 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4jGtsh6Y4Sz6yLBf for ; Sat, 31 Oct 2026 10:06:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4jGtsh57T2z4cdb for ; Sat, 31 Oct 2026 10:06:32 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793441192; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Jh7WfdZ/oBAVkuQLr4zj9Fw1xUQ5l3SBejs8P2fe6fI=; b=ByNFqBVhas+GYsqwoeZmgf4CqdKtshi3YGptDJqclJuIlFVgEuJu4YswI+bgLyfL/EWFHZ 4/rxrq843vKXH30SKOtxSCExdL3Ye+Z6uPwTttZkoI/7g8r1fSqzULcTyI75X/z5ja5jT6 P5rR4H+buI/SCMglg0GLOnryXIm5cOE4IMofcfhGqMgwcxRO6bp6L0W9LzwT16IO2Kjlj3 BYU/PDO0PmgoxhaO+774XDp24b4j8edoKhzcIKdUl6RrlWUTL3mKg0bqJaGxLLTiyTmRg3 y/UlBnBih9AuJqwvacXxLFSZDzTE4v4oACAo5nNFjFhHCfJSQHrskoVGuOWhSA== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1793441192; b=NMvOz7+pefB53qiJ5AO6BowUn1En0gvA7QBJUp8aAC6tAsnYi1CgpipgY6sq/KomB9OpZ5 lRk0oolBRHk/JTnYtdpPrt9L0CdwcCCjmfyNRZ4RVEbwWgcmAOybeoYx99NUWdj2ggs8uO 9RFN8c0gZVoGTuZZCdNHOOqEGuqd4Qc/aJCuk0tCiSI+OoMrr9XcwChTci9UG/DjzkgkYS ENvY/ScCw976z/MROeNde4/AJynJ8FXTnuKY3WTaVhVVVwBUPXZQJ6NPZVEEHtGfaOfD6G jQGuMW4KcQ26kUM2IPT7bGT+iFHVvsaxE2D1WuRa0rQ7+SltYhtELqtLmSOoDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793441192; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Jh7WfdZ/oBAVkuQLr4zj9Fw1xUQ5l3SBejs8P2fe6fI=; b=R4ZgBTJ18VuC47TJcnhd08DYy/W9aOs4y4hMHQB2jQeaOON++V1R+Vp3gchAZKB+Qy+BTQ 1Khf1E69tH8o3xXPMM3TbfRIxQx2gsiCL6vwEjgHxkx/23nQpwbO+ETlkK8EVpe/vTbvZP mpIC75zEaUFHjfw6lGNvvbqNKQmaXPj4nipgLI4Zkkpd7s8NU8ep0tzn2hpd4Jj1VOz6/u DUPNpt2GmAlk7CHT3a+4MUGO0mRa/VL9mSK1usdHZILT9pDDK4yWo3RKjtVrJNqQmgEbXF dQank1UYp0EWtHWKOfA8Y14fAdUpUSRPgvjvZOtRvL5g+WPa5ER1+/z1L0QjjQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4jGtsh4LDjz18Rp for ; Sat, 31 Oct 2026 10:06:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3b695 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 31 Oct 2026 10:06:32 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Faraz Vahedi From: Faraz Vahedi Subject: git: 650fea6abff7 - stable/15 - libc: Reorder atomic operations to match ISO C standard List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org List-Id: Commits to the stable branches of the FreeBSD src repository List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kfv X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 650fea6abff7640a343e678b0fd343e4051bc333 Auto-Submitted: auto-generated Date: Sat, 31 Oct 2026 10:06:32 +0000 Message-Id: <6ae5bda8.3b695.7bf12f8d@gitrepo.freebsd.org> The branch stable/15 has been updated by kfv: URL: https://cgit.FreeBSD.org/src/commit/?id=650fea6abff7640a343e678b0fd343e4051bc333 commit 650fea6abff7640a343e678b0fd343e4051bc333 Author: Faraz Vahedi AuthorDate: 2026-05-02 03:40:27 +0000 Commit: Faraz Vahedi CommitDate: 2026-10-31 10:03:30 +0000 libc: Reorder atomic operations to match ISO C standard Reorder definitions of specified generic operations on atomic types so they follow the sequence in ISO/IEC 9899:2024 ยง7.17.7: 1. `atomic_store` 2. `atomic_load` 3. `atomic_exchange` 4. `atomic_compare_exchange` 5. `atomic_fetch` This aligns the header layout with the standard, making it easier to cross-check against the normative text and maintain consistency with the rest of the header. The behaviour of the macros remains unchanged; this is purely a reorganisation and documentation improvement. Signed-off-by: Faraz Vahedi Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/2185 (cherry picked from commit cb88e7b8cdd6b4c707e47abee4ba8541d9fccea6) --- sys/sys/stdatomic.h | 100 ++++++++++++++++++++++++++-------------------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/sys/sys/stdatomic.h b/sys/sys/stdatomic.h index 135001a1f82e..bbdd196515e0 100644 --- a/sys/sys/stdatomic.h +++ b/sys/sys/stdatomic.h @@ -242,6 +242,12 @@ typedef _Atomic(__uintmax_t) atomic_uintmax_t; */ #if defined(__CLANG_ATOMICS) +#define atomic_store_explicit(object, desired, order) \ + __c11_atomic_store(object, desired, order) +#define atomic_load_explicit(object, order) \ + __c11_atomic_load(object, order) +#define atomic_exchange_explicit(object, desired, order) \ + __c11_atomic_exchange(object, desired, order) #define atomic_compare_exchange_strong_explicit(object, expected, \ desired, success, failure) \ __c11_atomic_compare_exchange_strong(object, expected, desired, \ @@ -250,23 +256,23 @@ typedef _Atomic(__uintmax_t) atomic_uintmax_t; desired, success, failure) \ __c11_atomic_compare_exchange_weak(object, expected, desired, \ success, failure) -#define atomic_exchange_explicit(object, desired, order) \ - __c11_atomic_exchange(object, desired, order) #define atomic_fetch_add_explicit(object, operand, order) \ __c11_atomic_fetch_add(object, operand, order) -#define atomic_fetch_and_explicit(object, operand, order) \ - __c11_atomic_fetch_and(object, operand, order) -#define atomic_fetch_or_explicit(object, operand, order) \ - __c11_atomic_fetch_or(object, operand, order) #define atomic_fetch_sub_explicit(object, operand, order) \ __c11_atomic_fetch_sub(object, operand, order) +#define atomic_fetch_or_explicit(object, operand, order) \ + __c11_atomic_fetch_or(object, operand, order) #define atomic_fetch_xor_explicit(object, operand, order) \ __c11_atomic_fetch_xor(object, operand, order) -#define atomic_load_explicit(object, order) \ - __c11_atomic_load(object, order) -#define atomic_store_explicit(object, desired, order) \ - __c11_atomic_store(object, desired, order) +#define atomic_fetch_and_explicit(object, operand, order) \ + __c11_atomic_fetch_and(object, operand, order) #elif defined(__GNUC_ATOMICS) +#define atomic_store_explicit(object, desired, order) \ + __atomic_store_n(object, desired, order) +#define atomic_load_explicit(object, order) \ + __atomic_load_n(object, order) +#define atomic_exchange_explicit(object, desired, order) \ + __atomic_exchange_n(object, desired, order) #define atomic_compare_exchange_strong_explicit(object, expected, \ desired, success, failure) \ __atomic_compare_exchange_n(object, expected, \ @@ -275,37 +281,23 @@ typedef _Atomic(__uintmax_t) atomic_uintmax_t; desired, success, failure) \ __atomic_compare_exchange_n(object, expected, \ desired, 1, success, failure) -#define atomic_exchange_explicit(object, desired, order) \ - __atomic_exchange_n(object, desired, order) #define atomic_fetch_add_explicit(object, operand, order) \ __atomic_fetch_add(object, operand, order) -#define atomic_fetch_and_explicit(object, operand, order) \ - __atomic_fetch_and(object, operand, order) -#define atomic_fetch_or_explicit(object, operand, order) \ - __atomic_fetch_or(object, operand, order) #define atomic_fetch_sub_explicit(object, operand, order) \ __atomic_fetch_sub(object, operand, order) +#define atomic_fetch_or_explicit(object, operand, order) \ + __atomic_fetch_or(object, operand, order) #define atomic_fetch_xor_explicit(object, operand, order) \ __atomic_fetch_xor(object, operand, order) -#define atomic_load_explicit(object, order) \ - __atomic_load_n(object, order) -#define atomic_store_explicit(object, desired, order) \ - __atomic_store_n(object, desired, order) +#define atomic_fetch_and_explicit(object, operand, order) \ + __atomic_fetch_and(object, operand, order) #else #define __atomic_apply_stride(object, operand) \ (((__typeof__((object)->__val))0) + (operand)) -#define atomic_compare_exchange_strong_explicit(object, expected, \ - desired, success, failure) __extension__ ({ \ - __typeof__(expected) __ep = (expected); \ - __typeof__(*__ep) __e = *__ep; \ - (void)(success); (void)(failure); \ - (_Bool)((*__ep = __sync_val_compare_and_swap(&(object)->__val, \ - __e, desired)) == __e); \ -}) -#define atomic_compare_exchange_weak_explicit(object, expected, \ - desired, success, failure) \ - atomic_compare_exchange_strong_explicit(object, expected, \ - desired, success, failure) +#define atomic_store_explicit(object, desired, order) \ + ((void)atomic_exchange_explicit(object, desired, order)) +#define atomic_load_explicit(object, order) \ + ((void)(order), __sync_fetch_and_add(&(object)->__val, 0)) #if __has_builtin(__sync_swap) /* Clang provides a full-barrier atomic exchange - use it if available. */ #define atomic_exchange_explicit(object, desired, order) \ @@ -324,23 +316,31 @@ __extension__ ({ \ __sync_synchronize(); \ __sync_lock_test_and_set(&(__o)->__val, __d); \ }) +#define atomic_compare_exchange_strong_explicit(object, expected, \ + desired, success, failure) __extension__ ({ \ + __typeof__(expected) __ep = (expected); \ + __typeof__(*__ep) __e = *__ep; \ + (void)(success); (void)(failure); \ + (_Bool)((*__ep = __sync_val_compare_and_swap(&(object)->__val, \ + __e, desired)) == __e); \ +}) +#define atomic_compare_exchange_weak_explicit(object, expected, \ + desired, success, failure) \ + atomic_compare_exchange_strong_explicit(object, expected, \ + desired, success, failure) #endif #define atomic_fetch_add_explicit(object, operand, order) \ ((void)(order), __sync_fetch_and_add(&(object)->__val, \ __atomic_apply_stride(object, operand))) -#define atomic_fetch_and_explicit(object, operand, order) \ - ((void)(order), __sync_fetch_and_and(&(object)->__val, operand)) -#define atomic_fetch_or_explicit(object, operand, order) \ - ((void)(order), __sync_fetch_and_or(&(object)->__val, operand)) #define atomic_fetch_sub_explicit(object, operand, order) \ ((void)(order), __sync_fetch_and_sub(&(object)->__val, \ __atomic_apply_stride(object, operand))) +#define atomic_fetch_or_explicit(object, operand, order) \ + ((void)(order), __sync_fetch_and_or(&(object)->__val, operand)) #define atomic_fetch_xor_explicit(object, operand, order) \ ((void)(order), __sync_fetch_and_xor(&(object)->__val, operand)) -#define atomic_load_explicit(object, order) \ - ((void)(order), __sync_fetch_and_add(&(object)->__val, 0)) -#define atomic_store_explicit(object, desired, order) \ - ((void)atomic_exchange_explicit(object, desired, order)) +#define atomic_fetch_and_explicit(object, operand, order) \ + ((void)(order), __sync_fetch_and_and(&(object)->__val, operand)) #endif /* @@ -351,28 +351,28 @@ __extension__ ({ \ */ #ifndef _KERNEL +#define atomic_store(object, desired) \ + atomic_store_explicit(object, desired, memory_order_seq_cst) +#define atomic_load(object) \ + atomic_load_explicit(object, memory_order_seq_cst) +#define atomic_exchange(object, desired) \ + atomic_exchange_explicit(object, desired, memory_order_seq_cst) #define atomic_compare_exchange_strong(object, expected, desired) \ atomic_compare_exchange_strong_explicit(object, expected, \ desired, memory_order_seq_cst, memory_order_seq_cst) #define atomic_compare_exchange_weak(object, expected, desired) \ atomic_compare_exchange_weak_explicit(object, expected, \ desired, memory_order_seq_cst, memory_order_seq_cst) -#define atomic_exchange(object, desired) \ - atomic_exchange_explicit(object, desired, memory_order_seq_cst) #define atomic_fetch_add(object, operand) \ atomic_fetch_add_explicit(object, operand, memory_order_seq_cst) -#define atomic_fetch_and(object, operand) \ - atomic_fetch_and_explicit(object, operand, memory_order_seq_cst) -#define atomic_fetch_or(object, operand) \ - atomic_fetch_or_explicit(object, operand, memory_order_seq_cst) #define atomic_fetch_sub(object, operand) \ atomic_fetch_sub_explicit(object, operand, memory_order_seq_cst) +#define atomic_fetch_or(object, operand) \ + atomic_fetch_or_explicit(object, operand, memory_order_seq_cst) #define atomic_fetch_xor(object, operand) \ atomic_fetch_xor_explicit(object, operand, memory_order_seq_cst) -#define atomic_load(object) \ - atomic_load_explicit(object, memory_order_seq_cst) -#define atomic_store(object, desired) \ - atomic_store_explicit(object, desired, memory_order_seq_cst) +#define atomic_fetch_and(object, operand) \ + atomic_fetch_and_explicit(object, operand, memory_order_seq_cst) #endif /* !_KERNEL */ /*