From nobody Sun Jan 4 13:27: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 4dkdX4587Pz6N26J for ; Sun, 04 Jan 2026 13:27: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 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dkdX43djKz3Ny7 for ; Sun, 04 Jan 2026 13:27:32 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767533252; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=iGqil7mE4sjPqrDnjzS79J2bhFHEG2daUfPUkVcmtNY=; b=MjPwChwb/g6njZpruO3HM/vNia5Vcuzg2CqU4XOaSggemN6ULjlY3vfeRlFIdsO/Kfxngb zEqmjQ3c7AtnZNES1LkqPtaCSRjjB2P6/VOtzs3LoIzIILy8jXZyNBVy8idA/0o+FzNETz 6xuOSvorxP2MuxrZxCsKfem7IVLxFGPaNqvSigDdKO3oOcgEPmzgPrFPYA9jBqpxkj2Do3 9J77bVc6KNWNyVq5Mhm38QNDbzd26ANRnqN6K+8t3Wj7g1Jo4xmGhLy5Jzgmcm4Rlnn7Yy dDZGYvuOLfF3molk5GPIrbowhpgCEx8fqZQhPPnRk/0vfCPT09U53EeH/yZIlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767533252; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=iGqil7mE4sjPqrDnjzS79J2bhFHEG2daUfPUkVcmtNY=; b=nItt8rhjvR6TdlO2gCa89hTFBMawfyuU8Gf+zBusRE/PBDtbHOzxptNN+hUlubonsfEolE GkMeqfPcJcdr9q7CYLxKKLpVuRXXtTVE3AnA+dL7NV7NhQe8UrCBRbhNhfwwxo+CBW9DuD TY7l6NGZO/sr8JkLJyyiEEPyllRNTF0cVFCCnVjtBLoCQOH/bbOFbve5jhSyw1wwnDkxLK elWbZeDVxrtOFlMxfgyhDindtNj4eCiUTWoazK8FaWxm9NiUHGOcAUYKkAWuyXRhfvWI/S hXzP9aQjXfzIS9zuCrmRM4L5FmHf5dETiqWySv3HEj/iMyfqTs1LW8hn/T7I4Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1767533252; a=rsa-sha256; cv=none; b=tQNIdGC+pDXtdvhVkoK4nUptncY3n6sRXpD3KZhmQ/POCcgymeMRJTzFfPdvb7ANgAaXdh ONA7VuvWrxjQ8ESRUMaNFD5n/WBPcZRXw3mwx2p3HtF4dypO80MxXzQKJx9P//cRDUAj0R Ku8yM2hvoc9Wp9IP0dPFmSoZOrlEZUNEq7yDS57jICkFgbE1PtZaJFSo/M15jZRM8XItpQ qF91jGwLvOdAFiMHsDluALyKzMmfv4mLSMoQ/C7wZ2ML/JliW/SiagKqhQ7ZgR8E7JfP0t p/ajkUt95UPkWmoXThq+mqBdZNyuBjcY/wn97s/O36lsZb8uy/Hu1nwH0OOZwQ== 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 4dkdX42lflzcml for ; Sun, 04 Jan 2026 13:27:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 39c72 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 04 Jan 2026 13:27:32 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Robert Clausecker Subject: git: a5c6c9563119 - stable/14 - libc/amd64: fix stpncpy.S again List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: fuz X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: a5c6c95631195181bd3707d96ab79184235df6a6 Auto-Submitted: auto-generated Date: Sun, 04 Jan 2026 13:27:32 +0000 Message-Id: <695a6ac4.39c72.7c805f10@gitrepo.freebsd.org> The branch stable/14 has been updated by fuz: URL: https://cgit.FreeBSD.org/src/commit/?id=a5c6c95631195181bd3707d96ab79184235df6a6 commit a5c6c95631195181bd3707d96ab79184235df6a6 Author: Robert Clausecker AuthorDate: 2025-12-18 23:37:33 +0000 Commit: Robert Clausecker CommitDate: 2026-01-04 13:25:33 +0000 libc/amd64: fix stpncpy.S again The previous fix introduced a regression on machines without the BMI1 instruction set extension. The TZCNT instruction used in this function behaves different on old machines when the source operand is zero, but the code was originally designed to never trigger this case. The bug fix caused this case to be possible, leading to a regression on sufficiently old hardware. Fix the code by messing with things such that the source operand is never zero. PR: 291720 Fixes: 66eb78377bf109af1d9e25626bf254b4369436ec Tested by: cy Approved by: markj (mentor) Differential Revision: https://reviews.freebsd.org/D54303 (cherry picked from commit 2f83319214d9adb8ab7a77e35d1014658b3f9cae) --- lib/libc/amd64/string/stpncpy.S | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/libc/amd64/string/stpncpy.S b/lib/libc/amd64/string/stpncpy.S index 764ee1d4008c..2efadc97a435 100644 --- a/lib/libc/amd64/string/stpncpy.S +++ b/lib/libc/amd64/string/stpncpy.S @@ -36,9 +36,7 @@ .set stpncpy, __stpncpy ARCHFUNCS(__stpncpy) ARCHFUNC(__stpncpy, scalar) -#if 0 /* temporarily disabled cf. PR 291720 */ ARCHFUNC(__stpncpy, baseline) -#endif ENDARCHFUNCS(__stpncpy) ARCHENTRY(__stpncpy, scalar) @@ -93,7 +91,6 @@ ARCHEND(__stpncpy, scalar) /* stpncpy(char *restrict rdi, const char *rsi, size_t rdx) */ ARCHENTRY(__stpncpy, baseline) #define bounce (-3*16-8) /* location of on-stack bounce buffer */ - test %rdx, %rdx # no bytes to copy? jz .L0 @@ -225,8 +222,8 @@ ARCHENTRY(__stpncpy, baseline) /* 1--32 bytes to copy, bounce through the stack */ .Lrunt: movdqa %xmm1, bounce+16(%rsp) # clear out rest of on-stack copy - bts %r10, %r8 # treat end of buffer as end of string and %r9d, %r8d # mask out head before string + bts %r10, %r8 # treat end of buffer as end of string test $0x1ffff, %r8d # end of string within first chunk or right after? jnz 0f # if yes, do not inspect second buffer @@ -235,10 +232,10 @@ ARCHENTRY(__stpncpy, baseline) pcmpeqb %xmm1, %xmm0 # NUL in second chunk? pmovmskb %xmm0, %r9d shl $16, %r9d - or %r9d, %r8d # merge found NUL bytes into NUL mask + or %r9, %r8 # merge found NUL bytes into NUL mask /* end of string after one buffer */ -0: tzcnt %r8d, %r8d # location of last char in string +0: tzcnt %r8, %r8 # location of last char in string movdqu %xmm1, bounce(%rsp, %r8, 1) # clear bytes behind string lea bounce(%rsp, %rcx, 1), %rsi # start of string copy on stack lea (%rdi, %r8, 1), %rax # return pointer to NUL byte