include: Define all the context structures on all platforms.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
0214c73d46
commit
7a25671c38
538
include/winnt.h
538
include/winnt.h
|
@ -977,22 +977,13 @@ typedef enum _HEAP_INFORMATION_CLASS {
|
|||
|
||||
#include <excpt.h>
|
||||
|
||||
struct _CONTEXT;
|
||||
struct _EXCEPTION_POINTERS;
|
||||
struct _EXCEPTION_RECORD;
|
||||
|
||||
typedef EXCEPTION_DISPOSITION WINAPI EXCEPTION_ROUTINE(struct _EXCEPTION_RECORD*,PVOID,
|
||||
struct _CONTEXT*,PVOID);
|
||||
typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;
|
||||
|
||||
/* The Win32 register context */
|
||||
|
||||
/* i386 context definitions */
|
||||
#ifdef __i386__
|
||||
|
||||
#define SIZE_OF_80387_REGISTERS 80
|
||||
#define I386_SIZE_OF_80387_REGISTERS 80
|
||||
|
||||
typedef struct _FLOATING_SAVE_AREA
|
||||
typedef struct _I386_FLOATING_SAVE_AREA
|
||||
{
|
||||
DWORD ControlWord;
|
||||
DWORD StatusWord;
|
||||
|
@ -1001,13 +992,14 @@ typedef struct _FLOATING_SAVE_AREA
|
|||
DWORD ErrorSelector;
|
||||
DWORD DataOffset;
|
||||
DWORD DataSelector;
|
||||
BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
|
||||
BYTE RegisterArea[I386_SIZE_OF_80387_REGISTERS];
|
||||
DWORD Cr0NpxState;
|
||||
} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
|
||||
} I386_FLOATING_SAVE_AREA, WOW64_FLOATING_SAVE_AREA, *PWOW64_FLOATING_SAVE_AREA;
|
||||
|
||||
#define MAXIMUM_SUPPORTED_EXTENSION 512
|
||||
#define I386_MAXIMUM_SUPPORTED_EXTENSION 512
|
||||
|
||||
typedef struct _CONTEXT
|
||||
#include "pshpack4.h"
|
||||
typedef struct _I386_CONTEXT
|
||||
{
|
||||
DWORD ContextFlags; /* 000 */
|
||||
|
||||
|
@ -1020,7 +1012,7 @@ typedef struct _CONTEXT
|
|||
DWORD Dr7; /* 018 */
|
||||
|
||||
/* These are selected by CONTEXT_FLOATING_POINT */
|
||||
FLOATING_SAVE_AREA FloatSave; /* 01c */
|
||||
I386_FLOATING_SAVE_AREA FloatSave; /* 01c */
|
||||
|
||||
/* These are selected by CONTEXT_SEGMENTS */
|
||||
DWORD SegGs; /* 08c */
|
||||
|
@ -1044,26 +1036,39 @@ typedef struct _CONTEXT
|
|||
DWORD Esp; /* 0c4 */
|
||||
DWORD SegSs; /* 0c8 */
|
||||
|
||||
BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION]; /* 0xcc */
|
||||
} CONTEXT, *PCONTEXT;
|
||||
BYTE ExtendedRegisters[I386_MAXIMUM_SUPPORTED_EXTENSION]; /* 0xcc */
|
||||
} I386_CONTEXT, WOW64_CONTEXT, *PWOW64_CONTEXT;
|
||||
#include "poppack.h"
|
||||
|
||||
#define CONTEXT_i386 0x00010000
|
||||
#define CONTEXT_i486 0x00010000
|
||||
|
||||
#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 | 0x0008) /* 387 state */
|
||||
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010) /* DB 0-3,6,7 */
|
||||
#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | 0x0020)
|
||||
#define CONTEXT_XSTATE (CONTEXT_i386 | 0x0040)
|
||||
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
|
||||
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
|
||||
CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS)
|
||||
#define CONTEXT_I386_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
|
||||
#define CONTEXT_I386_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
|
||||
#define CONTEXT_I386_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
|
||||
#define CONTEXT_I386_FLOATING_POINT (CONTEXT_i386 | 0x0008) /* 387 state */
|
||||
#define CONTEXT_I386_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010) /* DB 0-3,6,7 */
|
||||
#define CONTEXT_I386_EXTENDED_REGISTERS (CONTEXT_i386 | 0x0020)
|
||||
#define CONTEXT_I386_XSTATE (CONTEXT_i386 | 0x0040)
|
||||
#define CONTEXT_I386_FULL (CONTEXT_I386_CONTROL | CONTEXT_I386_INTEGER | CONTEXT_I386_SEGMENTS)
|
||||
#define CONTEXT_I386_ALL (CONTEXT_I386_FULL | CONTEXT_I386_FLOATING_POINT | CONTEXT_I386_DEBUG_REGISTERS | CONTEXT_I386_EXTENDED_REGISTERS)
|
||||
|
||||
#define EXCEPTION_READ_FAULT 0
|
||||
#define EXCEPTION_WRITE_FAULT 1
|
||||
#define EXCEPTION_EXECUTE_FAULT 8
|
||||
#ifdef __i386__
|
||||
|
||||
#define CONTEXT_CONTROL CONTEXT_I386_CONTROL
|
||||
#define CONTEXT_INTEGER CONTEXT_I386_INTEGER
|
||||
#define CONTEXT_SEGMENTS CONTEXT_I386_SEGMENTS
|
||||
#define CONTEXT_FLOATING_POINT CONTEXT_I386_FLOATING_POINT
|
||||
#define CONTEXT_DEBUG_REGISTERS CONTEXT_I386_DEBUG_REGISTERS
|
||||
#define CONTEXT_EXTENDED_REGISTERS CONTEXT_I386_EXTENDED_REGISTERS
|
||||
#define CONTEXT_XSTATE CONTEXT_I386_XSTATE
|
||||
#define CONTEXT_FULL CONTEXT_I386_FULL
|
||||
#define CONTEXT_ALL CONTEXT_I386_ALL
|
||||
#define SIZE_OF_80387_REGISTERS I386_SIZE_OF_80387_REGISTERS
|
||||
#define MAXIMUM_SUPPORTED_EXTENSION I386_MAXIMUM_SUPPORTED_EXTENSION
|
||||
|
||||
typedef I386_FLOATING_SAVE_AREA FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
|
||||
typedef I386_CONTEXT CONTEXT, *PCONTEXT;
|
||||
|
||||
#endif /* __i386__ */
|
||||
|
||||
|
@ -1117,26 +1122,28 @@ typedef struct _XSAVE_FORMAT {
|
|||
} XSAVE_FORMAT, *PXSAVE_FORMAT;
|
||||
|
||||
/* x86-64 context definitions */
|
||||
#if defined(__x86_64__)
|
||||
|
||||
typedef struct _AMD64_RUNTIME_FUNCTION
|
||||
{
|
||||
DWORD BeginAddress;
|
||||
DWORD EndAddress;
|
||||
DWORD UnwindData;
|
||||
} AMD64_RUNTIME_FUNCTION;
|
||||
|
||||
#define CONTEXT_AMD64 0x00100000
|
||||
|
||||
#define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x0001)
|
||||
#define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x0002)
|
||||
#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x0004)
|
||||
#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x0008)
|
||||
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x0010)
|
||||
#define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x0040)
|
||||
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
|
||||
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
|
||||
|
||||
#define EXCEPTION_READ_FAULT 0
|
||||
#define EXCEPTION_WRITE_FAULT 1
|
||||
#define EXCEPTION_EXECUTE_FAULT 8
|
||||
#define CONTEXT_AMD64_CONTROL (CONTEXT_AMD64 | 0x0001)
|
||||
#define CONTEXT_AMD64_INTEGER (CONTEXT_AMD64 | 0x0002)
|
||||
#define CONTEXT_AMD64_SEGMENTS (CONTEXT_AMD64 | 0x0004)
|
||||
#define CONTEXT_AMD64_FLOATING_POINT (CONTEXT_AMD64 | 0x0008)
|
||||
#define CONTEXT_AMD64_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x0010)
|
||||
#define CONTEXT_AMD64_XSTATE (CONTEXT_AMD64 | 0x0040)
|
||||
#define CONTEXT_AMD64_FULL (CONTEXT_AMD64_CONTROL | CONTEXT_AMD64_INTEGER | CONTEXT_AMD64_FLOATING_POINT)
|
||||
#define CONTEXT_AMD64_ALL (CONTEXT_AMD64_CONTROL | CONTEXT_AMD64_INTEGER | CONTEXT_AMD64_SEGMENTS | CONTEXT_AMD64_FLOATING_POINT | CONTEXT_AMD64_DEBUG_REGISTERS)
|
||||
|
||||
typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
|
||||
|
||||
typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
|
||||
typedef struct DECLSPEC_ALIGN(16) _AMD64_CONTEXT {
|
||||
DWORD64 P1Home; /* 000 */
|
||||
DWORD64 P2Home; /* 008 */
|
||||
DWORD64 P3Home; /* 010 */
|
||||
|
@ -1221,35 +1228,21 @@ typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
|
|||
DWORD64 LastBranchFromRip; /* 4b8 */
|
||||
DWORD64 LastExceptionToRip; /* 4c0 */
|
||||
DWORD64 LastExceptionFromRip; /* 4c8 */
|
||||
} CONTEXT, *PCONTEXT;
|
||||
} AMD64_CONTEXT;
|
||||
|
||||
typedef struct _RUNTIME_FUNCTION
|
||||
{
|
||||
DWORD BeginAddress;
|
||||
DWORD EndAddress;
|
||||
DWORD UnwindData;
|
||||
} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
|
||||
#ifdef __x86_64__
|
||||
|
||||
#define UNWIND_HISTORY_TABLE_SIZE 12
|
||||
#define CONTEXT_CONTROL CONTEXT_AMD64_CONTROL
|
||||
#define CONTEXT_INTEGER CONTEXT_AMD64_INTEGER
|
||||
#define CONTEXT_SEGMENTS CONTEXT_AMD64_SEGMENTS
|
||||
#define CONTEXT_FLOATING_POINT CONTEXT_AMD64_FLOATING_POINT
|
||||
#define CONTEXT_DEBUG_REGISTERS CONTEXT_AMD64_DEBUG_REGISTERS
|
||||
#define CONTEXT_XSTATE CONTEXT_AMD64_XSTATE
|
||||
#define CONTEXT_FULL CONTEXT_AMD64_FULL
|
||||
#define CONTEXT_ALL CONTEXT_AMD64_ALL
|
||||
|
||||
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 AMD64_CONTEXT CONTEXT, *PCONTEXT;
|
||||
typedef AMD64_RUNTIME_FUNCTION RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
|
||||
|
||||
typedef struct _KNONVOLATILE_CONTEXT_POINTERS
|
||||
{
|
||||
|
@ -1302,31 +1295,6 @@ typedef struct _KNONVOLATILE_CONTEXT_POINTERS
|
|||
} DUMMYUNIONNAME2;
|
||||
} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
|
||||
|
||||
typedef struct _DISPATCHER_CONTEXT
|
||||
{
|
||||
ULONG64 ControlPc;
|
||||
ULONG64 ImageBase;
|
||||
PRUNTIME_FUNCTION FunctionEntry;
|
||||
ULONG64 EstablisherFrame;
|
||||
ULONG64 TargetIp;
|
||||
PCONTEXT ContextRecord;
|
||||
PEXCEPTION_ROUTINE LanguageHandler;
|
||||
PVOID HandlerData;
|
||||
PUNWIND_HISTORY_TABLE HistoryTable;
|
||||
DWORD ScopeIndex;
|
||||
DWORD Fill0;
|
||||
} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
|
||||
|
||||
typedef LONG (CALLBACK *PEXCEPTION_FILTER)(struct _EXCEPTION_POINTERS*,PVOID);
|
||||
typedef void (CALLBACK *PTERMINATION_HANDLER)(BOOLEAN,PVOID);
|
||||
|
||||
NTSYSAPI PVOID WINAPI RtlVirtualUnwind(ULONG,ULONG64,ULONG64,RUNTIME_FUNCTION*,CONTEXT*,PVOID*,ULONG64*,KNONVOLATILE_CONTEXT_POINTERS*);
|
||||
|
||||
#define UNW_FLAG_NHANDLER 0
|
||||
#define UNW_FLAG_EHANDLER 1
|
||||
#define UNW_FLAG_UHANDLER 2
|
||||
#define UNW_FLAG_CHAININFO 4
|
||||
|
||||
#endif /* __x86_64__ */
|
||||
|
||||
#define XSTATE_LEGACY_FLOATING_POINT 0
|
||||
|
@ -1415,27 +1383,18 @@ typedef struct _CONTEXT_EX
|
|||
#endif
|
||||
} CONTEXT_EX, *PCONTEXT_EX;
|
||||
|
||||
#ifdef __arm__
|
||||
|
||||
/* The following flags control the contents of the CONTEXT structure. */
|
||||
|
||||
#define CONTEXT_ARM 0x0200000
|
||||
#define CONTEXT_CONTROL (CONTEXT_ARM | 0x00000001)
|
||||
#define CONTEXT_INTEGER (CONTEXT_ARM | 0x00000002)
|
||||
#define CONTEXT_FLOATING_POINT (CONTEXT_ARM | 0x00000004)
|
||||
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008)
|
||||
|
||||
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
|
||||
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
|
||||
|
||||
#define EXCEPTION_READ_FAULT 0
|
||||
#define EXCEPTION_WRITE_FAULT 1
|
||||
#define EXCEPTION_EXECUTE_FAULT 8
|
||||
#define CONTEXT_ARM_CONTROL (CONTEXT_ARM | 0x00000001)
|
||||
#define CONTEXT_ARM_INTEGER (CONTEXT_ARM | 0x00000002)
|
||||
#define CONTEXT_ARM_FLOATING_POINT (CONTEXT_ARM | 0x00000004)
|
||||
#define CONTEXT_ARM_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008)
|
||||
#define CONTEXT_ARM_FULL (CONTEXT_ARM_CONTROL | CONTEXT_ARM_INTEGER)
|
||||
#define CONTEXT_ARM_ALL (CONTEXT_ARM_FULL | CONTEXT_ARM_FLOATING_POINT | CONTEXT_ARM_DEBUG_REGISTERS)
|
||||
|
||||
#define ARM_MAX_BREAKPOINTS 8
|
||||
#define ARM_MAX_WATCHPOINTS 1
|
||||
|
||||
typedef struct _RUNTIME_FUNCTION
|
||||
typedef struct _IMAGE_ARM_RUNTIME_FUNCTION
|
||||
{
|
||||
DWORD BeginAddress;
|
||||
union {
|
||||
|
@ -1452,35 +1411,15 @@ typedef struct _RUNTIME_FUNCTION
|
|||
DWORD StackAdjust : 10;
|
||||
} DUMMYSTRUCTNAME;
|
||||
} DUMMYUNIONNAME;
|
||||
} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
|
||||
} IMAGE_ARM_RUNTIME_FUNCTION_ENTRY, *PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY;
|
||||
|
||||
#define UNWIND_HISTORY_TABLE_SIZE 12
|
||||
|
||||
typedef struct _UNWIND_HISTORY_TABLE_ENTRY
|
||||
{
|
||||
DWORD ImageBase;
|
||||
PRUNTIME_FUNCTION FunctionEntry;
|
||||
} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
|
||||
|
||||
typedef struct _UNWIND_HISTORY_TABLE
|
||||
{
|
||||
DWORD Count;
|
||||
BYTE LocalHint;
|
||||
BYTE GlobalHint;
|
||||
BYTE Search;
|
||||
BYTE Once;
|
||||
DWORD LowAddress;
|
||||
DWORD HighAddress;
|
||||
UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
|
||||
} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
|
||||
|
||||
typedef struct _NEON128
|
||||
typedef struct _ARM_NEON128
|
||||
{
|
||||
ULONGLONG Low;
|
||||
LONGLONG High;
|
||||
} NEON128, *PNEON128;
|
||||
} ARM_NEON128;
|
||||
|
||||
typedef struct _CONTEXT
|
||||
typedef struct _ARM_CONTEXT
|
||||
{
|
||||
ULONG ContextFlags; /* 000 */
|
||||
/* CONTEXT_INTEGER */
|
||||
|
@ -1507,7 +1446,7 @@ typedef struct _CONTEXT
|
|||
ULONG Padding; /* 04c */
|
||||
union
|
||||
{
|
||||
NEON128 Q[16];
|
||||
ARM_NEON128 Q[16];
|
||||
ULONGLONG D[32];
|
||||
ULONG S[32];
|
||||
} DUMMYUNIONNAME; /* 050 */
|
||||
|
@ -1517,7 +1456,20 @@ typedef struct _CONTEXT
|
|||
ULONG Wvr[ARM_MAX_WATCHPOINTS]; /* 190 */
|
||||
ULONG Wcr[ARM_MAX_WATCHPOINTS]; /* 194 */
|
||||
ULONG Padding2[2]; /* 198 */
|
||||
} CONTEXT, *PCONTEXT;
|
||||
} ARM_CONTEXT;
|
||||
|
||||
#ifdef __arm__
|
||||
|
||||
#define CONTEXT_CONTROL CONTEXT_ARM_CONTROL
|
||||
#define CONTEXT_INTEGER CONTEXT_ARM_INTEGER
|
||||
#define CONTEXT_FLOATING_POINT CONTEXT_ARM_FLOATING_POINT
|
||||
#define CONTEXT_DEBUG_REGISTERS CONTEXT_ARM_DEBUG_REGISTERS
|
||||
#define CONTEXT_FULL CONTEXT_ARM_FULL
|
||||
#define CONTEXT_ALL CONTEXT_ARM_ALL
|
||||
|
||||
typedef IMAGE_ARM_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
|
||||
typedef ARM_NEON128 NEON128, *PNEON128;
|
||||
typedef ARM_CONTEXT CONTEXT, *PCONTEXT;
|
||||
|
||||
typedef struct _KNONVOLATILE_CONTEXT_POINTERS
|
||||
{
|
||||
|
@ -1540,56 +1492,23 @@ typedef struct _KNONVOLATILE_CONTEXT_POINTERS
|
|||
PULONGLONG D15;
|
||||
} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
|
||||
|
||||
typedef struct _DISPATCHER_CONTEXT
|
||||
{
|
||||
DWORD ControlPc;
|
||||
DWORD ImageBase;
|
||||
PRUNTIME_FUNCTION FunctionEntry;
|
||||
DWORD EstablisherFrame;
|
||||
DWORD TargetPc;
|
||||
PCONTEXT ContextRecord;
|
||||
PEXCEPTION_ROUTINE LanguageHandler;
|
||||
PVOID HandlerData;
|
||||
PUNWIND_HISTORY_TABLE HistoryTable;
|
||||
DWORD ScopeIndex;
|
||||
BOOLEAN ControlPcIsUnwound;
|
||||
PBYTE NonVolatileRegisters;
|
||||
DWORD Reserved;
|
||||
} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
|
||||
|
||||
typedef LONG (CALLBACK *PEXCEPTION_FILTER)(struct _EXCEPTION_POINTERS*,DWORD);
|
||||
typedef void (CALLBACK *PTERMINATION_HANDLER)(BOOLEAN,DWORD);
|
||||
|
||||
NTSYSAPI PVOID WINAPI RtlVirtualUnwind(DWORD,DWORD,DWORD,RUNTIME_FUNCTION*,CONTEXT*,PVOID*,DWORD*,KNONVOLATILE_CONTEXT_POINTERS*);
|
||||
|
||||
#define UNW_FLAG_NHANDLER 0
|
||||
#define UNW_FLAG_EHANDLER 1
|
||||
#define UNW_FLAG_UHANDLER 2
|
||||
|
||||
#endif /* __arm__ */
|
||||
|
||||
#ifdef __aarch64__
|
||||
|
||||
#define CONTEXT_ARM64 0x400000
|
||||
#define CONTEXT_CONTROL (CONTEXT_ARM64 | 0x00000001)
|
||||
#define CONTEXT_INTEGER (CONTEXT_ARM64 | 0x00000002)
|
||||
#define CONTEXT_FLOATING_POINT (CONTEXT_ARM64 | 0x00000004)
|
||||
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)
|
||||
#define CONTEXT_ARM64_CONTROL (CONTEXT_ARM64 | 0x00000001)
|
||||
#define CONTEXT_ARM64_INTEGER (CONTEXT_ARM64 | 0x00000002)
|
||||
#define CONTEXT_ARM64_FLOATING_POINT (CONTEXT_ARM64 | 0x00000004)
|
||||
#define CONTEXT_ARM64_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)
|
||||
#define CONTEXT_ARM64_X18 (CONTEXT_ARM64 | 0x00000010)
|
||||
#define CONTEXT_ARM64_FULL (CONTEXT_ARM64_CONTROL | CONTEXT_ARM64_INTEGER | CONTEXT_ARM64_FLOATING_POINT)
|
||||
#define CONTEXT_ARM64_ALL (CONTEXT_ARM64_FULL | CONTEXT_ARM64_DEBUG_REGISTERS | CONTEXT_ARM64_X18)
|
||||
|
||||
#define CONTEXT_UNWOUND_TO_CALL 0x20000000
|
||||
|
||||
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
|
||||
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_ARM64_X18)
|
||||
|
||||
#define EXCEPTION_READ_FAULT 0
|
||||
#define EXCEPTION_WRITE_FAULT 1
|
||||
#define EXCEPTION_EXECUTE_FAULT 8
|
||||
|
||||
#define ARM64_MAX_BREAKPOINTS 8
|
||||
#define ARM64_MAX_WATCHPOINTS 2
|
||||
|
||||
typedef struct _RUNTIME_FUNCTION
|
||||
typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY
|
||||
{
|
||||
DWORD BeginAddress;
|
||||
union
|
||||
|
@ -1606,29 +1525,11 @@ typedef struct _RUNTIME_FUNCTION
|
|||
DWORD FrameSize : 9;
|
||||
} DUMMYSTRUCTNAME;
|
||||
} DUMMYUNIONNAME;
|
||||
} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
|
||||
} IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY, *PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
|
||||
|
||||
#define UNWIND_HISTORY_TABLE_SIZE 12
|
||||
typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY ARM64_RUNTIME_FUNCTION, *PARM64_RUNTIME_FUNCTION;
|
||||
|
||||
typedef struct _UNWIND_HISTORY_TABLE_ENTRY
|
||||
{
|
||||
DWORD64 ImageBase;
|
||||
PRUNTIME_FUNCTION FunctionEntry;
|
||||
} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
|
||||
|
||||
typedef struct _UNWIND_HISTORY_TABLE
|
||||
{
|
||||
DWORD Count;
|
||||
BYTE LocalHint;
|
||||
BYTE GlobalHint;
|
||||
BYTE Search;
|
||||
BYTE Once;
|
||||
DWORD64 LowAddress;
|
||||
DWORD64 HighAddress;
|
||||
UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
|
||||
} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
|
||||
|
||||
typedef union _NEON128
|
||||
typedef union _ARM64_NT_NEON128
|
||||
{
|
||||
struct
|
||||
{
|
||||
|
@ -1639,9 +1540,9 @@ typedef union _NEON128
|
|||
float S[4];
|
||||
WORD H[8];
|
||||
BYTE B[16];
|
||||
} NEON128, *PNEON128;
|
||||
} ARM64_NT_NEON128, *PARM64_NT_NEON128;
|
||||
|
||||
typedef struct _CONTEXT
|
||||
typedef struct DECLSPEC_ALIGN(16) _ARM64_NT_CONTEXT
|
||||
{
|
||||
ULONG ContextFlags; /* 000 */
|
||||
/* CONTEXT_INTEGER */
|
||||
|
@ -1688,7 +1589,7 @@ typedef struct _CONTEXT
|
|||
DWORD64 Sp; /* 100 */
|
||||
DWORD64 Pc; /* 108 */
|
||||
/* CONTEXT_FLOATING_POINT */
|
||||
NEON128 V[32]; /* 110 */
|
||||
ARM64_NT_NEON128 V[32]; /* 110 */
|
||||
DWORD Fpcr; /* 310 */
|
||||
DWORD Fpsr; /* 314 */
|
||||
/* CONTEXT_DEBUG_REGISTERS */
|
||||
|
@ -1696,7 +1597,20 @@ typedef struct _CONTEXT
|
|||
DWORD64 Bvr[ARM64_MAX_BREAKPOINTS]; /* 338 */
|
||||
DWORD Wcr[ARM64_MAX_WATCHPOINTS]; /* 378 */
|
||||
DWORD64 Wvr[ARM64_MAX_WATCHPOINTS]; /* 380 */
|
||||
} CONTEXT, *PCONTEXT;
|
||||
} ARM64_NT_CONTEXT, *PARM64_NT_CONTEXT;
|
||||
|
||||
#ifdef __aarch64__
|
||||
|
||||
#define CONTEXT_CONTROL CONTEXT_ARM64_CONTROL
|
||||
#define CONTEXT_INTEGER CONTEXT_ARM64_INTEGER
|
||||
#define CONTEXT_FLOATING_POINT CONTEXT_ARM64_FLOATING_POINT
|
||||
#define CONTEXT_DEBUG_REGISTERS CONTEXT_ARM64_DEBUG_REGISTERS
|
||||
#define CONTEXT_FULL CONTEXT_ARM64_FULL
|
||||
#define CONTEXT_ALL CONTEXT_ARM64_ALL
|
||||
|
||||
typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
|
||||
typedef ARM64_NT_NEON128 NEON128, *PNEON128;
|
||||
typedef ARM64_NT_CONTEXT CONTEXT, *PCONTEXT;
|
||||
|
||||
typedef struct _KNONVOLATILE_CONTEXT_POINTERS
|
||||
{
|
||||
|
@ -1722,31 +1636,6 @@ typedef struct _KNONVOLATILE_CONTEXT_POINTERS
|
|||
PDWORD64 D15;
|
||||
} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
|
||||
|
||||
typedef struct _DISPATCHER_CONTEXT
|
||||
{
|
||||
ULONG_PTR ControlPc;
|
||||
ULONG_PTR ImageBase;
|
||||
PRUNTIME_FUNCTION FunctionEntry;
|
||||
ULONG_PTR EstablisherFrame;
|
||||
ULONG_PTR TargetPc;
|
||||
PCONTEXT ContextRecord;
|
||||
PEXCEPTION_ROUTINE LanguageHandler;
|
||||
PVOID HandlerData;
|
||||
PUNWIND_HISTORY_TABLE HistoryTable;
|
||||
DWORD ScopeIndex;
|
||||
BOOLEAN ControlPcIsUnwound;
|
||||
PBYTE NonVolatileRegisters;
|
||||
} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
|
||||
|
||||
typedef LONG (CALLBACK *PEXCEPTION_FILTER)(struct _EXCEPTION_POINTERS*,DWORD64);
|
||||
typedef void (CALLBACK *PTERMINATION_HANDLER)(BOOLEAN,DWORD64);
|
||||
|
||||
NTSYSAPI PVOID WINAPI RtlVirtualUnwind(DWORD,ULONG_PTR,ULONG_PTR,RUNTIME_FUNCTION*,CONTEXT*,PVOID*,ULONG_PTR*,KNONVOLATILE_CONTEXT_POINTERS*);
|
||||
|
||||
#define UNW_FLAG_NHANDLER 0
|
||||
#define UNW_FLAG_EHANDLER 1
|
||||
#define UNW_FLAG_UHANDLER 2
|
||||
|
||||
#endif /* __aarch64__ */
|
||||
|
||||
#if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
|
||||
|
@ -1769,8 +1658,6 @@ NTSYSAPI void WINAPI RtlCaptureContext(CONTEXT*);
|
|||
WOW64_CONTEXT_SEGMENTS | WOW64_CONTEXT_FLOATING_POINT | \
|
||||
WOW64_CONTEXT_DEBUG_REGISTERS | WOW64_CONTEXT_EXTENDED_REGISTERS)
|
||||
|
||||
#define WOW64_CONTEXT_XSTATE (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000040))
|
||||
|
||||
#define WOW64_CONTEXT_EXCEPTION_ACTIVE 0x08000000
|
||||
#define WOW64_CONTEXT_SERVICE_ACTIVE 0x10000000
|
||||
#define WOW64_CONTEXT_EXCEPTION_REQUEST 0x40000000
|
||||
|
@ -1779,49 +1666,156 @@ NTSYSAPI void WINAPI RtlCaptureContext(CONTEXT*);
|
|||
#define WOW64_SIZE_OF_80387_REGISTERS 80
|
||||
#define WOW64_MAXIMUM_SUPPORTED_EXTENSION 512
|
||||
|
||||
typedef struct _WOW64_FLOATING_SAVE_AREA
|
||||
{
|
||||
DWORD ControlWord;
|
||||
DWORD StatusWord;
|
||||
DWORD TagWord;
|
||||
DWORD ErrorOffset;
|
||||
DWORD ErrorSelector;
|
||||
DWORD DataOffset;
|
||||
DWORD DataSelector;
|
||||
BYTE RegisterArea[WOW64_SIZE_OF_80387_REGISTERS];
|
||||
DWORD Cr0NpxState;
|
||||
} WOW64_FLOATING_SAVE_AREA, *PWOW64_FLOATING_SAVE_AREA;
|
||||
/* Exception definitions */
|
||||
|
||||
#include "pshpack4.h"
|
||||
typedef struct _WOW64_CONTEXT
|
||||
#define EXCEPTION_READ_FAULT 0
|
||||
#define EXCEPTION_WRITE_FAULT 1
|
||||
#define EXCEPTION_EXECUTE_FAULT 8
|
||||
|
||||
struct _EXCEPTION_POINTERS;
|
||||
struct _EXCEPTION_RECORD;
|
||||
|
||||
typedef EXCEPTION_DISPOSITION WINAPI EXCEPTION_ROUTINE(struct _EXCEPTION_RECORD*,PVOID,CONTEXT*,PVOID);
|
||||
typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;
|
||||
|
||||
#ifdef __x86_64__
|
||||
|
||||
#define UNWIND_HISTORY_TABLE_SIZE 12
|
||||
|
||||
typedef struct _UNWIND_HISTORY_TABLE_ENTRY
|
||||
{
|
||||
DWORD ContextFlags;
|
||||
DWORD Dr0;
|
||||
DWORD Dr1;
|
||||
DWORD Dr2;
|
||||
DWORD Dr3;
|
||||
DWORD Dr6;
|
||||
DWORD Dr7;
|
||||
WOW64_FLOATING_SAVE_AREA FloatSave;
|
||||
DWORD SegGs;
|
||||
DWORD SegFs;
|
||||
DWORD SegEs;
|
||||
DWORD SegDs;
|
||||
DWORD Edi;
|
||||
DWORD Esi;
|
||||
DWORD Ebx;
|
||||
DWORD Edx;
|
||||
DWORD Ecx;
|
||||
DWORD Eax;
|
||||
DWORD Ebp;
|
||||
DWORD Eip;
|
||||
DWORD SegCs;
|
||||
DWORD EFlags;
|
||||
DWORD Esp;
|
||||
DWORD SegSs;
|
||||
BYTE ExtendedRegisters[WOW64_MAXIMUM_SUPPORTED_EXTENSION];
|
||||
} WOW64_CONTEXT, *PWOW64_CONTEXT;
|
||||
#include "poppack.h"
|
||||
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 _DISPATCHER_CONTEXT
|
||||
{
|
||||
ULONG64 ControlPc;
|
||||
ULONG64 ImageBase;
|
||||
PRUNTIME_FUNCTION FunctionEntry;
|
||||
ULONG64 EstablisherFrame;
|
||||
ULONG64 TargetIp;
|
||||
PCONTEXT ContextRecord;
|
||||
PEXCEPTION_ROUTINE LanguageHandler;
|
||||
PVOID HandlerData;
|
||||
PUNWIND_HISTORY_TABLE HistoryTable;
|
||||
DWORD ScopeIndex;
|
||||
DWORD Fill0;
|
||||
} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
|
||||
|
||||
typedef LONG (CALLBACK *PEXCEPTION_FILTER)(struct _EXCEPTION_POINTERS*,PVOID);
|
||||
typedef void (CALLBACK *PTERMINATION_HANDLER)(BOOLEAN,PVOID);
|
||||
|
||||
#define UNW_FLAG_NHANDLER 0
|
||||
#define UNW_FLAG_EHANDLER 1
|
||||
#define UNW_FLAG_UHANDLER 2
|
||||
#define UNW_FLAG_CHAININFO 4
|
||||
|
||||
#elif defined(__arm__)
|
||||
|
||||
#define UNWIND_HISTORY_TABLE_SIZE 12
|
||||
|
||||
typedef struct _UNWIND_HISTORY_TABLE_ENTRY
|
||||
{
|
||||
DWORD ImageBase;
|
||||
PRUNTIME_FUNCTION FunctionEntry;
|
||||
} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
|
||||
|
||||
typedef struct _UNWIND_HISTORY_TABLE
|
||||
{
|
||||
DWORD Count;
|
||||
BYTE LocalHint;
|
||||
BYTE GlobalHint;
|
||||
BYTE Search;
|
||||
BYTE Once;
|
||||
DWORD LowAddress;
|
||||
DWORD HighAddress;
|
||||
UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
|
||||
} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
|
||||
|
||||
typedef struct _DISPATCHER_CONTEXT
|
||||
{
|
||||
DWORD ControlPc;
|
||||
DWORD ImageBase;
|
||||
PRUNTIME_FUNCTION FunctionEntry;
|
||||
DWORD EstablisherFrame;
|
||||
DWORD TargetPc;
|
||||
PCONTEXT ContextRecord;
|
||||
PEXCEPTION_ROUTINE LanguageHandler;
|
||||
PVOID HandlerData;
|
||||
PUNWIND_HISTORY_TABLE HistoryTable;
|
||||
DWORD ScopeIndex;
|
||||
BOOLEAN ControlPcIsUnwound;
|
||||
PBYTE NonVolatileRegisters;
|
||||
DWORD Reserved;
|
||||
} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
|
||||
|
||||
typedef LONG (CALLBACK *PEXCEPTION_FILTER)(struct _EXCEPTION_POINTERS*,DWORD);
|
||||
typedef void (CALLBACK *PTERMINATION_HANDLER)(BOOLEAN,DWORD);
|
||||
|
||||
#define UNW_FLAG_NHANDLER 0
|
||||
#define UNW_FLAG_EHANDLER 1
|
||||
#define UNW_FLAG_UHANDLER 2
|
||||
|
||||
#elif defined(__aarch64__)
|
||||
|
||||
#define UNWIND_HISTORY_TABLE_SIZE 12
|
||||
|
||||
typedef struct _UNWIND_HISTORY_TABLE_ENTRY
|
||||
{
|
||||
DWORD64 ImageBase;
|
||||
PRUNTIME_FUNCTION FunctionEntry;
|
||||
} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
|
||||
|
||||
typedef struct _UNWIND_HISTORY_TABLE
|
||||
{
|
||||
DWORD Count;
|
||||
BYTE LocalHint;
|
||||
BYTE GlobalHint;
|
||||
BYTE Search;
|
||||
BYTE Once;
|
||||
DWORD64 LowAddress;
|
||||
DWORD64 HighAddress;
|
||||
UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
|
||||
} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
|
||||
|
||||
typedef struct _DISPATCHER_CONTEXT
|
||||
{
|
||||
ULONG_PTR ControlPc;
|
||||
ULONG_PTR ImageBase;
|
||||
PRUNTIME_FUNCTION FunctionEntry;
|
||||
ULONG_PTR EstablisherFrame;
|
||||
ULONG_PTR TargetPc;
|
||||
PCONTEXT ContextRecord;
|
||||
PEXCEPTION_ROUTINE LanguageHandler;
|
||||
PVOID HandlerData;
|
||||
PUNWIND_HISTORY_TABLE HistoryTable;
|
||||
DWORD ScopeIndex;
|
||||
BOOLEAN ControlPcIsUnwound;
|
||||
PBYTE NonVolatileRegisters;
|
||||
} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
|
||||
|
||||
typedef LONG (CALLBACK *PEXCEPTION_FILTER)(struct _EXCEPTION_POINTERS*,DWORD64);
|
||||
typedef void (CALLBACK *PTERMINATION_HANDLER)(BOOLEAN,DWORD64);
|
||||
|
||||
#define UNW_FLAG_NHANDLER 0
|
||||
#define UNW_FLAG_EHANDLER 1
|
||||
#define UNW_FLAG_UHANDLER 2
|
||||
|
||||
#endif /* __aarch64__ */
|
||||
|
||||
#if defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
|
||||
|
||||
|
@ -1835,6 +1829,8 @@ NTSYSAPI void WINAPI RtlGrowFunctionTable(void*,DWORD);
|
|||
NTSYSAPI BOOLEAN CDECL RtlInstallFunctionTableCallback(DWORD_PTR,DWORD_PTR,DWORD,PGET_RUNTIME_FUNCTION_CALLBACK,PVOID,PCWSTR);
|
||||
NTSYSAPI PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(DWORD_PTR,DWORD_PTR*,UNWIND_HISTORY_TABLE*);
|
||||
NTSYSAPI void WINAPI RtlUnwindEx(PVOID,PVOID,struct _EXCEPTION_RECORD*,PVOID,CONTEXT*,UNWIND_HISTORY_TABLE*);
|
||||
NTSYSAPI PVOID WINAPI RtlVirtualUnwind(DWORD,ULONG_PTR,ULONG_PTR,RUNTIME_FUNCTION*,CONTEXT*,PVOID*,ULONG_PTR*,KNONVOLATILE_CONTEXT_POINTERS*);
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue