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;