include: Added some definitions for x86_64 exception handling.

This commit is contained in:
Alexandre Julliard 2008-12-08 19:27:59 +01:00
parent f06d99f67a
commit 345aff3f17
2 changed files with 381 additions and 6 deletions

View file

@ -974,6 +974,13 @@ typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
DWORD64 LastExceptionFromRip;
} CONTEXT;
typedef struct _RUNTIME_FUNCTION
{
DWORD BeginAddress;
DWORD EndAddress;
DWORD UnwindData;
} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
#endif /* __x86_64__ */
/* Alpha context definitions */
@ -1448,6 +1455,245 @@ typedef struct _CONTEXT
#endif /* __sparc__ */
#ifdef __ia64__
#define CONTEXT_IA64 0x00080000
#define CONTEXT_CONTROL (CONTEXT_IA64 | 0x00000001)
#define CONTEXT_LOWER_FLOATING_POINT (CONTEXT_IA64 | 0x00000002)
#define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | 0x00000004)
#define CONTEXT_INTEGER (CONTEXT_IA64 | 0x00000008)
#define CONTEXT_DEBUG (CONTEXT_IA64 | 0x00000010)
#define CONTEXT_IA32_CONTROL (CONTEXT_IA64 | 0x00000020)
#define CONTEXT_FLOATING_POINT (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT)
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL)
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_DEBUG | CONTEXT_IA32_CONTROL)
#define CONTEXT_EXCEPTION_ACTIVE 0x8000000
#define CONTEXT_SERVICE_ACTIVE 0x10000000
#define CONTEXT_EXCEPTION_REQUEST 0x40000000
#define CONTEXT_EXCEPTION_REPORTING 0x80000000
typedef struct _CONTEXT
{
DWORD ContextFlags;
DWORD Fill1[3];
ULONGLONG DbI0;
ULONGLONG DbI1;
ULONGLONG DbI2;
ULONGLONG DbI3;
ULONGLONG DbI4;
ULONGLONG DbI5;
ULONGLONG DbI6;
ULONGLONG DbI7;
ULONGLONG DbD0;
ULONGLONG DbD1;
ULONGLONG DbD2;
ULONGLONG DbD3;
ULONGLONG DbD4;
ULONGLONG DbD5;
ULONGLONG DbD6;
ULONGLONG DbD7;
FLOAT128 FltS0;
FLOAT128 FltS1;
FLOAT128 FltS2;
FLOAT128 FltS3;
FLOAT128 FltT0;
FLOAT128 FltT1;
FLOAT128 FltT2;
FLOAT128 FltT3;
FLOAT128 FltT4;
FLOAT128 FltT5;
FLOAT128 FltT6;
FLOAT128 FltT7;
FLOAT128 FltT8;
FLOAT128 FltT9;
FLOAT128 FltS4;
FLOAT128 FltS5;
FLOAT128 FltS6;
FLOAT128 FltS7;
FLOAT128 FltS8;
FLOAT128 FltS9;
FLOAT128 FltS10;
FLOAT128 FltS11;
FLOAT128 FltS12;
FLOAT128 FltS13;
FLOAT128 FltS14;
FLOAT128 FltS15;
FLOAT128 FltS16;
FLOAT128 FltS17;
FLOAT128 FltS18;
FLOAT128 FltS19;
FLOAT128 FltF32;
FLOAT128 FltF33;
FLOAT128 FltF34;
FLOAT128 FltF35;
FLOAT128 FltF36;
FLOAT128 FltF37;
FLOAT128 FltF38;
FLOAT128 FltF39;
FLOAT128 FltF40;
FLOAT128 FltF41;
FLOAT128 FltF42;
FLOAT128 FltF43;
FLOAT128 FltF44;
FLOAT128 FltF45;
FLOAT128 FltF46;
FLOAT128 FltF47;
FLOAT128 FltF48;
FLOAT128 FltF49;
FLOAT128 FltF50;
FLOAT128 FltF51;
FLOAT128 FltF52;
FLOAT128 FltF53;
FLOAT128 FltF54;
FLOAT128 FltF55;
FLOAT128 FltF56;
FLOAT128 FltF57;
FLOAT128 FltF58;
FLOAT128 FltF59;
FLOAT128 FltF60;
FLOAT128 FltF61;
FLOAT128 FltF62;
FLOAT128 FltF63;
FLOAT128 FltF64;
FLOAT128 FltF65;
FLOAT128 FltF66;
FLOAT128 FltF67;
FLOAT128 FltF68;
FLOAT128 FltF69;
FLOAT128 FltF70;
FLOAT128 FltF71;
FLOAT128 FltF72;
FLOAT128 FltF73;
FLOAT128 FltF74;
FLOAT128 FltF75;
FLOAT128 FltF76;
FLOAT128 FltF77;
FLOAT128 FltF78;
FLOAT128 FltF79;
FLOAT128 FltF80;
FLOAT128 FltF81;
FLOAT128 FltF82;
FLOAT128 FltF83;
FLOAT128 FltF84;
FLOAT128 FltF85;
FLOAT128 FltF86;
FLOAT128 FltF87;
FLOAT128 FltF88;
FLOAT128 FltF89;
FLOAT128 FltF90;
FLOAT128 FltF91;
FLOAT128 FltF92;
FLOAT128 FltF93;
FLOAT128 FltF94;
FLOAT128 FltF95;
FLOAT128 FltF96;
FLOAT128 FltF97;
FLOAT128 FltF98;
FLOAT128 FltF99;
FLOAT128 FltF100;
FLOAT128 FltF101;
FLOAT128 FltF102;
FLOAT128 FltF103;
FLOAT128 FltF104;
FLOAT128 FltF105;
FLOAT128 FltF106;
FLOAT128 FltF107;
FLOAT128 FltF108;
FLOAT128 FltF109;
FLOAT128 FltF110;
FLOAT128 FltF111;
FLOAT128 FltF112;
FLOAT128 FltF113;
FLOAT128 FltF114;
FLOAT128 FltF115;
FLOAT128 FltF116;
FLOAT128 FltF117;
FLOAT128 FltF118;
FLOAT128 FltF119;
FLOAT128 FltF120;
FLOAT128 FltF121;
FLOAT128 FltF122;
FLOAT128 FltF123;
FLOAT128 FltF124;
FLOAT128 FltF125;
FLOAT128 FltF126;
FLOAT128 FltF127;
ULONGLONG StFPSR;
ULONGLONG IntGp;
ULONGLONG IntT0;
ULONGLONG IntT1;
ULONGLONG IntS0;
ULONGLONG IntS1;
ULONGLONG IntS2;
ULONGLONG IntS3;
ULONGLONG IntV0;
ULONGLONG IntT2;
ULONGLONG IntT3;
ULONGLONG IntT4;
ULONGLONG IntSp;
ULONGLONG IntTeb;
ULONGLONG IntT5;
ULONGLONG IntT6;
ULONGLONG IntT7;
ULONGLONG IntT8;
ULONGLONG IntT9;
ULONGLONG IntT10;
ULONGLONG IntT11;
ULONGLONG IntT12;
ULONGLONG IntT13;
ULONGLONG IntT14;
ULONGLONG IntT15;
ULONGLONG IntT16;
ULONGLONG IntT17;
ULONGLONG IntT18;
ULONGLONG IntT19;
ULONGLONG IntT20;
ULONGLONG IntT21;
ULONGLONG IntT22;
ULONGLONG IntNats;
ULONGLONG Preds;
ULONGLONG BrRp;
ULONGLONG BrS0;
ULONGLONG BrS1;
ULONGLONG BrS2;
ULONGLONG BrS3;
ULONGLONG BrS4;
ULONGLONG BrT0;
ULONGLONG BrT1;
ULONGLONG ApUNAT;
ULONGLONG ApLC;
ULONGLONG ApEC;
ULONGLONG ApCCV;
ULONGLONG ApDCR;
ULONGLONG RsPFS;
ULONGLONG RsBSP;
ULONGLONG RsBSPSTORE;
ULONGLONG RsRSC;
ULONGLONG RsRNAT;
ULONGLONG StIPSR;
ULONGLONG StIIP;
ULONGLONG StIFS;
ULONGLONG StFCR;
ULONGLONG Eflag;
ULONGLONG SegCSD;
ULONGLONG SegSSD;
ULONGLONG Cflag;
ULONGLONG StFSR;
ULONGLONG StFIR;
ULONGLONG StFDR;
ULONGLONG UNUSEDPACK;
} CONTEXT, *PCONTEXT;
typedef struct _RUNTIME_FUNCTION
{
ULONG BeginAddress;
ULONG EndAddress;
ULONG UnwindInfoAddress;
} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
#endif /* __ia64__ */
#if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
#error You need to define a CONTEXT for your CPU
#endif

