(Preliminary) CONTEXT structure for SPARC added.

This commit is contained in:
Ulrich Weigand 1999-11-10 20:18:53 +00:00 committed by Alexandre Julliard
parent d024d5e942
commit 248c75e613
2 changed files with 82 additions and 1 deletions

View File

@ -27,7 +27,12 @@ typedef struct
#ifdef __i386__ #ifdef __i386__
# define GET_IP(context) ((LPVOID)(context)->Eip) # define GET_IP(context) ((LPVOID)(context)->Eip)
#else #endif
#ifdef __sparc__
# define GET_IP(context) ((LPVOID)(context)->pc)
#endif
#ifndef GET_IP
# error You must define GET_IP for this CPU # error You must define GET_IP for this CPU
#endif /* __i386__ */ #endif /* __i386__ */

View File

@ -533,6 +533,82 @@ typedef struct _STACK_FRAME_HEADER
#endif /* __PPC__ */ #endif /* __PPC__ */
#ifdef __sparc__
/*
* FIXME:
*
* There is no official CONTEXT structure defined for the SPARC
* architecture, so I just made one up.
*
* This structure is valid only for 32-bit SPARC architectures,
* not for 64-bit SPARC.
*
* Note that this structure contains only the 'top-level' registers;
* the rest of the register window chain is not visible.
*
* The layout follows the Solaris 'prgregset_t' structure.
*
*/
#define CONTEXT_SPARC 0x10000000
#define CONTEXT_CONTROL (CONTEXT_SPARC | 0x00000001)
#define CONTEXT_FLOATING_POINT (CONTEXT_SPARC | 0x00000002)
#define CONTEXT_INTEGER (CONTEXT_SPARC | 0x00000004)
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
typedef struct _CONTEXT
{
/* These are selected by CONTEXT_INTEGER */
DWORD g0;
DWORD g1;
DWORD g2;
DWORD g3;
DWORD g4;
DWORD g5;
DWORD g6;
DWORD g7;
DWORD o0;
DWORD o1;
DWORD o2;
DWORD o3;
DWORD o4;
DWORD o5;
DWORD o6;
DWORD o7;
DWORD l0;
DWORD l1;
DWORD l2;
DWORD l3;
DWORD l4;
DWORD l5;
DWORD l6;
DWORD l7;
DWORD i0;
DWORD i1;
DWORD i2;
DWORD i3;
DWORD i4;
DWORD i5;
DWORD i6;
DWORD i7;
/* These are selected by CONTEXT_CONTROL */
DWORD psr;
DWORD pc;
DWORD npc;
DWORD y;
DWORD wim;
DWORD tbr;
/* FIXME: floating point registers missing */
} CONTEXT;
#endif
#if !defined(CONTEXT_FULL) && !defined(RC_INVOKED) #if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
#error You need to define a CONTEXT for your CPU #error You need to define a CONTEXT for your CPU
#endif #endif