Added CONTEXT86 definition.
Added PowerPC context as an example (not tested).
This commit is contained in:
parent
3742d77fdb
commit
f6b08dd084
161
include/winnt.h
161
include/winnt.h
|
@ -110,18 +110,18 @@ typedef struct _SINGLE_LIST_ENTRY {
|
||||||
|
|
||||||
/* The Win32 register context */
|
/* The Win32 register context */
|
||||||
|
|
||||||
#define CONTEXT_i386 0x00010000
|
/* CONTEXT is the CPU-dependent context; it should be used */
|
||||||
#define CONTEXT_i486 CONTEXT_i386
|
/* wherever a platform-specific context is needed (e.g. exception */
|
||||||
#define CONTEXT_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
|
/* handling, Win32 register functions). */
|
||||||
#define CONTEXT_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
|
|
||||||
#define CONTEXT_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
|
/* CONTEXT86 is the i386-specific context; it should be used */
|
||||||
#define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 0x0008L) /* 387 state */
|
/* wherever only a 386 context makes sense (e.g. DOS interrupts, */
|
||||||
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010L) /* DB 0-3,6,7 */
|
/* Win16 register functions), so that this code can be compiled */
|
||||||
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
|
/* on all platforms. */
|
||||||
|
|
||||||
#define SIZE_OF_80387_REGISTERS 80
|
#define SIZE_OF_80387_REGISTERS 80
|
||||||
|
|
||||||
typedef struct
|
typedef struct _FLOATING_SAVE_AREA
|
||||||
{
|
{
|
||||||
DWORD ControlWord;
|
DWORD ControlWord;
|
||||||
DWORD StatusWord;
|
DWORD StatusWord;
|
||||||
|
@ -132,9 +132,9 @@ typedef struct
|
||||||
DWORD DataSelector;
|
DWORD DataSelector;
|
||||||
BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
|
BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
|
||||||
DWORD Cr0NpxState;
|
DWORD Cr0NpxState;
|
||||||
} FLOATING_SAVE_AREA;
|
} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
|
||||||
|
|
||||||
typedef struct
|
typedef struct _CONTEXT86
|
||||||
{
|
{
|
||||||
DWORD ContextFlags;
|
DWORD ContextFlags;
|
||||||
|
|
||||||
|
@ -170,13 +170,148 @@ typedef struct
|
||||||
DWORD EFlags;
|
DWORD EFlags;
|
||||||
DWORD Esp;
|
DWORD Esp;
|
||||||
DWORD SegSs;
|
DWORD SegSs;
|
||||||
} CONTEXT, *PCONTEXT;
|
} CONTEXT86;
|
||||||
|
|
||||||
|
#define CONTEXT86_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
|
||||||
|
#define CONTEXT86_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
|
||||||
|
#define CONTEXT86_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
|
||||||
|
#define CONTEXT86_FLOATING_POINT (CONTEXT_i386 | 0x0008L) /* 387 state */
|
||||||
|
#define CONTEXT86_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010L) /* DB 0-3,6,7 */
|
||||||
|
#define CONTEXT86_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
|
||||||
|
|
||||||
|
/* i386 context definitions */
|
||||||
|
#ifdef __i386__
|
||||||
|
|
||||||
|
#define CONTEXT_X86 0x00010000
|
||||||
|
#define CONTEXT_i386 CONTEXT_X86
|
||||||
|
#define CONTEXT_i486 CONTEXT_X86
|
||||||
|
|
||||||
|
#define CONTEXT_CONTROL CONTEXT86_CONTROL
|
||||||
|
#define CONTEXT_INTEGER CONTEXT86_INTEGER
|
||||||
|
#define CONTEXT_SEGMENTS CONTEXT86_SEGMENTS
|
||||||
|
#define CONTEXT_FLOATING_POINT CONTEXT86_FLOATING_POINT
|
||||||
|
#define CONTEXT_DEBUG_REGISTERS CONTEXT86_DEBUG_REGISTERS
|
||||||
|
#define CONTEXT_FULL CONTEXT86_FULL
|
||||||
|
|
||||||
|
typedef CONTEXT86 CONTEXT;
|
||||||
|
|
||||||
|
#endif /* __i386__ */
|
||||||
|
|
||||||
|
/* PowerPC context definitions (untested) */
|
||||||
|
#ifdef __ppc__
|
||||||
|
|
||||||
|
#define CONTEXT_CONTROL 0x0001
|
||||||
|
#define CONTEXT_FLOATING_POINT 0x0002
|
||||||
|
#define CONTEXT_INTEGER 0x0004
|
||||||
|
#define CONTEXT_DEBUG_REGISTERS 0x0008
|
||||||
|
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
/* These are selected by CONTEXT_FLOATING_POINT */
|
||||||
|
double Fpr0;
|
||||||
|
double Fpr1;
|
||||||
|
double Fpr2;
|
||||||
|
double Fpr3;
|
||||||
|
double Fpr4;
|
||||||
|
double Fpr5;
|
||||||
|
double Fpr6;
|
||||||
|
double Fpr7;
|
||||||
|
double Fpr8;
|
||||||
|
double Fpr9;
|
||||||
|
double Fpr10;
|
||||||
|
double Fpr11;
|
||||||
|
double Fpr12;
|
||||||
|
double Fpr13;
|
||||||
|
double Fpr14;
|
||||||
|
double Fpr15;
|
||||||
|
double Fpr16;
|
||||||
|
double Fpr17;
|
||||||
|
double Fpr18;
|
||||||
|
double Fpr19;
|
||||||
|
double Fpr20;
|
||||||
|
double Fpr21;
|
||||||
|
double Fpr22;
|
||||||
|
double Fpr23;
|
||||||
|
double Fpr24;
|
||||||
|
double Fpr25;
|
||||||
|
double Fpr26;
|
||||||
|
double Fpr27;
|
||||||
|
double Fpr28;
|
||||||
|
double Fpr29;
|
||||||
|
double Fpr30;
|
||||||
|
double Fpr31;
|
||||||
|
double Fpscr;
|
||||||
|
|
||||||
|
/* These are selected by CONTEXT_INTEGER */
|
||||||
|
DWORD Gpr0;
|
||||||
|
DWORD Gpr1;
|
||||||
|
DWORD Gpr2;
|
||||||
|
DWORD Gpr3;
|
||||||
|
DWORD Gpr4;
|
||||||
|
DWORD Gpr5;
|
||||||
|
DWORD Gpr6;
|
||||||
|
DWORD Gpr7;
|
||||||
|
DWORD Gpr8;
|
||||||
|
DWORD Gpr9;
|
||||||
|
DWORD Gpr10;
|
||||||
|
DWORD Gpr11;
|
||||||
|
DWORD Gpr12;
|
||||||
|
DWORD Gpr13;
|
||||||
|
DWORD Gpr14;
|
||||||
|
DWORD Gpr15;
|
||||||
|
DWORD Gpr16;
|
||||||
|
DWORD Gpr17;
|
||||||
|
DWORD Gpr18;
|
||||||
|
DWORD Gpr19;
|
||||||
|
DWORD Gpr20;
|
||||||
|
DWORD Gpr21;
|
||||||
|
DWORD Gpr22;
|
||||||
|
DWORD Gpr23;
|
||||||
|
DWORD Gpr24;
|
||||||
|
DWORD Gpr25;
|
||||||
|
DWORD Gpr26;
|
||||||
|
DWORD Gpr27;
|
||||||
|
DWORD Gpr28;
|
||||||
|
DWORD Gpr29;
|
||||||
|
DWORD Gpr30;
|
||||||
|
DWORD Gpr31;
|
||||||
|
|
||||||
|
DWORD Cr;
|
||||||
|
DWORD Xer;
|
||||||
|
|
||||||
|
/* These are selected by CONTEXT_CONTROL */
|
||||||
|
DWORD Msr;
|
||||||
|
DWORD Iar;
|
||||||
|
DWORD Lr;
|
||||||
|
DWORD Ctr;
|
||||||
|
|
||||||
|
DWORD ContextFlags;
|
||||||
|
DWORD Fill[3];
|
||||||
|
|
||||||
|
/* These are selected by CONTEXT_DEBUG_REGISTERS */
|
||||||
|
DWORD Dr0;
|
||||||
|
DWORD Dr1;
|
||||||
|
DWORD Dr2;
|
||||||
|
DWORD Dr3;
|
||||||
|
DWORD Dr4;
|
||||||
|
DWORD Dr5;
|
||||||
|
DWORD Dr6;
|
||||||
|
DWORD Dr7;
|
||||||
|
} CONTEXT;
|
||||||
|
|
||||||
|
#endif /* __ppc__ */
|
||||||
|
|
||||||
|
#if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
|
||||||
|
#error You need to define a CONTEXT for your CPU
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef CONTEXT *PCONTEXT;
|
||||||
typedef HANDLE *PHANDLE;
|
typedef HANDLE *PHANDLE;
|
||||||
|
|
||||||
#ifdef __WINE__
|
#ifdef __WINE__
|
||||||
|
|
||||||
/* Macros for easier access to context registers */
|
/* Macros for easier access to i386 context registers */
|
||||||
|
|
||||||
#define EAX_reg(context) ((context)->Eax)
|
#define EAX_reg(context) ((context)->Eax)
|
||||||
#define EBX_reg(context) ((context)->Ebx)
|
#define EBX_reg(context) ((context)->Ebx)
|
||||||
|
|
Loading…
Reference in New Issue