From nobody Sun Oct 25 22:00:22 2026 X-Original-To: dev-commits-src-all@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 4jCW0730Pwz6xCbx for ; Sun, 25 Oct 2026 22:00:23 +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 4jCW0700skz4XgP for ; Sun, 25 Oct 2026 22:00:23 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792965623; 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=xSPCBIZ/Dr51b/+Df/pYTwowiEdfcPsk424BHCR22fc=; b=Tx9Ez/pJx6/+nZ9e2pYS8h0N4b8AWbk1QD9JmakSHcgzrd7Wuf9p027vJiRNJrhDQPwQ84 zIkv16wjQHa3lkNivofFW+0gUC5Wyqn+KVKJ95dfH3UBKR0nyvloKzYjTrL4PwB53Xb1/Z mcFN/ew8HbCdecAl6MRdowZG7lMDH4ypPUrjyDQo6U90wgz21JYwICebvCZcMNFZGLZm6V +cpPTnUgls7QXyex1ZsK9TS69fiMDpKlGziJP4cJ+/p+UGnBCjNJH9pcgYYSw5lAemCa4V TIT73FP4z8kc/zjYf91BZ7xQH/nINFKwuTGGDk2VeOQBCRQZdzUyobqTZMYsSQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1792965623; b=m4fKHVUURAtZzO6T1APd9KoiJuHjTyZm7VJ/22wEWKhXysTJ9TXABSWFUC33D2Mlu1tGzn tgD/8foKNZ1fui86nj+HUS+wzt8b2f8FsX5vXLjC1xHNntLWyOv4h1HWFSe3wSFXjuShV0 Wffc7ELI5HjXPV9gJD6noOw/wFLgiFd5N6aRk4G2lR3cP7UbnPV5IZJEcZChtzPb2Wkyc9 1i4JmFGJHlBPTC3bygAMZIvUmWtmBPILkbn0cHpsyah9ZHBsI830qcGSxTzXSyzY9weheN lcnY0sLpJqBVUme+peOBx6n553XWDsBM3CyXqmdO1+Q75XiVzL12fiqmP2DNvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1792965623; 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=xSPCBIZ/Dr51b/+Df/pYTwowiEdfcPsk424BHCR22fc=; b=d26QXVzfwyBH91rYOk7dCJQy4x386MizhPeEjbDVUUdwiteAmtOxwghiPkdctvBgEAb6Qh 6uNSUxdVp08iBCMH72XuxMI5K/PpxRvMcstWaWyRR6me6ebWYqXMrcsHlDhk8X9DZVul+8 g6rCzSOFtGtQkYlNqlCLgnYPFNqZa6NpoKD9UnzuAgFl57C/79qryY/xDwJVXJWogrAU5b Wt5BOj/jr3ELBFojgXq99K8Wis0y7GbGkHTLLjUV8hPEqf6W+9A2HR4QYgwVSZcQ6wQcvC BmJ1rJtq+Rclwv7qLZwr7ZMtCDHe6Nl42xDJDOw1kly9QwKNph0YSK8gQVYY1g== 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 4jCW065hzWz14yh for ; Sun, 25 Oct 2026 22:00:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 4440a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 25 Oct 2026 22:00:22 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Ricardo Branco From: Pouria Mousavizadeh Tehrani Subject: git: d8f803192315 - stable/15 - linux: Add linux_pt_fpregset and bsd_to_linux_fpregset() for amd64 List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: Commit messages for all branches of the 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: pouria X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: d8f8031923159bda34b2b320c66c54e4e6a09824 Auto-Submitted: auto-generated Date: Sun, 25 Oct 2026 22:00:22 +0000 Message-Id: <6ade7bf6.4440a.201c2ee7@gitrepo.freebsd.org> The branch stable/15 has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=d8f8031923159bda34b2b320c66c54e4e6a09824 commit d8f8031923159bda34b2b320c66c54e4e6a09824 Author: Ricardo Branco AuthorDate: 2026-04-26 14:43:59 +0000 Commit: Pouria Mousavizadeh Tehrani CommitDate: 2026-10-25 21:53:09 +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 (cherry picked from commit b84d31ee74535a0026ff83f2a34c07b7557f9785) --- 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 84ec36032fd4..dc7f55f6f198 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)