forked from Mirrors/wine-wine
kernel: Reimplemented the SMap/SUnmap functions in assembly.
parent
1ef9a6db4e
commit
643463b456
|
@ -922,26 +922,26 @@
|
||||||
@ stdcall RtlMoveMemory(ptr ptr long) ntdll.RtlMoveMemory
|
@ stdcall RtlMoveMemory(ptr ptr long) ntdll.RtlMoveMemory
|
||||||
@ stdcall RtlUnwind(ptr ptr ptr long) ntdll.RtlUnwind
|
@ stdcall RtlUnwind(ptr ptr ptr long) ntdll.RtlUnwind
|
||||||
@ stdcall RtlZeroMemory(ptr long) ntdll.RtlZeroMemory
|
@ stdcall RtlZeroMemory(ptr long) ntdll.RtlZeroMemory
|
||||||
@ stdcall -i386 -register SMapLS()
|
@ stdcall -i386 -norelay SMapLS()
|
||||||
@ stdcall -i386 -register SMapLS_IP_EBP_12()
|
@ stdcall -i386 -norelay SMapLS_IP_EBP_12()
|
||||||
@ stdcall -i386 -register SMapLS_IP_EBP_16()
|
@ stdcall -i386 -norelay SMapLS_IP_EBP_16()
|
||||||
@ stdcall -i386 -register SMapLS_IP_EBP_20()
|
@ stdcall -i386 -norelay SMapLS_IP_EBP_20()
|
||||||
@ stdcall -i386 -register SMapLS_IP_EBP_24()
|
@ stdcall -i386 -norelay SMapLS_IP_EBP_24()
|
||||||
@ stdcall -i386 -register SMapLS_IP_EBP_28()
|
@ stdcall -i386 -norelay SMapLS_IP_EBP_28()
|
||||||
@ stdcall -i386 -register SMapLS_IP_EBP_32()
|
@ stdcall -i386 -norelay SMapLS_IP_EBP_32()
|
||||||
@ stdcall -i386 -register SMapLS_IP_EBP_36()
|
@ stdcall -i386 -norelay SMapLS_IP_EBP_36()
|
||||||
@ stdcall -i386 -register SMapLS_IP_EBP_40()
|
@ stdcall -i386 -norelay SMapLS_IP_EBP_40()
|
||||||
@ stdcall -i386 -register SMapLS_IP_EBP_8()
|
@ stdcall -i386 -norelay SMapLS_IP_EBP_8()
|
||||||
@ stdcall -i386 -register SUnMapLS()
|
@ stdcall -i386 -norelay SUnMapLS()
|
||||||
@ stdcall -i386 -register SUnMapLS_IP_EBP_12()
|
@ stdcall -i386 -norelay SUnMapLS_IP_EBP_12()
|
||||||
@ stdcall -i386 -register SUnMapLS_IP_EBP_16()
|
@ stdcall -i386 -norelay SUnMapLS_IP_EBP_16()
|
||||||
@ stdcall -i386 -register SUnMapLS_IP_EBP_20()
|
@ stdcall -i386 -norelay SUnMapLS_IP_EBP_20()
|
||||||
@ stdcall -i386 -register SUnMapLS_IP_EBP_24()
|
@ stdcall -i386 -norelay SUnMapLS_IP_EBP_24()
|
||||||
@ stdcall -i386 -register SUnMapLS_IP_EBP_28()
|
@ stdcall -i386 -norelay SUnMapLS_IP_EBP_28()
|
||||||
@ stdcall -i386 -register SUnMapLS_IP_EBP_32()
|
@ stdcall -i386 -norelay SUnMapLS_IP_EBP_32()
|
||||||
@ stdcall -i386 -register SUnMapLS_IP_EBP_36()
|
@ stdcall -i386 -norelay SUnMapLS_IP_EBP_36()
|
||||||
@ stdcall -i386 -register SUnMapLS_IP_EBP_40()
|
@ stdcall -i386 -norelay SUnMapLS_IP_EBP_40()
|
||||||
@ stdcall -i386 -register SUnMapLS_IP_EBP_8()
|
@ stdcall -i386 -norelay SUnMapLS_IP_EBP_8()
|
||||||
@ stdcall ScrollConsoleScreenBufferA(long ptr ptr ptr ptr)
|
@ stdcall ScrollConsoleScreenBufferA(long ptr ptr ptr ptr)
|
||||||
@ stdcall ScrollConsoleScreenBufferW(long ptr ptr ptr ptr)
|
@ stdcall ScrollConsoleScreenBufferW(long ptr ptr ptr ptr)
|
||||||
@ stdcall SearchPathA(str str str long ptr ptr)
|
@ stdcall SearchPathA(str str str long ptr ptr)
|
||||||
|
@ -1092,7 +1092,7 @@
|
||||||
@ stdcall UTRegister(long str str str ptr ptr ptr)
|
@ stdcall UTRegister(long str str str ptr ptr ptr)
|
||||||
@ stdcall UTUnRegister(long)
|
@ stdcall UTUnRegister(long)
|
||||||
@ stdcall UnMapLS(long)
|
@ stdcall UnMapLS(long)
|
||||||
@ stdcall -i386 -register UnMapSLFixArray(long long)
|
@ stdcall -i386 -norelay UnMapSLFixArray(long long)
|
||||||
@ stdcall UnhandledExceptionFilter(ptr)
|
@ stdcall UnhandledExceptionFilter(ptr)
|
||||||
@ stdcall UninitializeCriticalSection(ptr)
|
@ stdcall UninitializeCriticalSection(ptr)
|
||||||
@ stdcall UnlockFile(long long long long long)
|
@ stdcall UnlockFile(long long long long long)
|
||||||
|
|
|
@ -562,15 +562,14 @@ LPVOID WINAPI MapSLFix( SEGPTR sptr )
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* UnMapSLFixArray (KERNEL32.@)
|
* UnMapSLFixArray (KERNEL32.@)
|
||||||
|
*
|
||||||
|
* Must not change EAX, hence defined as asm function.
|
||||||
*/
|
*/
|
||||||
void WINAPI __regs_UnMapSLFixArray( SEGPTR sptr[], INT length, CONTEXT86 *context )
|
#ifdef __i386__
|
||||||
{
|
__ASM_GLOBAL_FUNC( UnMapSLFixArray, "ret $8" );
|
||||||
/* Must not change EAX, hence defined as 'register' function */
|
|
||||||
}
|
|
||||||
#ifdef DEFINE_REGS_ENTRYPOINT
|
|
||||||
DEFINE_REGS_ENTRYPOINT( UnMapSLFixArray, 8, 8 );
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetThreadSelectorEntry (KERNEL32.@)
|
* GetThreadSelectorEntry (KERNEL32.@)
|
||||||
*/
|
*/
|
||||||
|
@ -638,32 +637,29 @@ BOOL WINAPI GetThreadSelectorEntry( HANDLE hthread, DWORD sel, LPLDT_ENTRY ldten
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEFINE_REGS_ENTRYPOINT
|
#ifdef __i386__
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SMapLS (KERNEL32.@)
|
* SMapLS (KERNEL32.@)
|
||||||
*/
|
*/
|
||||||
void WINAPI __regs_SMapLS( CONTEXT86 *context )
|
__ASM_GLOBAL_FUNC( SMapLS,
|
||||||
{
|
"xor %edx,%edx\n\t"
|
||||||
if (HIWORD(context->Eax))
|
"testl $0xffff0000,%eax\n\t"
|
||||||
{
|
"jz 1f\n\t"
|
||||||
context->Eax = MapLS( (LPVOID)context->Eax );
|
"pushl %eax\n\t"
|
||||||
context->Edx = context->Eax;
|
"call " __ASM_NAME("MapLS") "\n\t"
|
||||||
} else {
|
"movl %eax,%edx\n"
|
||||||
context->Edx = 0;
|
"1:\tret" );
|
||||||
}
|
|
||||||
}
|
|
||||||
DEFINE_REGS_ENTRYPOINT( SMapLS, 0, 0 );
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SUnMapLS (KERNEL32.@)
|
* SUnMapLS (KERNEL32.@)
|
||||||
*/
|
*/
|
||||||
void WINAPI __regs_SUnMapLS( CONTEXT86 *context )
|
__ASM_GLOBAL_FUNC( SUnMapLS,
|
||||||
{
|
"pushl %eax\n\t" /* preserve eax */
|
||||||
if (HIWORD(context->Eax)) UnMapLS( (SEGPTR)context->Eax );
|
"pushl %eax\n\t"
|
||||||
}
|
"call " __ASM_NAME("UnMapLS") "\n\t"
|
||||||
DEFINE_REGS_ENTRYPOINT( SUnMapLS, 0, 0 );
|
"popl %eax\n\t"
|
||||||
|
"ret" );
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SMapLS_IP_EBP_8 (KERNEL32.@)
|
* SMapLS_IP_EBP_8 (KERNEL32.@)
|
||||||
|
@ -682,17 +678,11 @@ DEFINE_REGS_ENTRYPOINT( SUnMapLS, 0, 0 );
|
||||||
* unravel them at SUnMapLS. We just store the segmented pointer there.
|
* unravel them at SUnMapLS. We just store the segmented pointer there.
|
||||||
*/
|
*/
|
||||||
#define DEFINE_SMapLS(n) \
|
#define DEFINE_SMapLS(n) \
|
||||||
void WINAPI __regs_SMapLS_IP_EBP_ ## n (CONTEXT86 *context) \
|
__ASM_GLOBAL_FUNC( SMapLS_IP_EBP_ ## n, \
|
||||||
{ \
|
"movl " #n "(%ebp),%eax\n\t" \
|
||||||
SEGPTR *ptr = (SEGPTR *)(context->Ebp + n); \
|
"call " __ASM_NAME("SMapLS") "\n\t" \
|
||||||
if (!HIWORD(*ptr)) \
|
"movl %edx," #n "(%ebp)\n\t" \
|
||||||
{ \
|
"ret" );
|
||||||
context->Eax = *ptr; \
|
|
||||||
*ptr = 0; \
|
|
||||||
} \
|
|
||||||
else *ptr = context->Eax = MapLS((LPVOID)*ptr); \
|
|
||||||
} \
|
|
||||||
DEFINE_REGS_ENTRYPOINT( SMapLS_IP_EBP_ ## n, 0, 0 )
|
|
||||||
|
|
||||||
DEFINE_SMapLS(8);
|
DEFINE_SMapLS(8);
|
||||||
DEFINE_SMapLS(12);
|
DEFINE_SMapLS(12);
|
||||||
|
@ -718,13 +708,13 @@ DEFINE_SMapLS(40);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define DEFINE_SUnMapLS(n) \
|
#define DEFINE_SUnMapLS(n) \
|
||||||
void WINAPI __regs_SUnMapLS_IP_EBP_ ## n (CONTEXT86 *context) \
|
__ASM_GLOBAL_FUNC( SUnMapLS_IP_EBP_ ## n, \
|
||||||
{ \
|
"pushl %eax\n\t" /* preserve eax */ \
|
||||||
SEGPTR *ptr = (SEGPTR *)(context->Ebp + n); \
|
"pushl " #n "(%ebp)\n\t" \
|
||||||
UnMapLS( *ptr ); \
|
"call " __ASM_NAME("UnMapLS") "\n\t" \
|
||||||
*ptr = 0; \
|
"movl $0," #n "(%ebp)\n\t" \
|
||||||
} \
|
"popl %eax\n\t" \
|
||||||
DEFINE_REGS_ENTRYPOINT( SUnMapLS_IP_EBP_ ## n, 0, 0 )
|
"ret" )
|
||||||
|
|
||||||
DEFINE_SUnMapLS(8);
|
DEFINE_SUnMapLS(8);
|
||||||
DEFINE_SUnMapLS(12);
|
DEFINE_SUnMapLS(12);
|
||||||
|
@ -736,4 +726,4 @@ DEFINE_SUnMapLS(32);
|
||||||
DEFINE_SUnMapLS(36);
|
DEFINE_SUnMapLS(36);
|
||||||
DEFINE_SUnMapLS(40);
|
DEFINE_SUnMapLS(40);
|
||||||
|
|
||||||
#endif /* DEFINE_REGS_ENTRYPOINT */
|
#endif /* __i386__ */
|
||||||
|
|
Loading…
Reference in New Issue