From nobody Sat Jun 20 00:24:58 2026 X-Original-To: dev-commits-src-main@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 4ghwG25dYRz6hFCb for ; Sat, 20 Jun 2026 00:24:58 +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 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ghwG22RPlz3J0v for ; Sat, 20 Jun 2026 00:24:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1781915098; 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=9EHuLzbfWTlMRRFSvgV9k5N9uNBzCMYSAtO9AIktWRY=; b=oRd2mI8uw2j5A7TWwY/k22J5xm5kfvcNe4mx8l0eu13281jsjPbq7ObErbYtUkiBumLqC7 6XZ+sD4GV6zNxAsIrCo0QGUmsYEMxKlaDUkpiz9d5lkIkDIp/V7OUuTBQrmapld3VOHjON 4dDXusnwcDkHFSQEvp/3AT6MeY1PxgriifYpQBC2aVAQw5bqzYSNsdTduilJXD+q99f7NL 8AeUsSrrKO8U81OU89aRffSXz5MRWgAyiNG1uA7ZwJs5lA7QRK5NRNF/JeK70oyonKKnfq y+W8CsBQu0xdOFn06Nkoz6LOqBFsBkY33pageJ44+fRTZRbQZ/KXN4wgbBLT/g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1781915098; a=rsa-sha256; cv=none; b=T+jbWyJHB7enPGdCdbz9HSDC+F6h6E+lw9jEFrmCaJ7vKW+iJI1Y0nG6QQjd7Vbv5PeLCZ gCkse1afu4qc5Wsocs5MF0ta5M9FIMz5fuy1F3d6+q85WhoUFx3S+VvMVd1N+HJBJqNmcS 7HOxvyWxjUX8wn3KguEA8lSFNJqUbABcIImWCIwf2XAPKZXby3TlltFcTHMLcOvZwzpeq+ AIFoB5ZvI1nvgBPkjE6eRb12McOH4WMGxhxZ6E5QuHKQwpe9Fq2oS8lLgp+acYPvBRFDng O4D6sMwUTnhTYIXnZv6tBTBG/C0LXoPT5vPoA+A3nF7220W0ByTE2C7wsibfxQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1781915098; 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=9EHuLzbfWTlMRRFSvgV9k5N9uNBzCMYSAtO9AIktWRY=; b=mUzqKDfCuznkmv01ZQJeb4fO1LDNHi2z4mJmZUNmFWrotSC0LR8F/K1Y75FQQo7Ek02vKu Y0NMPPxLVcDCKedmkpzscROfL5Quben1+RO7RbfdlmV0GTo2YZLSswnH/cFUyshKa9rqu4 Bvg2nxc23vuDJ2PvFNLpP2YprzVwnENQIK13vIkiRaMfBVBXc3/xo0MRG1nmDEjdd72kyn 75kTHwcMZmYoMO9LevbAu2CDJ2P4Yjd0aYhgI3L0yAvtzCEoK33YhaYSTdt7Q3PZSMpjXb jYe/XolF2WnWf6aNmjm/2095VvtvdqNSkxWUfgDWRuvNPXTyz1GYEoyR2A5SAw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4ghwG21KTgz173C for ; Sat, 20 Jun 2026 00:24:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 23d56 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 20 Jun 2026 00:24:58 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Faraz Vahedi From: Warner Losh Subject: git: 26bf9fc3a402 - main - libc: Fix GCC pointer semantics for atomic_fetch_add/sub List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: 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: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 26bf9fc3a40275a7aca0ce1809751a90c84b643a Auto-Submitted: auto-generated Date: Sat, 20 Jun 2026 00:24:58 +0000 Message-Id: <6a35ddda.23d56.711c33d6@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=26bf9fc3a40275a7aca0ce1809751a90c84b643a commit 26bf9fc3a40275a7aca0ce1809751a90c84b643a Author: Faraz Vahedi AuthorDate: 2026-05-08 02:54:23 +0000 Commit: Warner Losh CommitDate: 2026-06-20 00:23:29 +0000 libc: Fix GCC pointer semantics for atomic_fetch_add/sub Correct the GCC implementation of `atomic_fetch_add_explicit()` and `atomic_fetch_sub_explicit()` for atomic pointer types. The previous implementation passed the operand directly to the builtins. For pointer objects, this could result in raw byte-wise address arithmetic rather than the required C atomic pointer semantics, where the operand is interpreted as a `ptrdiff_t` element count. As a result, operations such as `atomic_fetch_sub_explicit(&p, 2, ...)` could produce an incorrect post-operation pointer value. Fix this by applying pointer scaling in the GCC path before invoking the builtin, mirroring the existing legacy fallback implementation. Pointer operands are now scaled by the size of the pointed-to type, while integer atomic behaviour remains unchanged. Signed-off-by: Faraz Vahedi Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/2185 --- sys/sys/stdatomic.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sys/sys/stdatomic.h b/sys/sys/stdatomic.h index c0cbb7f785b5..a3d1f2cd4aeb 100644 --- a/sys/sys/stdatomic.h +++ b/sys/sys/stdatomic.h @@ -270,6 +270,8 @@ typedef _Atomic(__uintmax_t) atomic_uintmax_t; #define atomic_fetch_and_explicit(object, operand, order) \ __c11_atomic_fetch_and(object, operand, order) #elif defined(__GNUC_ATOMICS) +#define __atomic_apply_stride(object, operand) \ + (((__typeof__(*(object)))0) + (operand)) #define atomic_store_explicit(object, desired, order) \ __atomic_store_n(object, desired, order) #define atomic_load_explicit(object, order) \ @@ -285,9 +287,11 @@ typedef _Atomic(__uintmax_t) atomic_uintmax_t; __atomic_compare_exchange_n(object, expected, \ desired, 1, success, failure) #define atomic_fetch_add_explicit(object, operand, order) \ - __atomic_fetch_add(object, operand, order) + __atomic_fetch_add(object, \ + __atomic_apply_stride(object, operand), order) #define atomic_fetch_sub_explicit(object, operand, order) \ - __atomic_fetch_sub(object, operand, order) + __atomic_fetch_sub(object, \ + __atomic_apply_stride(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) \