mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-11-21 16:46:54 -08:00
winebuild-Fake_Dlls: Avoid conflict with 16-bit code.
This commit is contained in:
parent
d00088e0fa
commit
7ad2ee4c60
@ -8617,17 +8617,23 @@ fi
|
||||
# | * [#42741] Various improvements for fake dlls
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/signal_i386.c, tools/winebuild/build.h, tools/winebuild/import.c, tools/winebuild/parser.c,
|
||||
# | * dlls/dbghelp/cpu_i386.c, dlls/krnl386.exe16/kernel.c, dlls/krnl386.exe16/kernel16_private.h,
|
||||
# | dlls/krnl386.exe16/ne_module.c, dlls/krnl386.exe16/ne_segment.c, dlls/krnl386.exe16/task.c, dlls/krnl386.exe16/thunk.c,
|
||||
# | dlls/krnl386.exe16/wowthunk.c, dlls/ntdll/signal_i386.c, dlls/system.drv16/system.c, dlls/toolhelp.dll16/toolhelp.c,
|
||||
# | dlls/user.exe16/message.c, dlls/user.exe16/user.c, dlls/user.exe16/window.c, include/winternl.h,
|
||||
# | tools/winebuild/build.h, tools/winebuild/import.c, tools/winebuild/parser.c, tools/winebuild/relay.c,
|
||||
# | tools/winebuild/res32.c, tools/winebuild/spec16.c, tools/winebuild/spec32.c, tools/winebuild/utils.c
|
||||
# |
|
||||
if test "$enable_winebuild_Fake_Dlls" -eq 1; then
|
||||
patch_apply winebuild-Fake_Dlls/0001-winebuild-Generate-syscall-thunks-for-ntdll-exports.patch
|
||||
patch_apply winebuild-Fake_Dlls/0002-winebuild-Use-Windows-7-WOW64-signature-for-syscall-.patch
|
||||
patch_apply winebuild-Fake_Dlls/0003-winebuild-Use-multipass-label-system-to-generate-fak.patch
|
||||
patch_apply winebuild-Fake_Dlls/0004-winebuild-Add-stub-functions-in-fake-dlls.patch
|
||||
patch_apply winebuild-Fake_Dlls/0005-winebuild-Add-syscall-thunks-in-fake-dlls.patch
|
||||
patch_apply winebuild-Fake_Dlls/0002-krnl386.exe16-Do-not-abuse-WOW32Reserved-field-for-1.patch
|
||||
patch_apply winebuild-Fake_Dlls/0003-winebuild-Use-Windows-7-WOW64-signature-for-syscall-.patch
|
||||
patch_apply winebuild-Fake_Dlls/0004-winebuild-Use-multipass-label-system-to-generate-fak.patch
|
||||
patch_apply winebuild-Fake_Dlls/0005-winebuild-Add-stub-functions-in-fake-dlls.patch
|
||||
patch_apply winebuild-Fake_Dlls/0006-winebuild-Add-syscall-thunks-in-fake-dlls.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Michael Müller", "winebuild: Generate syscall thunks for ntdll exports.", 1 },';
|
||||
printf '%s\n' '+ { "Sebastian Lackner", "krnl386.exe16: Do not abuse WOW32Reserved field for 16-bit stack address.", 1 },';
|
||||
printf '%s\n' '+ { "Michael Müller", "winebuild: Use Windows 7 WOW64 signature for syscall thunks.", 1 },';
|
||||
printf '%s\n' '+ { "Michael Müller", "winebuild: Use multipass label system to generate fake dlls.", 1 },';
|
||||
printf '%s\n' '+ { "Michael Müller", "winebuild: Add stub functions in fake dlls.", 1 },';
|
||||
|
@ -0,0 +1,659 @@
|
||||
From 868ea83da0219cff107fbf1bd3bd1311337fb059 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Tue, 16 May 2017 04:37:52 +0200
|
||||
Subject: krnl386.exe16: Do not abuse WOW32Reserved field for 16-bit stack
|
||||
address.
|
||||
|
||||
---
|
||||
dlls/dbghelp/cpu_i386.c | 6 +++---
|
||||
dlls/krnl386.exe16/kernel.c | 6 +++---
|
||||
dlls/krnl386.exe16/kernel16_private.h | 11 ++++++-----
|
||||
dlls/krnl386.exe16/ne_module.c | 6 +++---
|
||||
dlls/krnl386.exe16/ne_segment.c | 20 +++++++++----------
|
||||
dlls/krnl386.exe16/task.c | 14 +++++++-------
|
||||
dlls/krnl386.exe16/thunk.c | 36 +++++++++++++++++------------------
|
||||
dlls/krnl386.exe16/wowthunk.c | 16 ++++++++--------
|
||||
dlls/ntdll/signal_i386.c | 2 +-
|
||||
dlls/system.drv16/system.c | 2 +-
|
||||
dlls/toolhelp.dll16/toolhelp.c | 6 +++---
|
||||
dlls/user.exe16/message.c | 16 ++++++++--------
|
||||
dlls/user.exe16/user.c | 4 ++--
|
||||
dlls/user.exe16/window.c | 2 +-
|
||||
include/winternl.h | 2 +-
|
||||
tools/winebuild/relay.c | 2 +-
|
||||
16 files changed, 76 insertions(+), 75 deletions(-)
|
||||
|
||||
diff --git a/dlls/dbghelp/cpu_i386.c b/dlls/dbghelp/cpu_i386.c
|
||||
index 37b2e2586e1..ed8070908a1 100644
|
||||
--- a/dlls/dbghelp/cpu_i386.c
|
||||
+++ b/dlls/dbghelp/cpu_i386.c
|
||||
@@ -213,16 +213,16 @@ static BOOL i386_stack_walk(struct cpu_stack_walk* csw, LPSTACKFRAME64 frame, CO
|
||||
/* Init done */
|
||||
set_curr_mode((frame->AddrPC.Mode == AddrModeFlat) ? stm_32bit : stm_16bit);
|
||||
|
||||
- /* cur_switch holds address of WOW32Reserved field in TEB in debuggee
|
||||
+ /* cur_switch holds address of SystemReserved1[0] field in TEB in debuggee
|
||||
* address space
|
||||
*/
|
||||
if (NtQueryInformationThread(csw->hThread, ThreadBasicInformation, &info,
|
||||
sizeof(info), NULL) == STATUS_SUCCESS)
|
||||
{
|
||||
- curr_switch = (DWORD_PTR)info.TebBaseAddress + FIELD_OFFSET(TEB, WOW32Reserved);
|
||||
+ curr_switch = (DWORD_PTR)info.TebBaseAddress + FIELD_OFFSET(TEB, SystemReserved1[0]);
|
||||
if (!sw_read_mem(csw, curr_switch, &p, sizeof(p)))
|
||||
{
|
||||
- WARN("Can't read TEB:WOW32Reserved\n");
|
||||
+ WARN("Can't read TEB:SystemReserved1[0]\n");
|
||||
goto done_err;
|
||||
}
|
||||
next_switch = p;
|
||||
diff --git a/dlls/krnl386.exe16/kernel.c b/dlls/krnl386.exe16/kernel.c
|
||||
index 0a66d1e611a..17b0c156c07 100644
|
||||
--- a/dlls/krnl386.exe16/kernel.c
|
||||
+++ b/dlls/krnl386.exe16/kernel.c
|
||||
@@ -45,8 +45,8 @@ static void thread_attach(void)
|
||||
/* allocate the 16-bit stack (FIXME: should be done lazily) */
|
||||
HGLOBAL16 hstack = WOWGlobalAlloc16( GMEM_FIXED, 0x10000 );
|
||||
kernel_get_thread_data()->stack_sel = GlobalHandleToSel16( hstack );
|
||||
- NtCurrentTeb()->WOW32Reserved = (void *)MAKESEGPTR( kernel_get_thread_data()->stack_sel,
|
||||
- 0x10000 - sizeof(STACK16FRAME) );
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = (void *)MAKESEGPTR( kernel_get_thread_data()->stack_sel,
|
||||
+ 0x10000 - sizeof(STACK16FRAME) );
|
||||
memset( (char *)GlobalLock16(hstack) + 0x10000 - sizeof(STACK16FRAME), 0, sizeof(STACK16FRAME) );
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ static void thread_detach(void)
|
||||
{
|
||||
/* free the 16-bit stack */
|
||||
WOWGlobalFree16( kernel_get_thread_data()->stack_sel );
|
||||
- NtCurrentTeb()->WOW32Reserved = 0;
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = 0;
|
||||
if (NtCurrentTeb()->Tib.SubSystemTib) TASK_ExitTask();
|
||||
}
|
||||
|
||||
diff --git a/dlls/krnl386.exe16/kernel16_private.h b/dlls/krnl386.exe16/kernel16_private.h
|
||||
index 183c872192f..bb9a489e3df 100644
|
||||
--- a/dlls/krnl386.exe16/kernel16_private.h
|
||||
+++ b/dlls/krnl386.exe16/kernel16_private.h
|
||||
@@ -168,7 +168,7 @@ extern THHOOK *pThhook DECLSPEC_HIDDEN;
|
||||
(((offset)+(size) <= pModule->mapping_size) ? \
|
||||
(memcpy( buffer, (const char *)pModule->mapping + (offset), (size) ), TRUE) : FALSE)
|
||||
|
||||
-#define CURRENT_STACK16 ((STACK16FRAME*)MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved)))
|
||||
+#define CURRENT_STACK16 ((STACK16FRAME*)MapSL(PtrToUlong(NtCurrentTeb()->SystemReserved1[0])))
|
||||
#define CURRENT_DS (CURRENT_STACK16->ds)
|
||||
|
||||
/* push bytes on the 16-bit stack of a thread; return a segptr to the first pushed byte */
|
||||
@@ -176,8 +176,8 @@ static inline SEGPTR stack16_push( int size )
|
||||
{
|
||||
STACK16FRAME *frame = CURRENT_STACK16;
|
||||
memmove( (char*)frame - size, frame, sizeof(*frame) );
|
||||
- NtCurrentTeb()->WOW32Reserved = (char *)NtCurrentTeb()->WOW32Reserved - size;
|
||||
- return (SEGPTR)((char *)NtCurrentTeb()->WOW32Reserved + sizeof(*frame));
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = (char *)NtCurrentTeb()->SystemReserved1[0] - size;
|
||||
+ return (SEGPTR)((char *)NtCurrentTeb()->SystemReserved1[0] + sizeof(*frame));
|
||||
}
|
||||
|
||||
/* pop bytes from the 16-bit stack of a thread */
|
||||
@@ -185,7 +185,7 @@ static inline void stack16_pop( int size )
|
||||
{
|
||||
STACK16FRAME *frame = CURRENT_STACK16;
|
||||
memmove( (char*)frame + size, frame, sizeof(*frame) );
|
||||
- NtCurrentTeb()->WOW32Reserved = (char *)NtCurrentTeb()->WOW32Reserved + size;
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = (char *)NtCurrentTeb()->SystemReserved1[0] + size;
|
||||
}
|
||||
|
||||
/* dosmem.c */
|
||||
@@ -271,11 +271,12 @@ struct tagSYSLEVEL;
|
||||
|
||||
struct kernel_thread_data
|
||||
{
|
||||
+ void *reserved; /* stack segment pointer */
|
||||
WORD stack_sel; /* 16-bit stack selector */
|
||||
WORD htask16; /* Win16 task handle */
|
||||
DWORD sys_count[4]; /* syslevel mutex entry counters */
|
||||
struct tagSYSLEVEL *sys_mutex[4]; /* syslevel mutex pointers */
|
||||
- void *pad[45]; /* change this if you add fields! */
|
||||
+ void *pad[44]; /* change this if you add fields! */
|
||||
};
|
||||
|
||||
static inline struct kernel_thread_data *kernel_get_thread_data(void)
|
||||
diff --git a/dlls/krnl386.exe16/ne_module.c b/dlls/krnl386.exe16/ne_module.c
|
||||
index 70f8a464673..cd706520d7d 100644
|
||||
--- a/dlls/krnl386.exe16/ne_module.c
|
||||
+++ b/dlls/krnl386.exe16/ne_module.c
|
||||
@@ -1244,7 +1244,7 @@ DWORD NE_StartTask(void)
|
||||
sp = pSegTable[SELECTOROF(pModule->ne_sssp)-1].minsize + pModule->ne_stack;
|
||||
sp &= ~1;
|
||||
sp -= sizeof(STACK16FRAME);
|
||||
- NtCurrentTeb()->WOW32Reserved = (void *)MAKESEGPTR( GlobalHandleToSel16(hInstance), sp );
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = (void *)MAKESEGPTR( GlobalHandleToSel16(hInstance), sp );
|
||||
|
||||
/* Registers at initialization must be:
|
||||
* ax zero
|
||||
@@ -1274,8 +1274,8 @@ DWORD NE_StartTask(void)
|
||||
|
||||
TRACE("Starting main program: cs:ip=%04x:%04x ds=%04x ss:sp=%04x:%04x\n",
|
||||
context.SegCs, context.Eip, context.SegDs,
|
||||
- SELECTOROF(NtCurrentTeb()->WOW32Reserved),
|
||||
- OFFSETOF(NtCurrentTeb()->WOW32Reserved) );
|
||||
+ SELECTOROF(NtCurrentTeb()->SystemReserved1[0]),
|
||||
+ OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) );
|
||||
|
||||
WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)&context );
|
||||
ExitThread( LOWORD(context.Eax) );
|
||||
diff --git a/dlls/krnl386.exe16/ne_segment.c b/dlls/krnl386.exe16/ne_segment.c
|
||||
index 1ceb7143583..51b8261e8ee 100644
|
||||
--- a/dlls/krnl386.exe16/ne_segment.c
|
||||
+++ b/dlls/krnl386.exe16/ne_segment.c
|
||||
@@ -378,9 +378,9 @@ BOOL NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||
DWORD ret;
|
||||
|
||||
selfloadheader = MapSL( MAKESEGPTR(SEL(pSegTable->hSeg),0) );
|
||||
- oldstack = NtCurrentTeb()->WOW32Reserved;
|
||||
- NtCurrentTeb()->WOW32Reserved = (void *)MAKESEGPTR(pModule->self_loading_sel,
|
||||
- 0xff00 - sizeof(STACK16FRAME));
|
||||
+ oldstack = NtCurrentTeb()->SystemReserved1[0];
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = (void *)MAKESEGPTR(pModule->self_loading_sel,
|
||||
+ 0xff00 - sizeof(STACK16FRAME));
|
||||
|
||||
hFile16 = NE_OpenFile( pModule );
|
||||
TRACE_(dll)("Call LoadAppSegProc(hmodule=0x%04x,hf=%x,segnum=%d)\n",
|
||||
@@ -392,7 +392,7 @@ BOOL NE_LoadSegment( NE_MODULE *pModule, WORD segnum )
|
||||
pSeg->hSeg = LOWORD(ret);
|
||||
TRACE_(dll)("Ret LoadAppSegProc: hSeg=0x%04x\n", pSeg->hSeg);
|
||||
_lclose16( hFile16 );
|
||||
- NtCurrentTeb()->WOW32Reserved = oldstack;
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = oldstack;
|
||||
|
||||
pSeg->flags |= NE_SEGFLAGS_LOADED;
|
||||
return TRUE;
|
||||
@@ -484,9 +484,9 @@ BOOL NE_LoadAllSegments( NE_MODULE *pModule )
|
||||
sel = GlobalAlloc16( GMEM_ZEROINIT, 0xFF00 );
|
||||
pModule->self_loading_sel = SEL(sel);
|
||||
FarSetOwner16( sel, pModule->self );
|
||||
- oldstack = NtCurrentTeb()->WOW32Reserved;
|
||||
- NtCurrentTeb()->WOW32Reserved = (void *)MAKESEGPTR(pModule->self_loading_sel,
|
||||
- 0xff00 - sizeof(STACK16FRAME) );
|
||||
+ oldstack = NtCurrentTeb()->SystemReserved1[0];
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = (void *)MAKESEGPTR(pModule->self_loading_sel,
|
||||
+ 0xff00 - sizeof(STACK16FRAME) );
|
||||
|
||||
hFile16 = NE_OpenFile(pModule);
|
||||
TRACE_(dll)("CallBootAppProc(hModule=0x%04x,hf=0x%04x)\n",
|
||||
@@ -496,7 +496,7 @@ BOOL NE_LoadAllSegments( NE_MODULE *pModule )
|
||||
WOWCallback16Ex( (DWORD)selfloadheader->BootApp, WCB16_PASCAL, sizeof(args), args, NULL );
|
||||
TRACE_(dll)("Return from CallBootAppProc\n");
|
||||
_lclose16(hFile16);
|
||||
- NtCurrentTeb()->WOW32Reserved = oldstack;
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = oldstack;
|
||||
|
||||
for (i = 2; i <= pModule->ne_cseg; i++)
|
||||
if (!NE_LoadSegment( pModule, i )) return FALSE;
|
||||
@@ -693,7 +693,7 @@ static BOOL NE_InitDLL( NE_MODULE *pModule )
|
||||
context.SegGs = wine_get_gs();
|
||||
context.SegCs = SEL(pSegTable[SELECTOROF(pModule->ne_csip)-1].hSeg);
|
||||
context.Eip = OFFSETOF(pModule->ne_csip);
|
||||
- context.Ebp = OFFSETOF(NtCurrentTeb()->WOW32Reserved) + FIELD_OFFSET(STACK16FRAME,bp);
|
||||
+ context.Ebp = OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) + FIELD_OFFSET(STACK16FRAME,bp);
|
||||
|
||||
pModule->ne_csip = 0; /* Don't initialize it twice */
|
||||
TRACE_(dll)("Calling LibMain for %.*s, cs:ip=%04x:%04x ds=%04x di=%04x cx=%04x\n",
|
||||
@@ -798,7 +798,7 @@ static void NE_CallDllEntryPoint( NE_MODULE *pModule, DWORD dwReason )
|
||||
context.SegGs = wine_get_gs();
|
||||
context.SegCs = HIWORD(entryPoint);
|
||||
context.Eip = LOWORD(entryPoint);
|
||||
- context.Ebp = OFFSETOF(NtCurrentTeb()->WOW32Reserved) + FIELD_OFFSET(STACK16FRAME,bp);
|
||||
+ context.Ebp = OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) + FIELD_OFFSET(STACK16FRAME,bp);
|
||||
|
||||
args[7] = HIWORD(dwReason);
|
||||
args[6] = LOWORD(dwReason);
|
||||
diff --git a/dlls/krnl386.exe16/task.c b/dlls/krnl386.exe16/task.c
|
||||
index 30aa8666e2c..4f82621e660 100644
|
||||
--- a/dlls/krnl386.exe16/task.c
|
||||
+++ b/dlls/krnl386.exe16/task.c
|
||||
@@ -630,7 +630,7 @@ void WINAPI InitTask16( CONTEXT *context )
|
||||
|
||||
/* Initialize the INSTANCEDATA structure */
|
||||
pinstance = MapSL( MAKESEGPTR(CURRENT_DS, 0) );
|
||||
- pinstance->stackmin = OFFSETOF(NtCurrentTeb()->WOW32Reserved) + sizeof( STACK16FRAME );
|
||||
+ pinstance->stackmin = OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) + sizeof( STACK16FRAME );
|
||||
pinstance->stackbottom = pinstance->stackmin; /* yup, that's right. Confused me too. */
|
||||
pinstance->stacktop = ( pinstance->stackmin > LOWORD(context->Ebx) ?
|
||||
pinstance->stackmin - LOWORD(context->Ebx) : 0 ) + 150;
|
||||
@@ -1101,14 +1101,14 @@ void WINAPI SwitchStackTo16( WORD seg, WORD ptr, WORD top )
|
||||
|
||||
if (!(pData = GlobalLock16( seg ))) return;
|
||||
TRACE("old=%04x:%04x new=%04x:%04x\n",
|
||||
- SELECTOROF( NtCurrentTeb()->WOW32Reserved ),
|
||||
- OFFSETOF( NtCurrentTeb()->WOW32Reserved ), seg, ptr );
|
||||
+ SELECTOROF( NtCurrentTeb()->SystemReserved1[0] ),
|
||||
+ OFFSETOF( NtCurrentTeb()->SystemReserved1[0] ), seg, ptr );
|
||||
|
||||
/* Save the old stack */
|
||||
|
||||
oldFrame = CURRENT_STACK16;
|
||||
/* pop frame + args and push bp */
|
||||
- pData->old_ss_sp = (SEGPTR)NtCurrentTeb()->WOW32Reserved + sizeof(STACK16FRAME)
|
||||
+ pData->old_ss_sp = (SEGPTR)NtCurrentTeb()->SystemReserved1[0] + sizeof(STACK16FRAME)
|
||||
+ 2 * sizeof(WORD);
|
||||
*(WORD *)MapSL(pData->old_ss_sp) = oldFrame->bp;
|
||||
pData->stacktop = top;
|
||||
@@ -1122,7 +1122,7 @@ void WINAPI SwitchStackTo16( WORD seg, WORD ptr, WORD top )
|
||||
*/
|
||||
copySize = oldFrame->bp - OFFSETOF(pData->old_ss_sp);
|
||||
copySize += 3 * sizeof(WORD) + sizeof(STACK16FRAME);
|
||||
- NtCurrentTeb()->WOW32Reserved = (void *)MAKESEGPTR( seg, ptr - copySize );
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = (void *)MAKESEGPTR( seg, ptr - copySize );
|
||||
newFrame = CURRENT_STACK16;
|
||||
|
||||
/* Copy the stack frame and the local variables to the new stack */
|
||||
@@ -1141,7 +1141,7 @@ void WINAPI SwitchStackBack16( CONTEXT *context )
|
||||
STACK16FRAME *oldFrame, *newFrame;
|
||||
INSTANCEDATA *pData;
|
||||
|
||||
- if (!(pData = GlobalLock16(SELECTOROF(NtCurrentTeb()->WOW32Reserved))))
|
||||
+ if (!(pData = GlobalLock16(SELECTOROF(NtCurrentTeb()->SystemReserved1[0]))))
|
||||
return;
|
||||
if (!pData->old_ss_sp)
|
||||
{
|
||||
@@ -1160,7 +1160,7 @@ void WINAPI SwitchStackBack16( CONTEXT *context )
|
||||
|
||||
/* Switch back to the old stack */
|
||||
|
||||
- NtCurrentTeb()->WOW32Reserved = (void *)(pData->old_ss_sp - sizeof(STACK16FRAME));
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = (void *)(pData->old_ss_sp - sizeof(STACK16FRAME));
|
||||
context->SegSs = SELECTOROF(pData->old_ss_sp);
|
||||
context->Esp = OFFSETOF(pData->old_ss_sp) - sizeof(DWORD); /*ret addr*/
|
||||
pData->old_ss_sp = 0;
|
||||
diff --git a/dlls/krnl386.exe16/thunk.c b/dlls/krnl386.exe16/thunk.c
|
||||
index 9e12d273241..0232f7ebe6f 100644
|
||||
--- a/dlls/krnl386.exe16/thunk.c
|
||||
+++ b/dlls/krnl386.exe16/thunk.c
|
||||
@@ -464,7 +464,7 @@ void WINAPI __regs_QT_Thunk( CONTEXT *context )
|
||||
context16.Eip = LOWORD(context->Edx);
|
||||
/* point EBP to the STACK16FRAME on the stack
|
||||
* for the call_to_16 to set up the register content on calling */
|
||||
- context16.Ebp = OFFSETOF(NtCurrentTeb()->WOW32Reserved) + FIELD_OFFSET(STACK16FRAME,bp);
|
||||
+ context16.Ebp = OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) + FIELD_OFFSET(STACK16FRAME,bp);
|
||||
|
||||
/*
|
||||
* used to be (problematic):
|
||||
@@ -486,7 +486,7 @@ void WINAPI __regs_QT_Thunk( CONTEXT *context )
|
||||
* the number of parameters that the Win16 function
|
||||
* accepted (that it popped from the corresponding Win16 stack) */
|
||||
context->Esp += LOWORD(context16.Esp) -
|
||||
- ( OFFSETOF(NtCurrentTeb()->WOW32Reserved) - argsize );
|
||||
+ ( OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) - argsize );
|
||||
}
|
||||
DEFINE_REGS_ENTRYPOINT( QT_Thunk, 0 )
|
||||
|
||||
@@ -592,7 +592,7 @@ void WINAPI __regs_FT_Thunk( CONTEXT *context )
|
||||
context16.SegGs = wine_get_gs();
|
||||
context16.SegCs = HIWORD(callTarget);
|
||||
context16.Eip = LOWORD(callTarget);
|
||||
- context16.Ebp = OFFSETOF(NtCurrentTeb()->WOW32Reserved) + FIELD_OFFSET(STACK16FRAME,bp);
|
||||
+ context16.Ebp = OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) + FIELD_OFFSET(STACK16FRAME,bp);
|
||||
|
||||
argsize = context->Ebp-context->Esp-0x40;
|
||||
if (argsize > sizeof(newstack)) argsize = sizeof(newstack);
|
||||
@@ -604,8 +604,8 @@ void WINAPI __regs_FT_Thunk( CONTEXT *context )
|
||||
if (mapESPrelative & (1 << i))
|
||||
{
|
||||
SEGPTR *arg = (SEGPTR *)newstack[i];
|
||||
- *arg = MAKESEGPTR(SELECTOROF(NtCurrentTeb()->WOW32Reserved),
|
||||
- OFFSETOF(NtCurrentTeb()->WOW32Reserved) - argsize
|
||||
+ *arg = MAKESEGPTR(SELECTOROF(NtCurrentTeb()->SystemReserved1[0]),
|
||||
+ OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) - argsize
|
||||
+ (*(LPBYTE *)arg - oldstack));
|
||||
}
|
||||
|
||||
@@ -615,7 +615,7 @@ void WINAPI __regs_FT_Thunk( CONTEXT *context )
|
||||
context->Ecx = context16.Ecx;
|
||||
|
||||
context->Esp += LOWORD(context16.Esp) -
|
||||
- ( OFFSETOF(NtCurrentTeb()->WOW32Reserved) - argsize );
|
||||
+ ( OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) - argsize );
|
||||
|
||||
/* Copy modified buffers back to 32-bit stack */
|
||||
memcpy( oldstack, newstack, argsize );
|
||||
@@ -752,7 +752,7 @@ void WINAPI __regs_Common32ThkLS( CONTEXT *context )
|
||||
context16.Edi = LOWORD(context->Ecx);
|
||||
context16.SegCs = HIWORD(context->Eax);
|
||||
context16.Eip = LOWORD(context->Eax);
|
||||
- context16.Ebp = OFFSETOF(NtCurrentTeb()->WOW32Reserved) + FIELD_OFFSET(STACK16FRAME,bp);
|
||||
+ context16.Ebp = OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) + FIELD_OFFSET(STACK16FRAME,bp);
|
||||
|
||||
argsize = HIWORD(context->Edx) * 4;
|
||||
|
||||
@@ -810,7 +810,7 @@ void WINAPI __regs_OT_32ThkLSF( CONTEXT *context )
|
||||
context16.SegGs = wine_get_gs();
|
||||
context16.SegCs = HIWORD(context->Edx);
|
||||
context16.Eip = LOWORD(context->Edx);
|
||||
- context16.Ebp = OFFSETOF(NtCurrentTeb()->WOW32Reserved) + FIELD_OFFSET(STACK16FRAME,bp);
|
||||
+ context16.Ebp = OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) + FIELD_OFFSET(STACK16FRAME,bp);
|
||||
|
||||
argsize = 2 * *(WORD *)context->Esp + 2;
|
||||
|
||||
@@ -823,7 +823,7 @@ void WINAPI __regs_OT_32ThkLSF( CONTEXT *context )
|
||||
(LPBYTE)CURRENT_STACK16 - argsize, argsize );
|
||||
|
||||
context->Esp += LOWORD(context16.Esp) -
|
||||
- ( OFFSETOF(NtCurrentTeb()->WOW32Reserved) - argsize );
|
||||
+ ( OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) - argsize );
|
||||
}
|
||||
DEFINE_REGS_ENTRYPOINT( OT_32ThkLSF, 0 )
|
||||
|
||||
@@ -1279,26 +1279,26 @@ void WINAPI __regs_K32Thk1632Prolog( CONTEXT *context )
|
||||
DWORD argSize = context->Ebp - context->Esp;
|
||||
char *stack16 = (char *)context->Esp - 4;
|
||||
STACK16FRAME *frame16 = (STACK16FRAME *)stack16 - 1;
|
||||
- STACK32FRAME *frame32 = NtCurrentTeb()->WOW32Reserved;
|
||||
+ STACK32FRAME *frame32 = NtCurrentTeb()->SystemReserved1[0];
|
||||
char *stack32 = (char *)frame32 - argSize;
|
||||
WORD stackSel = SELECTOROF(frame32->frame16);
|
||||
DWORD stackBase = GetSelectorBase(stackSel);
|
||||
|
||||
TRACE("before SYSTHUNK hack: EBP: %08x ESP: %08x cur_stack: %p\n",
|
||||
- context->Ebp, context->Esp, NtCurrentTeb()->WOW32Reserved);
|
||||
+ context->Ebp, context->Esp, NtCurrentTeb()->SystemReserved1[0]);
|
||||
|
||||
memset(frame16, '\0', sizeof(STACK16FRAME));
|
||||
frame16->frame32 = frame32;
|
||||
frame16->ebp = context->Ebp;
|
||||
|
||||
memcpy(stack32, stack16, argSize);
|
||||
- NtCurrentTeb()->WOW32Reserved = (void *)MAKESEGPTR(stackSel, (DWORD)frame16 - stackBase);
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = (void *)MAKESEGPTR(stackSel, (DWORD)frame16 - stackBase);
|
||||
|
||||
context->Esp = (DWORD)stack32 + 4;
|
||||
context->Ebp = context->Esp + argSize;
|
||||
|
||||
TRACE("after SYSTHUNK hack: EBP: %08x ESP: %08x cur_stack: %p\n",
|
||||
- context->Ebp, context->Esp, NtCurrentTeb()->WOW32Reserved);
|
||||
+ context->Ebp, context->Esp, NtCurrentTeb()->SystemReserved1[0]);
|
||||
}
|
||||
|
||||
/* entry_point is never used again once the entry point has
|
||||
@@ -1321,7 +1321,7 @@ void WINAPI __regs_K32Thk1632Epilog( CONTEXT *context )
|
||||
if ( code[5] == 0xFF && code[6] == 0x55 && code[7] == 0xFC
|
||||
&& code[13] == 0x66 && code[14] == 0xCB)
|
||||
{
|
||||
- STACK16FRAME *frame16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
|
||||
+ STACK16FRAME *frame16 = MapSL((SEGPTR)NtCurrentTeb()->SystemReserved1[0]);
|
||||
char *stack16 = (char *)(frame16 + 1);
|
||||
DWORD argSize = frame16->ebp - (DWORD)stack16;
|
||||
char *stack32 = (char *)frame16->frame32 - argSize;
|
||||
@@ -1329,15 +1329,15 @@ void WINAPI __regs_K32Thk1632Epilog( CONTEXT *context )
|
||||
DWORD nArgsPopped = context->Esp - (DWORD)stack32;
|
||||
|
||||
TRACE("before SYSTHUNK hack: EBP: %08x ESP: %08x cur_stack: %p\n",
|
||||
- context->Ebp, context->Esp, NtCurrentTeb()->WOW32Reserved);
|
||||
+ context->Ebp, context->Esp, NtCurrentTeb()->SystemReserved1[0]);
|
||||
|
||||
- NtCurrentTeb()->WOW32Reserved = frame16->frame32;
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = frame16->frame32;
|
||||
|
||||
context->Esp = (DWORD)stack16 + nArgsPopped;
|
||||
context->Ebp = frame16->ebp;
|
||||
|
||||
TRACE("after SYSTHUNK hack: EBP: %08x ESP: %08x cur_stack: %p\n",
|
||||
- context->Ebp, context->Esp, NtCurrentTeb()->WOW32Reserved);
|
||||
+ context->Ebp, context->Esp, NtCurrentTeb()->SystemReserved1[0]);
|
||||
}
|
||||
}
|
||||
DEFINE_REGS_ENTRYPOINT( K32Thk1632Epilog, 0 )
|
||||
@@ -2337,7 +2337,7 @@ void WINAPI Throw16( LPCATCHBUF lpbuf, INT16 retval, CONTEXT *context )
|
||||
frame32 = pFrame->frame32;
|
||||
while (frame32 && frame32->frame16)
|
||||
{
|
||||
- if (OFFSETOF(frame32->frame16) < OFFSETOF(NtCurrentTeb()->WOW32Reserved))
|
||||
+ if (OFFSETOF(frame32->frame16) < OFFSETOF(NtCurrentTeb()->SystemReserved1[0]))
|
||||
break; /* Something strange is going on */
|
||||
if (OFFSETOF(frame32->frame16) > lpbuf[2])
|
||||
{
|
||||
diff --git a/dlls/krnl386.exe16/wowthunk.c b/dlls/krnl386.exe16/wowthunk.c
|
||||
index fa49a246ab8..bd69b844607 100644
|
||||
--- a/dlls/krnl386.exe16/wowthunk.c
|
||||
+++ b/dlls/krnl386.exe16/wowthunk.c
|
||||
@@ -222,7 +222,7 @@ static DWORD call16_handler( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RE
|
||||
{
|
||||
/* unwinding: restore the stack pointer in the TEB, and leave the Win16 mutex */
|
||||
STACK32FRAME *frame32 = CONTAINING_RECORD(frame, STACK32FRAME, frame);
|
||||
- NtCurrentTeb()->WOW32Reserved = (void *)frame32->frame16;
|
||||
+ NtCurrentTeb()->SystemReserved1[0] = (void *)frame32->frame16;
|
||||
_LeaveWin16Lock();
|
||||
}
|
||||
else if (record->ExceptionCode == EXCEPTION_ACCESS_VIOLATION ||
|
||||
@@ -543,7 +543,7 @@ BOOL WINAPI K32WOWCallback16Ex( DWORD vpfn16, DWORD dwFlags,
|
||||
context->SegCs, LOWORD(context->Eip), context->SegDs );
|
||||
while (count) DPRINTF( ",%04x", wstack[--count] );
|
||||
DPRINTF(") ss:sp=%04x:%04x",
|
||||
- SELECTOROF(NtCurrentTeb()->WOW32Reserved), OFFSETOF(NtCurrentTeb()->WOW32Reserved) );
|
||||
+ SELECTOROF(NtCurrentTeb()->SystemReserved1[0]), OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) );
|
||||
DPRINTF(" ax=%04x bx=%04x cx=%04x dx=%04x si=%04x di=%04x bp=%04x es=%04x fs=%04x\n",
|
||||
(WORD)context->Eax, (WORD)context->Ebx, (WORD)context->Ecx,
|
||||
(WORD)context->Edx, (WORD)context->Esi, (WORD)context->Edi,
|
||||
@@ -608,8 +608,8 @@ BOOL WINAPI K32WOWCallback16Ex( DWORD vpfn16, DWORD dwFlags,
|
||||
if (TRACE_ON(relay))
|
||||
{
|
||||
DPRINTF("%04x:RetFrom16() ss:sp=%04x:%04x ",
|
||||
- GetCurrentThreadId(), SELECTOROF(NtCurrentTeb()->WOW32Reserved),
|
||||
- OFFSETOF(NtCurrentTeb()->WOW32Reserved));
|
||||
+ GetCurrentThreadId(), SELECTOROF(NtCurrentTeb()->SystemReserved1[0]),
|
||||
+ OFFSETOF(NtCurrentTeb()->SystemReserved1[0]));
|
||||
DPRINTF(" ax=%04x bx=%04x cx=%04x dx=%04x bp=%04x sp=%04x\n",
|
||||
(WORD)context->Eax, (WORD)context->Ebx, (WORD)context->Ecx,
|
||||
(WORD)context->Edx, (WORD)context->Ebp, (WORD)context->Esp );
|
||||
@@ -627,10 +627,10 @@ BOOL WINAPI K32WOWCallback16Ex( DWORD vpfn16, DWORD dwFlags,
|
||||
|
||||
DPRINTF("%04x:CallTo16(func=%04x:%04x,ds=%04x",
|
||||
GetCurrentThreadId(), HIWORD(vpfn16), LOWORD(vpfn16),
|
||||
- SELECTOROF(NtCurrentTeb()->WOW32Reserved) );
|
||||
+ SELECTOROF(NtCurrentTeb()->SystemReserved1[0]) );
|
||||
while (count) DPRINTF( ",%04x", wstack[--count] );
|
||||
DPRINTF(") ss:sp=%04x:%04x\n",
|
||||
- SELECTOROF(NtCurrentTeb()->WOW32Reserved), OFFSETOF(NtCurrentTeb()->WOW32Reserved) );
|
||||
+ SELECTOROF(NtCurrentTeb()->SystemReserved1[0]), OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) );
|
||||
SYSLEVEL_CheckNotLevel( 2 );
|
||||
}
|
||||
|
||||
@@ -653,8 +653,8 @@ BOOL WINAPI K32WOWCallback16Ex( DWORD vpfn16, DWORD dwFlags,
|
||||
if (TRACE_ON(relay))
|
||||
{
|
||||
DPRINTF("%04x:RetFrom16() ss:sp=%04x:%04x retval=%08x\n",
|
||||
- GetCurrentThreadId(), SELECTOROF(NtCurrentTeb()->WOW32Reserved),
|
||||
- OFFSETOF(NtCurrentTeb()->WOW32Reserved), ret);
|
||||
+ GetCurrentThreadId(), SELECTOROF(NtCurrentTeb()->SystemReserved1[0]),
|
||||
+ OFFSETOF(NtCurrentTeb()->SystemReserved1[0]), ret);
|
||||
SYSLEVEL_CheckNotLevel( 2 );
|
||||
}
|
||||
}
|
||||
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
|
||||
index d57daa7984f..f071ea3b79b 100644
|
||||
--- a/dlls/ntdll/signal_i386.c
|
||||
+++ b/dlls/ntdll/signal_i386.c
|
||||
@@ -990,7 +990,7 @@ static inline void *init_handler( const ucontext_t *sigcontext, WORD *fs, WORD *
|
||||
* SS is still non-system segment. This is why both CS and SS
|
||||
* are checked.
|
||||
*/
|
||||
- return teb->WOW32Reserved;
|
||||
+ return teb->SystemReserved1[0];
|
||||
}
|
||||
return (void *)(ESP_sig(sigcontext) & ~3);
|
||||
}
|
||||
diff --git a/dlls/system.drv16/system.c b/dlls/system.drv16/system.c
|
||||
index 8bb5cf910df..ddd391344be 100644
|
||||
--- a/dlls/system.drv16/system.c
|
||||
+++ b/dlls/system.drv16/system.c
|
||||
@@ -72,7 +72,7 @@ static void CALLBACK SYSTEM_TimerTick( LPVOID arg, DWORD low, DWORD high )
|
||||
context.SegGs = wine_get_gs();
|
||||
context.SegCs = SELECTOROF( proc );
|
||||
context.Eip = OFFSETOF( proc );
|
||||
- context.Ebp = OFFSETOF(NtCurrentTeb()->WOW32Reserved) + FIELD_OFFSET(STACK16FRAME, bp);
|
||||
+ context.Ebp = OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) + FIELD_OFFSET(STACK16FRAME, bp);
|
||||
context.Eax = i + 1;
|
||||
|
||||
WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)&context );
|
||||
diff --git a/dlls/toolhelp.dll16/toolhelp.c b/dlls/toolhelp.dll16/toolhelp.c
|
||||
index cf5e6ef778c..531e622be82 100644
|
||||
--- a/dlls/toolhelp.dll16/toolhelp.c
|
||||
+++ b/dlls/toolhelp.dll16/toolhelp.c
|
||||
@@ -460,8 +460,8 @@ BOOL16 WINAPI TaskNext16( TASKENTRY *lpte )
|
||||
lpte->hTaskParent = pTask->hParent;
|
||||
lpte->hInst = pTask->hInstance;
|
||||
lpte->hModule = pTask->hModule;
|
||||
- lpte->wSS = SELECTOROF( pTask->teb->WOW32Reserved );
|
||||
- lpte->wSP = OFFSETOF( pTask->teb->WOW32Reserved );
|
||||
+ lpte->wSS = SELECTOROF( pTask->teb->SystemReserved1[0] );
|
||||
+ lpte->wSP = OFFSETOF( pTask->teb->SystemReserved1[0] );
|
||||
lpte->wStackTop = pInstData->stacktop;
|
||||
lpte->wStackMinimum = pInstData->stackmin;
|
||||
lpte->wStackBottom = pInstData->stackbottom;
|
||||
@@ -693,7 +693,7 @@ BOOL16 WINAPI TimerCount16( TIMERINFO *pTimerInfo )
|
||||
*/
|
||||
BOOL16 WINAPI SystemHeapInfo16( SYSHEAPINFO *pHeapInfo )
|
||||
{
|
||||
- STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
|
||||
+ STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->SystemReserved1[0]);
|
||||
HANDLE16 oldDS = stack16->ds;
|
||||
WORD user = LoadLibrary16( "USER.EXE" );
|
||||
WORD gdi = LoadLibrary16( "GDI.EXE" );
|
||||
diff --git a/dlls/user.exe16/message.c b/dlls/user.exe16/message.c
|
||||
index 9e07be97779..c020998b7e2 100644
|
||||
--- a/dlls/user.exe16/message.c
|
||||
+++ b/dlls/user.exe16/message.c
|
||||
@@ -248,13 +248,13 @@ static LRESULT call_window_proc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPA
|
||||
/* Window procedures want ax = hInstance, ds = es = ss */
|
||||
|
||||
memset(&context, 0, sizeof(context));
|
||||
- context.SegDs = context.SegEs = SELECTOROF(NtCurrentTeb()->WOW32Reserved);
|
||||
+ context.SegDs = context.SegEs = SELECTOROF(NtCurrentTeb()->SystemReserved1[0]);
|
||||
context.SegFs = wine_get_fs();
|
||||
context.SegGs = wine_get_gs();
|
||||
if (!(context.Eax = GetWindowWord( HWND_32(hwnd), GWLP_HINSTANCE ))) context.Eax = context.SegDs;
|
||||
context.SegCs = SELECTOROF(func);
|
||||
context.Eip = OFFSETOF(func);
|
||||
- context.Ebp = OFFSETOF(NtCurrentTeb()->WOW32Reserved) + FIELD_OFFSET(STACK16FRAME, bp);
|
||||
+ context.Ebp = OFFSETOF(NtCurrentTeb()->SystemReserved1[0]) + FIELD_OFFSET(STACK16FRAME, bp);
|
||||
|
||||
if (lParam)
|
||||
{
|
||||
@@ -277,7 +277,7 @@ static LRESULT call_window_proc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPA
|
||||
if (size)
|
||||
{
|
||||
memcpy( &args.u, MapSL(lParam), size );
|
||||
- lParam = PtrToUlong(NtCurrentTeb()->WOW32Reserved) - size;
|
||||
+ lParam = PtrToUlong(NtCurrentTeb()->SystemReserved1[0]) - size;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2100,7 +2100,7 @@ static LRESULT combo_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
|
||||
|
||||
static void edit_lock_buffer( HWND hwnd )
|
||||
{
|
||||
- STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
|
||||
+ STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->SystemReserved1[0]));
|
||||
HLOCAL16 hloc16 = GetWindowWord( hwnd, GWW_HANDLE16 );
|
||||
HANDLE16 oldDS;
|
||||
HLOCAL hloc32;
|
||||
@@ -2126,7 +2126,7 @@ static void edit_lock_buffer( HWND hwnd )
|
||||
|
||||
static void edit_unlock_buffer( HWND hwnd )
|
||||
{
|
||||
- STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
|
||||
+ STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->SystemReserved1[0]));
|
||||
HLOCAL16 hloc16 = GetWindowWord( hwnd, GWW_HANDLE16 );
|
||||
HANDLE16 oldDS;
|
||||
HLOCAL hloc32;
|
||||
@@ -2163,7 +2163,7 @@ static HLOCAL16 edit_get_handle( HWND hwnd )
|
||||
if (!(hloc = (HLOCAL)wow_handlers32.edit_proc( hwnd, EM_GETHANDLE, 0, 0, FALSE ))) return 0;
|
||||
alloc_size = LocalSize( hloc );
|
||||
|
||||
- stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
|
||||
+ stack16 = MapSL(PtrToUlong(NtCurrentTeb()->SystemReserved1[0]));
|
||||
oldDS = stack16->ds;
|
||||
stack16->ds = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
|
||||
|
||||
@@ -2201,7 +2201,7 @@ done:
|
||||
|
||||
static void edit_set_handle( HWND hwnd, HLOCAL16 hloc16 )
|
||||
{
|
||||
- STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
|
||||
+ STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->SystemReserved1[0]));
|
||||
HINSTANCE16 hInstance = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
|
||||
HANDLE16 oldDS = stack16->ds;
|
||||
HLOCAL hloc32;
|
||||
@@ -2231,7 +2231,7 @@ static void edit_destroy_handle( HWND hwnd )
|
||||
HLOCAL16 hloc16 = GetWindowWord( hwnd, GWW_HANDLE16 );
|
||||
if (hloc16)
|
||||
{
|
||||
- STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
|
||||
+ STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->SystemReserved1[0]));
|
||||
HANDLE16 oldDS = stack16->ds;
|
||||
|
||||
stack16->ds = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
|
||||
diff --git a/dlls/user.exe16/user.c b/dlls/user.exe16/user.c
|
||||
index aba797debc1..44e6f49e1a3 100644
|
||||
--- a/dlls/user.exe16/user.c
|
||||
+++ b/dlls/user.exe16/user.c
|
||||
@@ -1388,7 +1388,7 @@ DWORD WINAPI GetTabbedTextExtent16( HDC16 hdc, LPCSTR lpstr, INT16 count,
|
||||
*/
|
||||
DWORD WINAPI UserSeeUserDo16(WORD wReqType, WORD wParam1, WORD wParam2, WORD wParam3)
|
||||
{
|
||||
- STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
|
||||
+ STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->SystemReserved1[0]);
|
||||
HANDLE16 oldDS = stack16->ds;
|
||||
DWORD ret = (DWORD)-1;
|
||||
|
||||
@@ -1761,7 +1761,7 @@ UINT16 WINAPI RealizePalette16( HDC16 hdc )
|
||||
*/
|
||||
WORD WINAPI GetFreeSystemResources16( WORD resType )
|
||||
{
|
||||
- STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
|
||||
+ STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->SystemReserved1[0]);
|
||||
HANDLE16 oldDS = stack16->ds;
|
||||
int userPercent, gdiPercent;
|
||||
|
||||
diff --git a/dlls/user.exe16/window.c b/dlls/user.exe16/window.c
|
||||
index e81d9ace3ae..afe40b2df98 100644
|
||||
--- a/dlls/user.exe16/window.c
|
||||
+++ b/dlls/user.exe16/window.c
|
||||
@@ -455,7 +455,7 @@ HWND16 WINAPI GetParent16( HWND16 hwnd )
|
||||
*/
|
||||
BOOL16 WINAPI IsWindow16( HWND16 hwnd )
|
||||
{
|
||||
- STACK16FRAME *frame = MapSL( (SEGPTR)NtCurrentTeb()->WOW32Reserved );
|
||||
+ STACK16FRAME *frame = MapSL( (SEGPTR)NtCurrentTeb()->SystemReserved1[0] );
|
||||
frame->es = USER_HeapSel;
|
||||
/* don't use WIN_Handle32 here, we don't care about the full handle */
|
||||
return IsWindow( HWND_32(hwnd) );
|
||||
diff --git a/include/winternl.h b/include/winternl.h
|
||||
index 5cd1664f1fe..ae3163daeac 100644
|
||||
--- a/include/winternl.h
|
||||
+++ b/include/winternl.h
|
||||
@@ -325,7 +325,7 @@ typedef struct _TEB
|
||||
PVOID WOW32Reserved; /* 0c0/0100 */
|
||||
ULONG CurrentLocale; /* 0c4/0108 */
|
||||
ULONG FpSoftwareStatusRegister; /* 0c8/010c */
|
||||
- PVOID SystemReserved1[54]; /* 0cc/0110 used for kernel32 private data in Wine */
|
||||
+ PVOID SystemReserved1[54]; /* 0cc/0110 used for krnl386.exe16 private data in Wine */
|
||||
LONG ExceptionCode; /* 1a4/02c0 */
|
||||
ACTIVATION_CONTEXT_STACK ActivationContextStack; /* 1a8/02c8 */
|
||||
BYTE SpareBytes1[24]; /* 1bc/02e8 used for ntdll private data in Wine */
|
||||
diff --git a/tools/winebuild/relay.c b/tools/winebuild/relay.c
|
||||
index e9228a00d48..63ae977a0ae 100644
|
||||
--- a/tools/winebuild/relay.c
|
||||
+++ b/tools/winebuild/relay.c
|
||||
@@ -31,7 +31,7 @@
|
||||
#include "build.h"
|
||||
|
||||
/* offset of the stack pointer relative to %fs:(0) */
|
||||
-#define STACKOFFSET 0xc0 /* FIELD_OFFSET(TEB,WOW32Reserved) */
|
||||
+#define STACKOFFSET 0xcc /* FIELD_OFFSET(TEB,SystemReserved1[0]) */
|
||||
|
||||
/* fix this if the ntdll_thread_regs structure is changed */
|
||||
#define GS_OFFSET 0x1d8 /* FIELD_OFFSET(TEB,SpareBytes1) + FIELD_OFFSET(ntdll_thread_data,gs) */
|
||||
--
|
||||
2.12.2
|
||||
|
@ -1,15 +1,16 @@
|
||||
From 03c327c90dcdf127c25c32872eb70d907a87a83d Mon Sep 17 00:00:00 2001
|
||||
From a905d238bf7bdfa11ba1a78cea673bd7c835ee19 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 12 May 2017 04:05:24 +0200
|
||||
Subject: winebuild: Use Windows 7 WOW64 signature for syscall thunks.
|
||||
|
||||
---
|
||||
dlls/ntdll/signal_i386.c | 2 ++
|
||||
include/winternl.h | 2 +-
|
||||
tools/winebuild/spec32.c | 32 ++++++++++++++++++++++++++------
|
||||
2 files changed, 28 insertions(+), 6 deletions(-)
|
||||
3 files changed, 29 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
|
||||
index d57daa7984f..ffa9c1bbb0f 100644
|
||||
index f071ea3b79b..602688820a1 100644
|
||||
--- a/dlls/ntdll/signal_i386.c
|
||||
+++ b/dlls/ntdll/signal_i386.c
|
||||
@@ -481,6 +481,7 @@ static wine_signal_handler handlers[256];
|
||||
@ -28,6 +29,19 @@ index d57daa7984f..ffa9c1bbb0f 100644
|
||||
thread_data = (struct ntdll_thread_data *)(*teb)->SpareBytes1;
|
||||
if (!(thread_data->fs = wine_ldt_alloc_fs()))
|
||||
{
|
||||
diff --git a/include/winternl.h b/include/winternl.h
|
||||
index ae3163daeac..6b0624290fa 100644
|
||||
--- a/include/winternl.h
|
||||
+++ b/include/winternl.h
|
||||
@@ -322,7 +322,7 @@ typedef struct _TEB
|
||||
PVOID CsrClientThread; /* 03c/0070 */
|
||||
PVOID Win32ThreadInfo; /* 040/0078 */
|
||||
ULONG Win32ClientInfo[31]; /* 044/0080 used for user32 private data in Wine */
|
||||
- PVOID WOW32Reserved; /* 0c0/0100 */
|
||||
+ PVOID WOW32Reserved; /* 0c0/0100 used for ntdll syscall thunks */
|
||||
ULONG CurrentLocale; /* 0c4/0108 */
|
||||
ULONG FpSoftwareStatusRegister; /* 0c8/010c */
|
||||
PVOID SystemReserved1[54]; /* 0cc/0110 used for krnl386.exe16 private data in Wine */
|
||||
diff --git a/tools/winebuild/spec32.c b/tools/winebuild/spec32.c
|
||||
index fbde7ce6937..452e26fa949 100644
|
||||
--- a/tools/winebuild/spec32.c
|
Loading…
Reference in New Issue
Block a user