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/a... ============================================================================== --- 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@relsoft.net) - * KJK::Hyperion noog@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/i... ============================================================================== --- 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/i... ============================================================================== --- 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 */