From nobody Tue Jun 2 07:26:23 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 4gV2Sh6gLvz6f8jG for ; Tue, 02 Jun 2026 07:26:28 +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" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gV2Sh4DVBz3nGt for ; Tue, 02 Jun 2026 07:26:28 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1780385188; 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=iccQRm+63+KK0y6d5aSaz7FdhapMil/SJ5QkZ6WOlMY=; b=J8PiEsdBqLqnAj1TNKCxVsmh+yxNMX34S6LMSrzyCY7rSIkkC82RbXjisWp8+JKVaWU/EK a7qIbgsNmnTktd8M5xaUy2US147L2sX5ZONpFcGMGmgDVZQLxOhnYfW4hSkucVS8hhVWou 522E51We19sI9E9dBCC05QYRqCuWj+Eb2MxufUuMpG1r6MbAKuW2erovVFMrpGf4zais8h yBh9xQV5hSl98kiUYHVbMXThBm6nicZgL7P1OMTipf6jA0g1BMrLih9QExstKanygrDrYK 1Y9Uz25BEdlXgSfx+3GBBjQpLLajCIVSR8iO8KOZVIrA2BcVxtZV4QhFya3Tjw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1780385188; a=rsa-sha256; cv=none; b=nK8whM/IfGAnu0I7gKZPwn01WvyA2ntzM+FxjSlXB+/XvRrCnnewWjD4LkF8CvliBFW6dr UjYu9CQ5CqEJyBFNWfakVTSpuofxu7bv0oLFh2WDY96C8QQCbMMtdDUXwriM9ATBpGeOz8 5vDRrOKs09SDjbAWev+iig0QGkIJ2N6q3MadCOC7bP+yfUq+MaZcbCUXgQDfLN2lMCTtkX WuK25SLRc5cXEfU0IL+vTwyFezjkcGgNOVLzSbIrob3kRvoHBGvrsXVE8U7UgKlJ6OmDR0 GHyBS3gxOl5TiC//+0O3Ru/uYKPd/d3/y76w4Pf5WvgmZjwA7mLJqMNQBUZaxA== 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=1780385188; 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=iccQRm+63+KK0y6d5aSaz7FdhapMil/SJ5QkZ6WOlMY=; b=AtPq7cjNv8ss7MxqoE2/w/pAZnYP447JRmAnWlIRnABFJ+HT3CXQteWkiBQIHWYvID/XyL iEMnqbTf8SwgUh5JfXJSIIe1DL7+1FPhWczpdgE3OPzZcGSuvEix5z4T8acLspPvChXqMH kDeMuhf0dZAx3GMWbxFOr+DISnn0wnmjWNu0Su1U7QprUhqsp3ZcwQxSkKcEkp52WT152B 2g6tB0Hb7MjykvzGhVePfrf/EHffAsk44Da3U81owjBjZrNvBptxAyySzaEBYupsB92mqz cygYo3O5atcNYwbGogysWJEK7h49o0XexWAq3WrhoEpowC+vcxsmUc1FIWoY6A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gV2Sh3jG2z14S for ; Tue, 02 Jun 2026 07:26:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 21c41 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 02 Jun 2026 07:26:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Ricardo Branco From: Pouria Mousavizadeh Tehrani Subject: git: b84d31ee7453 - main - linux: Add linux_pt_fpregset and bsd_to_linux_fpregset() for amd64 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: pouria X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b84d31ee74535a0026ff83f2a34c07b7557f9785 Auto-Submitted: auto-generated Date: Tue, 02 Jun 2026 07:26:23 +0000 Message-Id: <6a1e859f.21c41.77f7f61a@gitrepo.freebsd.org> The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=b84d31ee74535a0026ff83f2a34c07b7557f9785 commit b84d31ee74535a0026ff83f2a34c07b7557f9785 Author: Ricardo Branco AuthorDate: 2026-04-26 14:43:59 +0000 Commit: Pouria Mousavizadeh Tehrani CommitDate: 2026-06-02 07:25:34 +0000 linux: Add linux_pt_fpregset and bsd_to_linux_fpregset() for amd64 Add struct linux_pt_fpregset, the amd64 Linux NT_PRFPREG payload, corresponding to user_i387_struct in Linux. The struct describes the 512-byte FXSAVE area as exposed by PTRACE_GETREGSET. Add bsd_to_linux_fpregset() to translate from FreeBSD's struct fpreg to struct linux_pt_fpregset. Fields are extracted from the fpr_env[] array which stores the FXSAVE environment packed as four 64-bit words. The FP and XMM register banks are bulk-copied as opaque byte arrays. Signed-off-by: Ricardo Branco Reviewed by: kib Pull-Request: https://github.com/freebsd/freebsd-src/pull/2165 --- sys/amd64/linux/linux.h | 18 ++++++++++++++++++ sys/amd64/linux/linux_machdep.c | 20 ++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/sys/amd64/linux/linux.h b/sys/amd64/linux/linux.h index fb7aaa2d731c..8e025b73dbd8 100644 --- a/sys/amd64/linux/linux.h +++ b/sys/amd64/linux/linux.h @@ -237,14 +237,32 @@ struct linux_pt_regset { l_ulong gs; }; +/* This corresponds to 'user_i387_struct' in Linux. */ +struct linux_pt_fpregset { + l_ushort cwd; + l_ushort swd; + l_ushort twd; + l_ushort fop; + uint64_t rip; + uint64_t rdp; + uint32_t mxcsr; + uint32_t mxcsr_mask; + uint32_t st_space[32]; + uint32_t xmm_space[64]; + uint32_t padding[24]; +}; + #ifdef _KERNEL struct reg; +struct fpreg; struct syscall_info; void bsd_to_linux_regset(const struct reg *b_reg, struct linux_pt_regset *l_regset); void linux_to_bsd_regset(struct reg *b_reg, const struct linux_pt_regset *l_regset); +void bsd_to_linux_fpregset(const struct fpreg *b_fpreg, + struct linux_pt_fpregset *l_fpregset); void linux_ptrace_get_syscall_info_machdep(const struct reg *reg, struct syscall_info *si); int linux_ptrace_getregs_machdep(struct thread *td, pid_t pid, diff --git a/sys/amd64/linux/linux_machdep.c b/sys/amd64/linux/linux_machdep.c index 7ec1ec56bb95..e05f824cbea1 100644 --- a/sys/amd64/linux/linux_machdep.c +++ b/sys/amd64/linux/linux_machdep.c @@ -281,6 +281,26 @@ linux_to_bsd_regset(struct reg *b_reg, const struct linux_pt_regset *l_regset) b_reg->r_gs = l_regset->gs; } +void +bsd_to_linux_fpregset(const struct fpreg *b_fpreg, + struct linux_pt_fpregset *l_fpregset) +{ + l_fpregset->cwd = b_fpreg->fpr_env[0]; + l_fpregset->swd = b_fpreg->fpr_env[0] >> 16; + l_fpregset->twd = b_fpreg->fpr_env[0] >> 32; + l_fpregset->fop = b_fpreg->fpr_env[0] >> 48; + l_fpregset->rip = b_fpreg->fpr_env[1]; + l_fpregset->rdp = b_fpreg->fpr_env[2]; + l_fpregset->mxcsr = b_fpreg->fpr_env[3]; + l_fpregset->mxcsr_mask = b_fpreg->fpr_env[3] >> 32; + + memcpy(l_fpregset->st_space, b_fpreg->fpr_acc, + sizeof(l_fpregset->st_space)); + memcpy(l_fpregset->xmm_space, b_fpreg->fpr_xacc, + sizeof(l_fpregset->xmm_space)); + memset(l_fpregset->padding, 0, sizeof(l_fpregset->padding)); +} + void linux_ptrace_get_syscall_info_machdep(const struct reg *reg, struct syscall_info *si)