CVS: winex/loader task.c,1.8,1.9
[email protected] 12 Sep 2007 12:35:40 -0000
| Newsgroups | gmane.comp.emulators.winex.cvs |
|---|---|
| Message-ID | <[email protected]> |
Subject: winex/loader task.c,1.8,1.9Update of /var/lib/cvsd/cvsroot/winex/loader
In directory agravaine:/tmp/cvs-serv11812/loader
Modified Files:
task.c
Log Message:
- changed TEB::cur_stack to TEB::WOW32Reserved. WOW32Reserved is now at offset 0xC0 (cur_stack was at 0x70). The old cur_stack has been renamed to 'unknown70'.
Index: task.c
===================================================================
RCS file: /var/lib/cvsd/cvsroot/winex/loader/task.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- task.c 9 Jan 2006 18:29:59 -0000 1.8
+++ task.c 12 Sep 2007 12:35:38 -0000 1.9
@@ -531,7 +531,7 @@
/* Initialize the INSTANCEDATA structure */
pinstance = MapSL( MAKESEGPTR(CURRENT_DS, 0) );
- pinstance->stackmin = OFFSETOF( pTask->teb->cur_stack ) + sizeof( STACK16FRAME );
+ pinstance->stackmin = OFFSETOF( pTask->teb->WOW32Reserved ) + 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;
@@ -1082,14 +1082,14 @@
if (!(pTask = TASK_GetCurrent())) return;
if (!(pData = (INSTANCEDATA *)GlobalLock16( seg ))) return;
TRACE("old=%04x:%04x new=%04x:%04x\n",
- SELECTOROF( pTask->teb->cur_stack ),
- OFFSETOF( pTask->teb->cur_stack ), seg, ptr );
+ SELECTOROF( pTask->teb->WOW32Reserved ),
+ OFFSETOF( pTask->teb->WOW32Reserved ), seg, ptr );
/* Save the old stack */
oldFrame = THREAD_STACK16( pTask->teb );
/* pop frame + args and push bp */
- pData->old_ss_sp = pTask->teb->cur_stack + sizeof(STACK16FRAME)
+ pData->old_ss_sp = ((DWORD)pTask->teb->WOW32Reserved) + sizeof(STACK16FRAME)
+ 2 * sizeof(WORD);
*(WORD *)MapSL(pData->old_ss_sp) = oldFrame->bp;
pData->stacktop = top;
@@ -1103,7 +1103,7 @@
*/
copySize = oldFrame->bp - OFFSETOF(pData->old_ss_sp);
copySize += 3 * sizeof(WORD) + sizeof(STACK16FRAME);
- pTask->teb->cur_stack = MAKESEGPTR( seg, ptr - copySize );
+ pTask->teb->WOW32Reserved = (void *)(MAKESEGPTR( seg, ptr - copySize ));
newFrame = THREAD_STACK16( pTask->teb );
/* Copy the stack frame and the local variables to the new stack */
@@ -1122,7 +1122,7 @@
STACK16FRAME *oldFrame, *newFrame;
INSTANCEDATA *pData;
- if (!(pData = (INSTANCEDATA *)GlobalLock16(SELECTOROF(NtCurrentTeb()->cur_stack))))
+ if (!(pData = (INSTANCEDATA *)GlobalLock16(SELECTOROF(NtCurrentTeb()->WOW32Reserved))))
return;
if (!pData->old_ss_sp)
{
@@ -1141,7 +1141,7 @@
/* Switch back to the old stack */
- NtCurrentTeb()->cur_stack = pData->old_ss_sp - sizeof(STACK16FRAME);
+ NtCurrentTeb()->WOW32Reserved = (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;
@@ -1491,8 +1491,8 @@
lpte->hTaskParent = pTask->hParent;
lpte->hInst = pTask->hInstance;
lpte->hModule = pTask->hModule;
- lpte->wSS = SELECTOROF( pTask->teb->cur_stack );
- lpte->wSP = OFFSETOF( pTask->teb->cur_stack );
+ lpte->wSS = SELECTOROF( pTask->teb->WOW32Reserved );
+ lpte->wSP = OFFSETOF( pTask->teb->WOW32Reserved );
lpte->wStackTop = pInstData->stacktop;
lpte->wStackMinimum = pInstData->stackmin;
lpte->wStackBottom = pInstData->stackbottom;