Author: tkreuzer
Date: Sat Jul 23 17:16:51 2011
New Revision: 52810
URL:
http://svn.reactos.org/svn/reactos?rev=52810&view=rev
Log:
{KERNEL32]
- move BaseFiberStartup to fiber.S
- add FPO debug info for MSVC builds
- remove excessive END directives (fixes msvc build)
- add a stub for amd64
Modified:
trunk/reactos/dll/win32/kernel32/client/amd64/fiber.S
trunk/reactos/dll/win32/kernel32/client/i386/fiber.S
trunk/reactos/dll/win32/kernel32/client/i386/thread.S
Modified: trunk/reactos/dll/win32/kernel32/client/amd64/fiber.S
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/amd64/fiber.S [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/amd64/fiber.S [iso-8859-1] Sat Jul 23 17:16:51
2011
@@ -1,19 +1,27 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
- * FILE: lib/kernel32/thread/i386/fiber.S
- * PURPOSE: Fiber context switch code for the x86 architecture
- * PROGRAMMERS: Alex Ionescu (alex(a)relsoft.net)
- * KJK::Hyperion <noog(a)libero.it>
+ * FILE: dll/win32//kernel32/client/amd64/fiber.S
+ * PURPOSE: Fiber context switch code for the amd64 architecture
+ * PROGRAMMER:
*/
#include <asm.inc>
+
+PUBLIC BaseFiberStartup
+.PROC BaseFiberStartup
+ UNIMPLEMENTED BaseFiberStartup
+ /* FIXME: TODO */
+ ret
+
+.ENDP BaseFiberStartup
PUBLIC SwitchToFiber
SwitchToFiber:
+ UNIMPLEMENTED BaseFiberStartup
/* FIXME: TODO */
- ret 4
+ ret
END
Modified: trunk/reactos/dll/win32/kernel32/client/i386/fiber.S
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/i386/fiber.S [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/i386/fiber.S [iso-8859-1] Sat Jul 23 17:16:51
2011
@@ -10,16 +10,32 @@
#include <asm.inc>
#include <ks386.inc>
+EXTERN _BaseThreadStartup@8:PROC
+
.code
+
+PUBLIC _BaseFiberStartup@0
+.PROC BaseFiberStartup@0
+ /* Frame pointer is zeroed */
+ FPO 0, 0, 0, 0, 0, FRAME_FPO
+
+ /* Get the fiber data */
+ mov eax, fs:[TEB_FIBER_DATA]
+
+ push dword ptr [eax+FIBER_CONTEXT_EBX] /* Parameter */
+ push dword ptr [eax+FIBER_CONTEXT_EAX] /* Start Address */
+ call _BaseThreadStartup@8
+.ENDP BaseFiberStartup@0
+
PUBLIC _SwitchToFiber@4
_SwitchToFiber@4:
/* Get the TEB */
mov edx, fs:[TEB_SELF]
-
+
/* Get the Fiber */
mov eax, [edx+TEB_FIBER_DATA]
-
+
/* Save the non-volatile registers */
mov [eax+FIBER_CONTEXT_EBX], ebx
mov [eax+FIBER_CONTEXT_ESI], esi
@@ -29,27 +45,27 @@
/* Check if we're to save FPU State */
cmp dword ptr [eax+FIBER_CONTEXT_FLAGS], CONTEXT_FULL OR CONTEXT_FLOATING_POINT
jnz NoFpuStateSave
-
+
/* Save the FPU State (Status and Control)*/
fstsw [eax+FIBER_CONTEXT_FLOAT_SAVE_STATUS_WORD]
fnstcw [eax+FIBER_CONTEXT_FLOAT_SAVE_CONTROL_WORD]
-
+
/* Check if the CPU supports SIMD MXCSR State Save */
cmp byte ptr ds:[PF_XMMI_INSTRUCTIONS_AVAILABLE], 1
jnz NoFpuStateSave
stmxcsr [eax+FIBER_CONTEXT_DR6]
-
+
NoFpuStateSave:
/* Save stack since we're not touching it anymore */
mov [eax+FIBER_CONTEXT_ESP], esp
-
+
/* Transfer some data from the TEB */
mov ecx, [edx+TEB_FLS_DATA]
mov [eax+FIBER_FLS_DATA], ecx
mov ecx, [edx+TEB_ACTIVATION_CONTEXT_STACK_POINTER]
mov [eax+FIBER_ACTIVATION_CONTEXT_STACK], ecx
-
+
/* Transfer some data related to the Stack */
mov ecx, [edx+TEB_EXCEPTION_LIST]
mov [eax+FIBER_EXCEPTION_LIST], ecx
@@ -57,11 +73,11 @@
mov [eax+FIBER_STACK_LIMIT], ecx
mov ecx, [edx+TEB_GUARANTEED_STACK_BYTES]
mov [eax+FIBER_GUARANTEED_STACK_BYTES], ecx
-
+
/* Switch to the new fiber */
mov ecx, [esp+4]
mov [edx+TEB_FIBER_DATA], ecx
-
+
/* Switch Fiber Data */
mov esi, [ecx+FIBER_EXCEPTION_LIST]
mov [edx+TEB_EXCEPTION_LIST], esi
@@ -75,34 +91,34 @@
mov [edx+TEB_GUARANTEED_STACK_BYTES], esi
mov esi, [ecx+FIBER_ACTIVATION_CONTEXT_STACK]
mov [edx+TEB_ACTIVATION_CONTEXT_STACK_POINTER], esi
-
+
/* Restore FPU State */
cmp dword ptr [eax+FIBER_CONTEXT_FLAGS], CONTEXT_FULL OR CONTEXT_FLOATING_POINT
jnz NoFpuStateRestore
-
+
/* Check if the Status Word Changed */
mov esi, [eax+FIBER_CONTEXT_FLOAT_SAVE_STATUS_WORD]
cmp si, word ptr [ecx+FIBER_CONTEXT_FLOAT_SAVE_STATUS_WORD]
jnz StatusWordChanged
-
+
/* Check if the Control Word Changed */
mov esi, [eax+FIBER_CONTEXT_FLOAT_SAVE_CONTROL_WORD]
cmp si, word ptr [ecx+FIBER_CONTEXT_FLOAT_SAVE_CONTROL_WORD]
jz ControlWordEqual
-
+
StatusWordChanged:
/* Load the new one */
mov word ptr [ecx+FIBER_CONTEXT_FLOAT_SAVE_TAG_WORD], HEX(0FFFF)
fldenv [ecx+FIBER_CONTEXT_FLOAT_SAVE_CONTROL_WORD]
-
+
ControlWordEqual:
/* Load the new one */
cmp byte ptr ds:[PF_XMMI_INSTRUCTIONS_AVAILABLE], 1
jnz NoFpuStateRestore
ldmxcsr [ecx+FIBER_CONTEXT_DR6]
-
+
NoFpuStateRestore:
/* Restore non-volatile registers */
@@ -111,7 +127,7 @@
mov ebx, [ecx+FIBER_CONTEXT_EBX]
mov ebp, [ecx+FIBER_CONTEXT_EBP]
mov esp, [ecx+FIBER_CONTEXT_ESP]
-
+
/* Restore FLS Data */
mov eax, [ecx+FIBER_FLS_DATA]
mov [edx+TEB_FLS_DATA], eax
Modified: trunk/reactos/dll/win32/kernel32/client/i386/thread.S
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/i386/thread.S [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/i386/thread.S [iso-8859-1] Sat Jul 23 17:16:51
2011
@@ -24,7 +24,7 @@
push eax /* lpStartAddress */
push 0 /* Return EIP */
jmp _BaseThreadStartup@8
-END
+
PUBLIC _BaseProcessStartThunk@0
_BaseProcessStartThunk@0:
@@ -35,16 +35,7 @@
push 0 /* Return EIP */
jmp _BaseProcessStartup@4
-END
-PUBLIC _BaseFiberStartup@0
-_BaseFiberStartup@0:
- /* Get the fiber data */
- mov eax, fs:[TEB_FIBER_DATA]
-
- push dword ptr [eax+FIBER_CONTEXT_EBX] /* Parameter */
- push dword ptr [eax+FIBER_CONTEXT_EAX] /* Start Address */
- call _BaseThreadStartup@8
END
/* EOF */