From cbbac560911521c0ded3e06e713107176855fae4 Mon Sep 17 00:00:00 2001 From: Dmitry Chagin Date: Fri, 9 Jun 2023 01:33:26 +0300 Subject: linux(4): Preserve fpu xsave state across signal delivery on amd64 PR: 270247 Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D40444 MFC after: 2 weeks --- sys/x86/linux/linux_x86_sigframe.h | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'sys/x86/linux') diff --git a/sys/x86/linux/linux_x86_sigframe.h b/sys/x86/linux/linux_x86_sigframe.h index e5687069651f..c748073a3457 100644 --- a/sys/x86/linux/linux_x86_sigframe.h +++ b/sys/x86/linux/linux_x86_sigframe.h @@ -35,6 +35,20 @@ #ifndef _X86_LINUX_SIGFRAME_H_ #define _X86_LINUX_SIGFRAME_H_ +#define LINUX_UC_FP_XSTATE 0x1 + +#define LINUX_FP_XSTATE_MAGIC1 0x46505853U +#define LINUX_FP_XSTATE_MAGIC2 0x46505845U +#define LINUX_FP_XSTATE_MAGIC2_SIZE sizeof(uint32_t) + +struct l_fpx_sw_bytes { + uint32_t magic1; + uint32_t extended_size; + uint64_t xfeatures; + uint32_t xstate_size; + uint32_t padding[7]; +}; + #if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32)) /* The Linux sigcontext, pretty much a standard 386 trapframe. */ @@ -140,7 +154,11 @@ struct l_fpstate { u_int32_t mxcsr_mask; u_int8_t st[8][16]; u_int8_t xmm[16][16]; - u_int32_t reserved2[24]; + u_int32_t reserved2[12]; + union { + u_int32_t reserved3[12]; + struct l_fpx_sw_bytes sw_reserved; + }; } __aligned(16); struct l_sigcontext { -- cgit v1.3