ntdll: Use jump buffer definitions from setjmp.h.
This commit is contained in:
parent
542e11fcd9
commit
7a156cbd7f
3 changed files with 9 additions and 92 deletions
|
@ -23,6 +23,7 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
#include "ntstatus.h"
|
||||
#define WIN32_NO_STATUS
|
||||
|
@ -37,25 +38,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(seh);
|
|||
WINE_DECLARE_DEBUG_CHANNEL(relay);
|
||||
|
||||
|
||||
/* layering violation: the setjmp buffer is defined in msvcrt, but used by RtlUnwindEx */
|
||||
struct MSVCRT_JUMP_BUFFER
|
||||
{
|
||||
unsigned long Frame;
|
||||
unsigned long R4;
|
||||
unsigned long R5;
|
||||
unsigned long R6;
|
||||
unsigned long R7;
|
||||
unsigned long R8;
|
||||
unsigned long R9;
|
||||
unsigned long R10;
|
||||
unsigned long R11;
|
||||
unsigned long Sp;
|
||||
unsigned long Pc;
|
||||
unsigned long Fpscr;
|
||||
unsigned long long D[8];
|
||||
};
|
||||
|
||||
|
||||
static void dump_scope_table( ULONG base, const SCOPE_TABLE *table )
|
||||
{
|
||||
unsigned int i;
|
||||
|
@ -424,17 +406,13 @@ void CDECL RtlRestoreContext( CONTEXT *context, EXCEPTION_RECORD *rec )
|
|||
|
||||
if (rec && rec->ExceptionCode == STATUS_LONGJUMP && rec->NumberParameters >= 1)
|
||||
{
|
||||
struct MSVCRT_JUMP_BUFFER *jmp = (struct MSVCRT_JUMP_BUFFER *)rec->ExceptionInformation[0];
|
||||
int i;
|
||||
struct _JUMP_BUFFER *jmp = (struct _JUMP_BUFFER *)rec->ExceptionInformation[0];
|
||||
|
||||
for (i = 4; i <= 11; i++)
|
||||
(&context->R4)[i-4] = (&jmp->R4)[i-4];
|
||||
memcpy( &context->R4, &jmp->R4, 8 * sizeof(DWORD) );
|
||||
memcpy( &context->D[8], &jmp->D[0], 8 * sizeof(ULONGLONG) );
|
||||
context->Lr = jmp->Pc;
|
||||
context->Sp = jmp->Sp;
|
||||
context->Fpscr = jmp->Fpscr;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
context->D[8+i] = jmp->D[i];
|
||||
}
|
||||
else if (rec && rec->ExceptionCode == STATUS_UNWIND_CONSOLIDATE && rec->NumberParameters >= 1)
|
||||
{
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
#include "ntstatus.h"
|
||||
#define WIN32_NO_STATUS
|
||||
|
@ -39,30 +40,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(seh);
|
|||
WINE_DECLARE_DEBUG_CHANNEL(relay);
|
||||
|
||||
|
||||
/* layering violation: the setjmp buffer is defined in msvcrt, but used by RtlUnwindEx */
|
||||
struct MSVCRT_JUMP_BUFFER
|
||||
{
|
||||
unsigned __int64 Frame;
|
||||
unsigned __int64 Reserved;
|
||||
unsigned __int64 X19;
|
||||
unsigned __int64 X20;
|
||||
unsigned __int64 X21;
|
||||
unsigned __int64 X22;
|
||||
unsigned __int64 X23;
|
||||
unsigned __int64 X24;
|
||||
unsigned __int64 X25;
|
||||
unsigned __int64 X26;
|
||||
unsigned __int64 X27;
|
||||
unsigned __int64 X28;
|
||||
unsigned __int64 Fp;
|
||||
unsigned __int64 Lr;
|
||||
unsigned __int64 Sp;
|
||||
ULONG Fpcr;
|
||||
ULONG Fpsr;
|
||||
double D[8];
|
||||
};
|
||||
|
||||
|
||||
static void dump_scope_table( ULONG64 base, const SCOPE_TABLE *table )
|
||||
{
|
||||
unsigned int i;
|
||||
|
@ -486,7 +463,7 @@ void CDECL RtlRestoreContext( CONTEXT *context, EXCEPTION_RECORD *rec )
|
|||
|
||||
if (rec && rec->ExceptionCode == STATUS_LONGJUMP && rec->NumberParameters >= 1)
|
||||
{
|
||||
struct MSVCRT_JUMP_BUFFER *jmp = (struct MSVCRT_JUMP_BUFFER *)rec->ExceptionInformation[0];
|
||||
struct _JUMP_BUFFER *jmp = (struct _JUMP_BUFFER *)rec->ExceptionInformation[0];
|
||||
int i;
|
||||
|
||||
context->X19 = jmp->X19;
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
#include "ntstatus.h"
|
||||
#define WIN32_NO_STATUS
|
||||
|
@ -37,36 +38,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(seh);
|
|||
WINE_DECLARE_DEBUG_CHANNEL(relay);
|
||||
|
||||
|
||||
/* layering violation: the setjmp buffer is defined in msvcrt, but used by RtlUnwindEx */
|
||||
struct MSVCRT_JUMP_BUFFER
|
||||
{
|
||||
ULONG64 Frame;
|
||||
ULONG64 Rbx;
|
||||
ULONG64 Rsp;
|
||||
ULONG64 Rbp;
|
||||
ULONG64 Rsi;
|
||||
ULONG64 Rdi;
|
||||
ULONG64 R12;
|
||||
ULONG64 R13;
|
||||
ULONG64 R14;
|
||||
ULONG64 R15;
|
||||
ULONG64 Rip;
|
||||
ULONG MxCsr;
|
||||
USHORT FpCsr;
|
||||
USHORT Spare;
|
||||
M128A Xmm6;
|
||||
M128A Xmm7;
|
||||
M128A Xmm8;
|
||||
M128A Xmm9;
|
||||
M128A Xmm10;
|
||||
M128A Xmm11;
|
||||
M128A Xmm12;
|
||||
M128A Xmm13;
|
||||
M128A Xmm14;
|
||||
M128A Xmm15;
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* syscalls
|
||||
*/
|
||||
|
@ -726,7 +697,7 @@ void CDECL RtlRestoreContext( CONTEXT *context, EXCEPTION_RECORD *rec )
|
|||
|
||||
if (rec && rec->ExceptionCode == STATUS_LONGJUMP && rec->NumberParameters >= 1)
|
||||
{
|
||||
struct MSVCRT_JUMP_BUFFER *jmp = (struct MSVCRT_JUMP_BUFFER *)rec->ExceptionInformation[0];
|
||||
struct _JUMP_BUFFER *jmp = (struct _JUMP_BUFFER *)rec->ExceptionInformation[0];
|
||||
context->Rbx = jmp->Rbx;
|
||||
context->Rsp = jmp->Rsp;
|
||||
context->Rbp = jmp->Rbp;
|
||||
|
@ -737,19 +708,10 @@ void CDECL RtlRestoreContext( CONTEXT *context, EXCEPTION_RECORD *rec )
|
|||
context->R14 = jmp->R14;
|
||||
context->R15 = jmp->R15;
|
||||
context->Rip = jmp->Rip;
|
||||
context->Xmm6 = jmp->Xmm6;
|
||||
context->Xmm7 = jmp->Xmm7;
|
||||
context->Xmm8 = jmp->Xmm8;
|
||||
context->Xmm9 = jmp->Xmm9;
|
||||
context->Xmm10 = jmp->Xmm10;
|
||||
context->Xmm11 = jmp->Xmm11;
|
||||
context->Xmm12 = jmp->Xmm12;
|
||||
context->Xmm13 = jmp->Xmm13;
|
||||
context->Xmm14 = jmp->Xmm14;
|
||||
context->Xmm15 = jmp->Xmm15;
|
||||
context->MxCsr = jmp->MxCsr;
|
||||
context->FltSave.MxCsr = jmp->MxCsr;
|
||||
context->FltSave.ControlWord = jmp->FpCsr;
|
||||
memcpy( &context->Xmm6, &jmp->Xmm6, 10 * sizeof(M128A) );
|
||||
}
|
||||
else if (rec && rec->ExceptionCode == STATUS_UNWIND_CONSOLIDATE && rec->NumberParameters >= 1)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue