mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
92db51883a
This is needed, because Wine code expects RtlUnwind to restore the non-volatile registers, before returning, but ours / the native one doesn't do that. Should fix CORE-19392 and CORE-19397
47 lines
935 B
ArmAsm
47 lines
935 B
ArmAsm
|
|
#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
|