ntdll: Move some exception definitions to winnt.h.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
448ba921be
commit
44a6043388
|
@ -40,29 +40,6 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(seh);
|
||||
|
||||
struct _DISPATCHER_CONTEXT;
|
||||
|
||||
typedef LONG (WINAPI *PC_LANGUAGE_EXCEPTION_HANDLER)(EXCEPTION_POINTERS *ptrs, DWORD frame);
|
||||
typedef EXCEPTION_DISPOSITION (WINAPI *PEXCEPTION_ROUTINE)(EXCEPTION_RECORD *rec, DWORD frame,
|
||||
CONTEXT *context,
|
||||
struct _DISPATCHER_CONTEXT *dispatch);
|
||||
|
||||
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 VirtualVfpHead;
|
||||
} DISPATCHER_CONTEXT;
|
||||
|
||||
/*********************************************************************
|
||||
* __CxxExceptionFilter (MSVCRT.@)
|
||||
|
|
|
@ -41,29 +41,6 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(seh);
|
||||
|
||||
struct _DISPATCHER_CONTEXT;
|
||||
|
||||
typedef LONG (WINAPI *PC_LANGUAGE_EXCEPTION_HANDLER)( EXCEPTION_POINTERS *ptrs, ULONG64 frame );
|
||||
typedef EXCEPTION_DISPOSITION (WINAPI *PEXCEPTION_ROUTINE)( EXCEPTION_RECORD *rec,
|
||||
ULONG64 frame,
|
||||
CONTEXT *context,
|
||||
struct _DISPATCHER_CONTEXT *dispatch );
|
||||
|
||||
typedef struct _DISPATCHER_CONTEXT
|
||||
{
|
||||
DWORD64 ControlPc;
|
||||
DWORD64 ImageBase;
|
||||
PRUNTIME_FUNCTION FunctionEntry;
|
||||
DWORD64 EstablisherFrame;
|
||||
DWORD64 TargetPc;
|
||||
PCONTEXT ContextRecord;
|
||||
PEXCEPTION_ROUTINE LanguageHandler;
|
||||
PVOID HandlerData;
|
||||
PUNWIND_HISTORY_TABLE HistoryTable;
|
||||
DWORD ScopeIndex;
|
||||
BOOLEAN ControlPcIsUnwound;
|
||||
PBYTE NonVolatileRegisters;
|
||||
} DISPATCHER_CONTEXT;
|
||||
|
||||
/*********************************************************************
|
||||
* __CxxExceptionFilter (MSVCRT.@)
|
||||
|
|
|
@ -39,28 +39,6 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(seh);
|
||||
|
||||
struct _DISPATCHER_CONTEXT;
|
||||
|
||||
typedef LONG (WINAPI *PC_LANGUAGE_EXCEPTION_HANDLER)( EXCEPTION_POINTERS *ptrs, ULONG64 frame );
|
||||
typedef EXCEPTION_DISPOSITION (WINAPI *PEXCEPTION_ROUTINE)( EXCEPTION_RECORD *rec,
|
||||
ULONG64 frame,
|
||||
CONTEXT *context,
|
||||
struct _DISPATCHER_CONTEXT *dispatch );
|
||||
|
||||
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;
|
||||
ULONG ScopeIndex;
|
||||
} DISPATCHER_CONTEXT;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int prev;
|
||||
|
|
|
@ -75,29 +75,6 @@
|
|||
WINE_DEFAULT_DEBUG_CHANNEL(seh);
|
||||
WINE_DECLARE_DEBUG_CHANNEL(relay);
|
||||
|
||||
struct _DISPATCHER_CONTEXT;
|
||||
|
||||
typedef LONG (WINAPI *PC_LANGUAGE_EXCEPTION_HANDLER)( EXCEPTION_POINTERS *ptrs, ULONG64 frame );
|
||||
typedef EXCEPTION_DISPOSITION (WINAPI *PEXCEPTION_ROUTINE)( EXCEPTION_RECORD *rec,
|
||||
ULONG64 frame,
|
||||
CONTEXT *context,
|
||||
struct _DISPATCHER_CONTEXT *dispatch );
|
||||
typedef void (WINAPI *TERMINATION_HANDLER)( ULONG flags, ULONG64 frame );
|
||||
|
||||
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;
|
||||
ULONG ScopeIndex;
|
||||
} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
|
||||
|
||||
typedef struct _SCOPE_TABLE
|
||||
{
|
||||
ULONG Count;
|
||||
|
@ -2619,7 +2596,7 @@ static DWORD call_handler( EXCEPTION_RECORD *rec, CONTEXT *context, DISPATCHER_C
|
|||
|
||||
TRACE( "calling handler %p (rec=%p, frame=0x%lx context=%p, dispatch=%p)\n",
|
||||
dispatch->LanguageHandler, rec, dispatch->EstablisherFrame, dispatch->ContextRecord, dispatch );
|
||||
res = dispatch->LanguageHandler( rec, dispatch->EstablisherFrame, context, dispatch );
|
||||
res = dispatch->LanguageHandler( rec, (void *)dispatch->EstablisherFrame, context, dispatch );
|
||||
TRACE( "handler at %p returned %u\n", dispatch->LanguageHandler, res );
|
||||
|
||||
__wine_pop_frame( &frame );
|
||||
|
@ -3990,7 +3967,7 @@ static DWORD call_unwind_handler( EXCEPTION_RECORD *rec, DISPATCHER_CONTEXT *dis
|
|||
|
||||
TRACE( "calling handler %p (rec=%p, frame=0x%lx context=%p, dispatch=%p)\n",
|
||||
dispatch->LanguageHandler, rec, dispatch->EstablisherFrame, dispatch->ContextRecord, dispatch );
|
||||
res = dispatch->LanguageHandler( rec, dispatch->EstablisherFrame, dispatch->ContextRecord, dispatch );
|
||||
res = dispatch->LanguageHandler( rec, (void *)dispatch->EstablisherFrame, dispatch->ContextRecord, dispatch );
|
||||
TRACE( "handler %p returned %x\n", dispatch->LanguageHandler, res );
|
||||
|
||||
__wine_pop_frame( &frame.frame );
|
||||
|
@ -4359,14 +4336,14 @@ void WINAPI _local_unwind( void *frame, void *target_ip )
|
|||
* __C_specific_handler (NTDLL.@)
|
||||
*/
|
||||
EXCEPTION_DISPOSITION WINAPI __C_specific_handler( EXCEPTION_RECORD *rec,
|
||||
ULONG64 frame,
|
||||
void *frame,
|
||||
CONTEXT *context,
|
||||
struct _DISPATCHER_CONTEXT *dispatch )
|
||||
{
|
||||
SCOPE_TABLE *table = dispatch->HandlerData;
|
||||
ULONG i;
|
||||
|
||||
TRACE( "%p %lx %p %p\n", rec, frame, context, dispatch );
|
||||
TRACE( "%p %p %p %p\n", rec, frame, context, dispatch );
|
||||
if (TRACE_ON(seh)) dump_scope_table( dispatch->ImageBase, table );
|
||||
|
||||
if (rec->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND))
|
||||
|
@ -4376,7 +4353,7 @@ EXCEPTION_DISPOSITION WINAPI __C_specific_handler( EXCEPTION_RECORD *rec,
|
|||
if (dispatch->ControlPc >= dispatch->ImageBase + table->ScopeRecord[i].BeginAddress &&
|
||||
dispatch->ControlPc < dispatch->ImageBase + table->ScopeRecord[i].EndAddress)
|
||||
{
|
||||
TERMINATION_HANDLER handler;
|
||||
PTERMINATION_HANDLER handler;
|
||||
|
||||
if (table->ScopeRecord[i].JumpTarget) continue;
|
||||
|
||||
|
@ -4387,11 +4364,11 @@ EXCEPTION_DISPOSITION WINAPI __C_specific_handler( EXCEPTION_RECORD *rec,
|
|||
break;
|
||||
}
|
||||
|
||||
handler = (TERMINATION_HANDLER)(dispatch->ImageBase + table->ScopeRecord[i].HandlerAddress);
|
||||
handler = (PTERMINATION_HANDLER)(dispatch->ImageBase + table->ScopeRecord[i].HandlerAddress);
|
||||
dispatch->ScopeIndex = i+1;
|
||||
|
||||
TRACE( "calling __finally %p frame %lx\n", handler, frame );
|
||||
handler( 1, frame );
|
||||
TRACE( "calling __finally %p frame %p\n", handler, frame );
|
||||
handler( TRUE, frame );
|
||||
}
|
||||
}
|
||||
return ExceptionContinueSearch;
|
||||
|
@ -4406,12 +4383,12 @@ EXCEPTION_DISPOSITION WINAPI __C_specific_handler( EXCEPTION_RECORD *rec,
|
|||
if (table->ScopeRecord[i].HandlerAddress != EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
EXCEPTION_POINTERS ptrs;
|
||||
PC_LANGUAGE_EXCEPTION_HANDLER filter;
|
||||
PEXCEPTION_FILTER filter;
|
||||
|
||||
filter = (PC_LANGUAGE_EXCEPTION_HANDLER)(dispatch->ImageBase + table->ScopeRecord[i].HandlerAddress);
|
||||
filter = (PEXCEPTION_FILTER)(dispatch->ImageBase + table->ScopeRecord[i].HandlerAddress);
|
||||
ptrs.ExceptionRecord = rec;
|
||||
ptrs.ContextRecord = context;
|
||||
TRACE( "calling filter %p ptrs %p frame %lx\n", filter, &ptrs, frame );
|
||||
TRACE( "calling filter %p ptrs %p frame %p\n", filter, &ptrs, frame );
|
||||
switch (filter( &ptrs, frame ))
|
||||
{
|
||||
case EXCEPTION_EXECUTE_HANDLER:
|
||||
|
@ -4423,7 +4400,7 @@ EXCEPTION_DISPOSITION WINAPI __C_specific_handler( EXCEPTION_RECORD *rec,
|
|||
}
|
||||
}
|
||||
TRACE( "unwinding to target %lx\n", dispatch->ImageBase + table->ScopeRecord[i].JumpTarget );
|
||||
RtlUnwindEx( (void *)frame, (char *)dispatch->ImageBase + table->ScopeRecord[i].JumpTarget,
|
||||
RtlUnwindEx( frame, (char *)dispatch->ImageBase + table->ScopeRecord[i].JumpTarget,
|
||||
rec, 0, dispatch->ContextRecord, dispatch->HistoryTable );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -84,20 +84,6 @@ typedef struct
|
|||
} ScopeRecord[1];
|
||||
} SCOPE_TABLE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ULONG64 ControlPc;
|
||||
ULONG64 ImageBase;
|
||||
PRUNTIME_FUNCTION FunctionEntry;
|
||||
ULONG64 EstablisherFrame;
|
||||
ULONG64 TargetIp;
|
||||
PCONTEXT ContextRecord;
|
||||
void* /*PEXCEPTION_ROUTINE*/ LanguageHandler;
|
||||
PVOID HandlerData;
|
||||
PUNWIND_HISTORY_TABLE HistoryTable;
|
||||
ULONG ScopeIndex;
|
||||
} DISPATCHER_CONTEXT;
|
||||
|
||||
typedef struct _SETJMP_FLOAT128
|
||||
{
|
||||
unsigned __int64 DECLSPEC_ALIGN(16) Part[2];
|
||||
|
|
124
include/winnt.h
124
include/winnt.h
|
@ -904,6 +904,16 @@ typedef enum _HEAP_INFORMATION_CLASS {
|
|||
#define ES_USER_PRESENT 0x00000004
|
||||
#define ES_CONTINUOUS 0x80000000
|
||||
|
||||
#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 */
|
||||
|
@ -964,7 +974,7 @@ typedef struct _CONTEXT
|
|||
DWORD SegSs; /* 0c8 */
|
||||
|
||||
BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION]; /* 0xcc */
|
||||
} CONTEXT;
|
||||
} CONTEXT, *PCONTEXT;
|
||||
|
||||
#define CONTEXT_X86 0x00010000
|
||||
#define CONTEXT_i386 CONTEXT_X86
|
||||
|
@ -1139,7 +1149,7 @@ typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
|
|||
DWORD64 LastBranchFromRip; /* 4b8 */
|
||||
DWORD64 LastExceptionToRip; /* 4c0 */
|
||||
DWORD64 LastExceptionFromRip; /* 4c8 */
|
||||
} CONTEXT;
|
||||
} CONTEXT, *PCONTEXT;
|
||||
|
||||
typedef struct _RUNTIME_FUNCTION
|
||||
{
|
||||
|
@ -1220,6 +1230,24 @@ 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);
|
||||
|
||||
typedef PRUNTIME_FUNCTION (CALLBACK *PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64,PVOID);
|
||||
|
||||
BOOLEAN CDECL RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,DWORD64);
|
||||
|
@ -1641,7 +1669,7 @@ typedef struct _CONTEXT
|
|||
DWORD Psr;
|
||||
DWORD ContextFlags;
|
||||
DWORD Fill[4];
|
||||
} CONTEXT;
|
||||
} CONTEXT, *PCONTEXT;
|
||||
|
||||
#define _QUAD_PSR_OFFSET HighSoftFpcr
|
||||
#define _QUAD_FLAGS_OFFSET HighFir
|
||||
|
@ -1750,7 +1778,48 @@ typedef struct _CONTEXT
|
|||
ULONG Wvr[ARM_MAX_WATCHPOINTS]; /* 190 */
|
||||
ULONG Wcr[ARM_MAX_WATCHPOINTS]; /* 194 */
|
||||
ULONG Padding2[2]; /* 198 */
|
||||
} CONTEXT;
|
||||
} CONTEXT, *PCONTEXT;
|
||||
|
||||
typedef struct _KNONVOLATILE_CONTEXT_POINTERS
|
||||
{
|
||||
PDWORD R4;
|
||||
PDWORD R5;
|
||||
PDWORD R6;
|
||||
PDWORD R7;
|
||||
PDWORD R8;
|
||||
PDWORD R9;
|
||||
PDWORD R10;
|
||||
PDWORD R11;
|
||||
PDWORD Lr;
|
||||
PULONGLONG D8;
|
||||
PULONGLONG D9;
|
||||
PULONGLONG D10;
|
||||
PULONGLONG D11;
|
||||
PULONGLONG D12;
|
||||
PULONGLONG D13;
|
||||
PULONGLONG D14;
|
||||
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);
|
||||
|
||||
typedef PRUNTIME_FUNCTION (CALLBACK *PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD,PVOID);
|
||||
|
||||
|
@ -1886,7 +1955,50 @@ typedef struct _CONTEXT
|
|||
DWORD64 Bvr[ARM64_MAX_BREAKPOINTS]; /* 338 */
|
||||
DWORD Wcr[ARM64_MAX_WATCHPOINTS]; /* 378 */
|
||||
DWORD64 Wvr[ARM64_MAX_WATCHPOINTS]; /* 380 */
|
||||
} CONTEXT;
|
||||
} CONTEXT, *PCONTEXT;
|
||||
|
||||
typedef struct _KNONVOLATILE_CONTEXT_POINTERS
|
||||
{
|
||||
PDWORD64 X19;
|
||||
PDWORD64 X20;
|
||||
PDWORD64 X21;
|
||||
PDWORD64 X22;
|
||||
PDWORD64 X23;
|
||||
PDWORD64 X24;
|
||||
PDWORD64 X25;
|
||||
PDWORD64 X26;
|
||||
PDWORD64 X27;
|
||||
PDWORD64 X28;
|
||||
PDWORD64 Fp;
|
||||
PDWORD64 Lr;
|
||||
PDWORD64 D8;
|
||||
PDWORD64 D9;
|
||||
PDWORD64 D10;
|
||||
PDWORD64 D11;
|
||||
PDWORD64 D12;
|
||||
PDWORD64 D13;
|
||||
PDWORD64 D14;
|
||||
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);
|
||||
|
||||
typedef PRUNTIME_FUNCTION (CALLBACK *PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64,PVOID);
|
||||
|
||||
|
@ -2133,8 +2245,6 @@ typedef struct _STACK_FRAME_HEADER
|
|||
#error You need to define a CONTEXT for your CPU
|
||||
#endif
|
||||
|
||||
typedef CONTEXT *PCONTEXT;
|
||||
|
||||
NTSYSAPI void WINAPI RtlCaptureContext(CONTEXT*);
|
||||
|
||||
#define WOW64_CONTEXT_i386 0x00010000
|
||||
|
|
Loading…
Reference in New Issue