Skip to content
Snippets Groups Projects
Commit f6b08dd0 authored by Alexandre Julliard's avatar Alexandre Julliard
Browse files

Added CONTEXT86 definition.

Added PowerPC context as an example (not tested).
parent 3742d77f
No related branches found
No related tags found
No related merge requests found
......@@ -110,18 +110,18 @@ typedef struct _SINGLE_LIST_ENTRY {
/* The Win32 register context */
#define CONTEXT_i386 0x00010000
#define CONTEXT_i486 CONTEXT_i386
#define CONTEXT_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
#define CONTEXT_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
#define CONTEXT_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
#define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 0x0008L) /* 387 state */
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010L) /* DB 0-3,6,7 */
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
/* CONTEXT is the CPU-dependent context; it should be used */
/* wherever a platform-specific context is needed (e.g. exception */
/* handling, Win32 register functions). */
/* CONTEXT86 is the i386-specific context; it should be used */
/* wherever only a 386 context makes sense (e.g. DOS interrupts, */
/* Win16 register functions), so that this code can be compiled */
/* on all platforms. */
#define SIZE_OF_80387_REGISTERS 80
typedef struct
typedef struct _FLOATING_SAVE_AREA
{
DWORD ControlWord;
DWORD StatusWord;
......@@ -132,9 +132,9 @@ typedef struct
DWORD DataSelector;
BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
DWORD Cr0NpxState;
} FLOATING_SAVE_AREA;
} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
typedef struct
typedef struct _CONTEXT86
{
DWORD ContextFlags;
......@@ -170,13 +170,148 @@ typedef struct
DWORD EFlags;
DWORD Esp;
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;
#ifdef __WINE__
/* Macros for easier access to context registers */
/* Macros for easier access to i386 context registers */
#define EAX_reg(context) ((context)->Eax)
#define EBX_reg(context) ((context)->Ebx)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment