reactos/sdk/lib/crt/wine/rosglue_i386.s

48 lines
935 B
ArmAsm
Raw Normal View History

#include <asm.inc>
.code
EXTERN _RtlUnwind@16:PROC
// ASM wrapper for Wine code. This is needed, because Wine code expects
// RtlUnwind to restore the non-volatile registers, before returning, but
// ours / the native one does not do that.
//
// void
// WINAPI
// __wine__RtlUnwind(
// PVOID TargetFrame,
// PVOID TargetIp ,
// PEXCEPTION_RECORD ExceptionRecord ,
// PVOID ReturnValue);
//
PUBLIC ___wine__RtlUnwind@16
___wine__RtlUnwind@16:
push ebp
mov ebp, esp
/* Save non-volatile registers */
push ebx
push esi
push edi
/* Call the native function */
push dword ptr [ebp + 20] // ReturnValue
push dword ptr [ebp + 16] // ExceptionRecord
push dword ptr [ebp + 12] // TargetIp
push dword ptr [ebp + 8] // TargetFrame
call _RtlUnwind@16
/* Restore non-volatile registers */
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 16
END