From 18a39f95bc51c43a084f5c9a1f0a51ee37484c4a Mon Sep 17 00:00:00 2001 From: belliash Date: Wed, 15 Feb 2023 20:07:17 +0100 Subject: [PATCH] Add floating save area structure definitions --- sdk/xtdk/i686/ketypes.h | 45 ++++++++++++++++++++++++++++++++++++++++ sdk/xtdk/i686/xtstruct.h | 3 +++ 2 files changed, 48 insertions(+) diff --git a/sdk/xtdk/i686/ketypes.h b/sdk/xtdk/i686/ketypes.h index b4c94fb..7672816 100644 --- a/sdk/xtdk/i686/ketypes.h +++ b/sdk/xtdk/i686/ketypes.h @@ -133,6 +133,7 @@ /* Size of 387 registers */ #define SIZE_OF_80387_REGISTERS 80 +#define SIZE_OF_FX_REGISTERS 128 /* Floating point state storing structure */ typedef struct _FLOATING_SAVE_AREA @@ -148,6 +149,50 @@ typedef struct _FLOATING_SAVE_AREA ULONG Cr0NpxState; } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; +/* Data for FNSAVE/FRSTOR instructions structure definition */ +typedef struct _FNSAVE_FORMAT +{ + ULONG ControlWord; + ULONG StatusWord; + ULONG TagWord; + ULONG ErrorOffset; + ULONG ErrorSelector; + ULONG DataOffset; + ULONG DataSelector; + UCHAR RegisterArea[SIZE_OF_80387_REGISTERS]; +} FNSAVE_FORMAT, *PFNSAVE_FORMAT; + +/* Data for FXSAVE/FXRSTOR instructions structure definition */ +typedef struct _FXSAVE_FORMAT +{ + USHORT ControlWord; + USHORT StatusWord; + USHORT TagWord; + USHORT ErrorOpcode; + ULONG ErrorOffset; + ULONG ErrorSelector; + ULONG DataOffset; + ULONG DataSelector; + ULONG MXCsr; + ULONG MXCsrMask; + UCHAR RegisterArea[SIZE_OF_FX_REGISTERS]; + UCHAR Reserved3[SIZE_OF_FX_REGISTERS]; + UCHAR Reserved4[224]; + UCHAR Align16Byte[8]; +} FXSAVE_FORMAT, *PFXSAVE_FORMAT; + +/* Floating save area structure definition */ +typedef struct _FX_SAVE_AREA +{ + union + { + FNSAVE_FORMAT FnArea; + FXSAVE_FORMAT FxArea; + } U; + ULONG NpxSavedCpu; + ULONG Cr0NpxState; +} FX_SAVE_AREA, *PFX_SAVE_AREA; + /* Context frame structure definition */ typedef struct _CONTEXT { diff --git a/sdk/xtdk/i686/xtstruct.h b/sdk/xtdk/i686/xtstruct.h index c98706d..31b458b 100644 --- a/sdk/xtdk/i686/xtstruct.h +++ b/sdk/xtdk/i686/xtstruct.h @@ -23,6 +23,9 @@ typedef struct _CPU_IDENTIFICATION CPU_IDENTIFICATION, *PCPU_IDENTIFICATION; typedef struct _CPUID_REGISTERS CPUID_REGISTERS, *PCPUID_REGISTERS; typedef struct _CPUID_SIGNATURE CPUID_SIGNATURE, *PCPUID_SIGNATURE; typedef struct _FLOATING_SAVE_AREA FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; +typedef struct _FNSAVE_FORMAT FNSAVE_FORMAT, *PFNSAVE_FORMAT; +typedef struct _FX_SAVE_AREA FX_SAVE_AREA, *PFX_SAVE_AREA; +typedef struct _FXSAVE_FORMAT FXSAVE_FORMAT, *PFXSAVE_FORMAT; typedef struct _HARDWARE_PTE HARDWARE_PTE, *PHARDWARE_PTE; typedef struct _HARDWARE_PTE_PAE HARDWARE_PTE_PAE, *PHARDWARE_PTE_PAE; typedef struct _KDESCRIPTOR KDESCRIPTOR, *PKDESCRIPTOR;