View file

@ -844,12 +844,6 @@ typedef struct _FRAME_POINTERS {
#define UNWIND_HISTORY_TABLE_SIZE 12
typedef struct _RUNTIME_FUNCTION {
ULONG BeginAddress;
ULONG EndAddress;
ULONG UnwindInfoAddress;
} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
ULONG64 ImageBase;
ULONG64 Gp;
@ -864,8 +858,143 @@ typedef struct _UNWIND_HISTORY_TABLE {
UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
typedef struct _KNONVOLATILE_CONTEXT_POINTERS
{
PFLOAT128 FltS0;
PFLOAT128 FltS1;
PFLOAT128 FltS2;
PFLOAT128 FltS3;
PFLOAT128 HighFloatingContext[10];
PFLOAT128 FltS4;
PFLOAT128 FltS5;
PFLOAT128 FltS6;
PFLOAT128 FltS7;
PFLOAT128 FltS8;
PFLOAT128 FltS9;
PFLOAT128 FltS10;
PFLOAT128 FltS11;
PFLOAT128 FltS12;
PFLOAT128 FltS13;
PFLOAT128 FltS14;
PFLOAT128 FltS15;
PFLOAT128 FltS16;
PFLOAT128 FltS17;
PFLOAT128 FltS18;
PFLOAT128 FltS19;
PULONGLONG IntS0;
PULONGLONG IntS1;
PULONGLONG IntS2;
PULONGLONG IntS3;
PULONGLONG IntSp;
PULONGLONG IntS0Nat;
PULONGLONG IntS1Nat;
PULONGLONG IntS2Nat;
PULONGLONG IntS3Nat;
PULONGLONG IntSpNat;
PULONGLONG Preds;
PULONGLONG BrRp;
PULONGLONG BrS0;
PULONGLONG BrS1;
PULONGLONG BrS2;
PULONGLONG BrS3;
PULONGLONG BrS4;
PULONGLONG ApUNAT;
PULONGLONG ApLC;
PULONGLONG ApEC;
PULONGLONG RsPFS;
PULONGLONG StFSR;
PULONGLONG StFIR;
PULONGLONG StFDR;
PULONGLONG Cflag;
} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
ULONGLONG WINAPI RtlVirtualUnwind(ULONGLONG,ULONGLONG,RUNTIME_FUNCTION*,CONTEXT*,BOOLEAN*,FRAME_POINTERS*,KNONVOLATILE_CONTEXT_POINTERS*);
#endif /* defined(__ia64__) */
/***********************************************************************
* x86-64 specific types and data structures
*/
#ifdef __x86_64__
#define UNWIND_HISTORY_TABLE_SIZE 12
typedef struct _UNWIND_HISTORY_TABLE_ENTRY
{
ULONG64 ImageBase;
PRUNTIME_FUNCTION FunctionEntry;
} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
#define UNWIND_HISTORY_TABLE_NONE 0
#define UNWIND_HISTORY_TABLE_GLOBAL 1
#define UNWIND_HISTORY_TABLE_LOCAL 2
typedef struct _UNWIND_HISTORY_TABLE
{
ULONG Count;
UCHAR Search;
ULONG64 LowAddress;
ULONG64 HighAddress;
UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
typedef struct _KNONVOLATILE_CONTEXT_POINTERS
{
union
{
PM128A FloatingContext[16];
struct
{
PM128A Xmm0;
PM128A Xmm1;
PM128A Xmm2;
PM128A Xmm3;
PM128A Xmm4;
PM128A Xmm5;
PM128A Xmm6;
PM128A Xmm7;
PM128A Xmm8;
PM128A Xmm9;
PM128A Xmm10;
PM128A Xmm11;
PM128A Xmm12;
PM128A Xmm13;
PM128A Xmm14;
PM128A Xmm15;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME1;
union
{
PULONG64 IntegerContext[16];
struct
{
PULONG64 Rax;
PULONG64 Rcx;
PULONG64 Rdx;
PULONG64 Rbx;
PULONG64 Rsp;
PULONG64 Rbp;
PULONG64 Rsi;
PULONG64 Rdi;
PULONG64 R8;
PULONG64 R9;
PULONG64 R10;
PULONG64 R11;
PULONG64 R12;
PULONG64 R13;
PULONG64 R14;
PULONG64 R15;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME2;
} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
PVOID WINAPI RtlVirtualUnwind(ULONG,ULONG64,ULONG64,RUNTIME_FUNCTION*,CONTEXT*,PVOID*,ULONG64*,KNONVOLATILE_CONTEXT_POINTERS*);
#endif /* __x86_64 */
/***********************************************************************
* Types and data structures
*/