Basic context, frames and exceptions definitions
All checks were successful
ci/woodpecker/push/build Pipeline was successful
All checks were successful
ci/woodpecker/push/build Pipeline was successful
This commit is contained in:
@@ -9,12 +9,19 @@
|
||||
#ifndef __XTDK_AMD64_KETYPES_H
|
||||
#define __XTDK_AMD64_KETYPES_H
|
||||
|
||||
#include <xtbase.h>
|
||||
#include <xttypes.h>
|
||||
|
||||
|
||||
/* Size of the exception area */
|
||||
#define EXCEPTION_AREA_SIZE 64
|
||||
|
||||
/* IOPM Definitions */
|
||||
#define IO_ACCESS_MAP_NONE 0
|
||||
|
||||
/* Size of the FNSAVE/FRSTOR save area */
|
||||
#define FLOATING_SAVE_AREA_SIZE ((sizeof(FLOATING_SAVE_AREA) + 15) & ~15)
|
||||
|
||||
/* Static Kernel-Mode address start */
|
||||
#define KSEG0_BASE 0xFFFFF80000000000
|
||||
|
||||
@@ -24,6 +31,104 @@
|
||||
/* XTOS Kernel stack size */
|
||||
#define KERNEL_STACK_SIZE 0x8000
|
||||
|
||||
/* Kernel frames */
|
||||
#define KEXCEPTION_FRAME_SIZE sizeof(KEXCEPTION_FRAME)
|
||||
#define KSWITCH_FRAME_SIZE sizeof(KSWITCH_FRAME)
|
||||
#define KTRAP_FRAME_ALIGN 0x10
|
||||
#define KTRAP_FRAME_SIZE sizeof(KTRAP_FRAME)
|
||||
|
||||
/* Size of legacy 387 registers */
|
||||
#define SIZE_OF_80387_REGISTERS 80
|
||||
|
||||
/* Floating point state storing structure */
|
||||
typedef struct _FLOATING_SAVE_AREA
|
||||
{
|
||||
USHORT ControlWord;
|
||||
USHORT StatusWord;
|
||||
USHORT TagWord;
|
||||
ULONG ErrorOffset;
|
||||
USHORT ErrorSelector;
|
||||
USHORT ErrorOpcode;
|
||||
ULONG DataOffset;
|
||||
USHORT DataSelector;
|
||||
UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
|
||||
} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
|
||||
|
||||
/* Context frame structure definition */
|
||||
typedef struct ALIGN(16) _CONTEXT
|
||||
{
|
||||
ULONG64 P1Home;
|
||||
ULONG64 P2Home;
|
||||
ULONG64 P3Home;
|
||||
ULONG64 P4Home;
|
||||
ULONG64 P5Home;
|
||||
ULONG64 P6Home;
|
||||
ULONG ContextFlags;
|
||||
ULONG MxCsr;
|
||||
USHORT SegCs;
|
||||
USHORT SegDs;
|
||||
USHORT SegEs;
|
||||
USHORT SegFs;
|
||||
USHORT SegGs;
|
||||
USHORT SegSs;
|
||||
ULONG EFlags;
|
||||
ULONG64 Dr0;
|
||||
ULONG64 Dr1;
|
||||
ULONG64 Dr2;
|
||||
ULONG64 Dr3;
|
||||
ULONG64 Dr6;
|
||||
ULONG64 Dr7;
|
||||
ULONG64 Rax;
|
||||
ULONG64 Rcx;
|
||||
ULONG64 Rdx;
|
||||
ULONG64 Rbx;
|
||||
ULONG64 Rsp;
|
||||
ULONG64 Rbp;
|
||||
ULONG64 Rsi;
|
||||
ULONG64 Rdi;
|
||||
ULONG64 R8;
|
||||
ULONG64 R9;
|
||||
ULONG64 R10;
|
||||
ULONG64 R11;
|
||||
ULONG64 R12;
|
||||
ULONG64 R13;
|
||||
ULONG64 R14;
|
||||
ULONG64 R15;
|
||||
ULONG64 Rip;
|
||||
union
|
||||
{
|
||||
FLOATING_SAVE_AREA FloatSave;
|
||||
struct
|
||||
{
|
||||
M128 Header[2];
|
||||
M128 Legacy[8];
|
||||
M128 Xmm0;
|
||||
M128 Xmm1;
|
||||
M128 Xmm2;
|
||||
M128 Xmm3;
|
||||
M128 Xmm4;
|
||||
M128 Xmm5;
|
||||
M128 Xmm6;
|
||||
M128 Xmm7;
|
||||
M128 Xmm8;
|
||||
M128 Xmm9;
|
||||
M128 Xmm10;
|
||||
M128 Xmm11;
|
||||
M128 Xmm12;
|
||||
M128 Xmm13;
|
||||
M128 Xmm14;
|
||||
M128 Xmm15;
|
||||
};
|
||||
};
|
||||
M128 VectorRegister[26];
|
||||
ULONG64 VectorControl;
|
||||
ULONG64 DebugControl;
|
||||
ULONG64 LastBranchToRip;
|
||||
ULONG64 LastBranchFromRip;
|
||||
ULONG64 LastExceptionToRip;
|
||||
ULONG64 LastExceptionFromRip;
|
||||
} CONTEXT, *PCONTEXT;
|
||||
|
||||
/* Global Descriptor Table (GDT) entry union definition */
|
||||
typedef union _KGDTENTRY
|
||||
{
|
||||
@@ -91,4 +196,142 @@ typedef struct _KTSS
|
||||
USHORT IoMapBase;
|
||||
} KTSS, *PKTSS;
|
||||
|
||||
/* Exception frame definition */
|
||||
typedef struct _KEXCEPTION_FRAME
|
||||
{
|
||||
ULONG64 P1Home;
|
||||
ULONG64 P2Home;
|
||||
ULONG64 P3Home;
|
||||
ULONG64 P4Home;
|
||||
ULONG64 P5;
|
||||
ULONG64 InitialStack;
|
||||
M128 Xmm6;
|
||||
M128 Xmm7;
|
||||
M128 Xmm8;
|
||||
M128 Xmm9;
|
||||
M128 Xmm10;
|
||||
M128 Xmm11;
|
||||
M128 Xmm12;
|
||||
M128 Xmm13;
|
||||
M128 Xmm14;
|
||||
M128 Xmm15;
|
||||
ULONG64 TrapFrame;
|
||||
ULONG64 CallbackStack;
|
||||
ULONG64 OutputBuffer;
|
||||
ULONG64 OutputLength;
|
||||
UCHAR ExceptionRecord[EXCEPTION_AREA_SIZE];
|
||||
ULONG64 MxCsr;
|
||||
ULONG64 Rbp;
|
||||
ULONG64 Rbx;
|
||||
ULONG64 Rdi;
|
||||
ULONG64 Rsi;
|
||||
ULONG64 R12;
|
||||
ULONG64 R13;
|
||||
ULONG64 R14;
|
||||
ULONG64 R15;
|
||||
ULONG64 Return;
|
||||
} KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
|
||||
|
||||
/* Switch frame definition */
|
||||
typedef struct _KSWITCH_FRAME
|
||||
{
|
||||
ULONG64 P1Home;
|
||||
ULONG64 P2Home;
|
||||
ULONG64 P3Home;
|
||||
ULONG64 P4Home;
|
||||
ULONG64 P5Home;
|
||||
ULONG MxCsr;
|
||||
KIRQL ApcBypass;
|
||||
UCHAR Fill1[3];
|
||||
ULONG64 Rbp;
|
||||
ULONG64 Return;
|
||||
} KSWITCH_FRAME, *PKSWITCH_FRAME;
|
||||
|
||||
/* Trap frame definition */
|
||||
typedef struct _KTRAP_FRAME
|
||||
{
|
||||
ULONG64 P1Home;
|
||||
ULONG64 P2Home;
|
||||
ULONG64 P3Home;
|
||||
ULONG64 P4Home;
|
||||
ULONG64 P5;
|
||||
KPROCESSOR_MODE PreviousMode;
|
||||
KIRQL PreviousIrql;
|
||||
UCHAR FaultIndicator;
|
||||
UCHAR ExceptionActive;
|
||||
ULONG MxCsr;
|
||||
ULONG64 Rax;
|
||||
ULONG64 Rcx;
|
||||
ULONG64 Rdx;
|
||||
ULONG64 R8;
|
||||
ULONG64 R9;
|
||||
ULONG64 R10;
|
||||
ULONG64 R11;
|
||||
union
|
||||
{
|
||||
ULONG64 GsBase;
|
||||
ULONG64 GsSwap;
|
||||
};
|
||||
M128 Xmm0;
|
||||
M128 Xmm1;
|
||||
M128 Xmm2;
|
||||
M128 Xmm3;
|
||||
M128 Xmm4;
|
||||
M128 Xmm5;
|
||||
union
|
||||
{
|
||||
ULONG64 FaultAddress;
|
||||
ULONG64 ContextRecord;
|
||||
ULONG64 TimeStampCKCL;
|
||||
};
|
||||
ULONG64 Dr0;
|
||||
ULONG64 Dr1;
|
||||
ULONG64 Dr2;
|
||||
ULONG64 Dr3;
|
||||
ULONG64 Dr6;
|
||||
ULONG64 Dr7;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
ULONG64 DebugControl;
|
||||
ULONG64 LastBranchToRip;
|
||||
ULONG64 LastBranchFromRip;
|
||||
ULONG64 LastExceptionToRip;
|
||||
ULONG64 LastExceptionFromRip;
|
||||
};
|
||||
struct
|
||||
{
|
||||
ULONG64 LastBranchControl;
|
||||
ULONG LastBranchMSR;
|
||||
};
|
||||
};
|
||||
USHORT SegDs;
|
||||
USHORT SegEs;
|
||||
USHORT SegFs;
|
||||
USHORT SegGs;
|
||||
ULONG64 TrapFrame;
|
||||
ULONG64 Rbx;
|
||||
ULONG64 Rdi;
|
||||
ULONG64 Rsi;
|
||||
ULONG64 Rbp;
|
||||
union
|
||||
{
|
||||
ULONG64 ErrorCode;
|
||||
ULONG64 ExceptionFrame;
|
||||
ULONG64 TimeStampKlog;
|
||||
};
|
||||
ULONG64 Rip;
|
||||
USHORT SegCs;
|
||||
UCHAR Fill0;
|
||||
UCHAR Logging;
|
||||
USHORT Fill1[2];
|
||||
ULONG EFlags;
|
||||
ULONG Fill2;
|
||||
ULONG64 Rsp;
|
||||
USHORT SegSs;
|
||||
USHORT Fill3;
|
||||
ULONG CodePatchCycle;
|
||||
} KTRAP_FRAME, *PKTRAP_FRAME;
|
||||
|
||||
#endif /* __XTDK_AMD64_KETYPES_H */
|
||||
|
@@ -9,10 +9,21 @@
|
||||
#ifndef __XTDK_AMD64_XTSTRUCT_H
|
||||
#define __XTDK_AMD64_XTSTRUCT_H
|
||||
|
||||
#include <xtdefs.h>
|
||||
|
||||
|
||||
/* Architecture-related enumeration lists forward references */
|
||||
typedef enum _CPUID_FEATURES CPUID_FEATURES, *PCPUID_FEATURES;
|
||||
typedef enum _CPUID_REQUESTS CPUID_REQUESTS, *PCPUID_REQUESTS;
|
||||
|
||||
/* Architecture-related structures forward references */
|
||||
typedef struct ALIGN(16) _CONTEXT CONTEXT, *PCONTEXT;
|
||||
typedef struct _CPUID_REGISTERS CPUID_REGISTERS, *PCPUID_REGISTERS;
|
||||
typedef struct _FLOATING_SAVE_AREA FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
|
||||
typedef struct _HARDWARE_PTE HARDWARE_PTE, *PHARDWARE_PTE;
|
||||
typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
|
||||
typedef struct _KSWITCH_FRAME KSWITCH_FRAME, *PKSWITCH_FRAME;
|
||||
typedef struct _KTRAP_FRAME KTRAP_FRAME, *PKTRAP_FRAME;
|
||||
typedef struct _KTSS KTSS, *PKTSS;
|
||||
|
||||
/* Architecture-related unions forward references */
|
||||
|
Reference in New Issue
Block a user