Module: wine Branch: master Commit: 8331003f7ef7b98f32e283370a941ddce25ed945 URL: https://gitlab.winehq.org/wine/wine/-/commit/8331003f7ef7b98f32e283370a941dd...
Author: Alexandre Julliard julliard@winehq.org Date: Thu May 2 09:25:11 2024 +0200
vcomp: Fix stack alignment in the fork wrapper on ARM.
---
dlls/vcomp/fork.c | 53 ++++++++++++++++++++++++----------------------------- 1 file changed, 24 insertions(+), 29 deletions(-)
diff --git a/dlls/vcomp/fork.c b/dlls/vcomp/fork.c index 7ec9f394c14..c754a301d07 100644 --- a/dlls/vcomp/fork.c +++ b/dlls/vcomp/fork.c @@ -107,37 +107,32 @@ __ASM_GLOBAL_FUNC( _vcomp_fork_call_wrapper, #elif defined __arm__
__ASM_GLOBAL_FUNC( _vcomp_fork_call_wrapper, - "push {r4, r5, LR}\n\t" - "mov r4, r0\n\t" - "mov r5, SP\n\t" + "push {fp, lr}\n\t" + ".seh_save_regs_w {fp, lr}\n\t" + "mov fp, sp\n\t" + ".seh_save_sp fp\n\t" + ".seh_endprologue\n\t" "lsl r3, r1, #2\n\t" - "cmp r3, #0\n\t" - "beq 5f\n\t" - "sub SP, SP, r3\n\t" "tst r1, #1\n\t" - "it eq\n\t" - "subeq SP, SP, #4\n\t" - "1:\tsub r3, r3, #4\n\t" - "ldr r0, [r2, r3]\n\t" - "str r0, [SP, r3]\n\t" - "cmp r3, #0\n\t" - "bgt 1b\n\t" - "cmp r1, #1\n\t" - "bgt 2f\n\t" - "pop {r0}\n\t" - "b 5f\n\t" - "2:\tcmp r1, #2\n\t" - "bgt 3f\n\t" - "pop {r0-r1}\n\t" - "b 5f\n\t" - "3:\tcmp r1, #3\n\t" - "bgt 4f\n\t" - "pop {r0-r2}\n\t" - "b 5f\n\t" - "4:\tpop {r0-r3}\n\t" - "5:\tblx r4\n\t" - "mov SP, r5\n\t" - "pop {r4, r5, PC}" ) + "it ne\n\t" + "addne r3, r3, #4\n\t" + "cmp r3, #16\n\t" + "it lt\n\t" + "movlt r3, #16\n\t" + "sub sp, sp, r3\n\t" + "mov ip, r0\n\t" + "mov r3, #0\n\t" + "cmp r1, #0\n\t" + "beq 2f\n" + "1:\tldr r0, [r2, r3]\n\t" + "str r0, [sp, r3]\n\t" + "add r3, r3, #4\n\t" + "subs r1, r1, #1\n\t" + "bne 1b\n" + "2:\tpop {r0-r3}\n\t" + "blx ip\n\t" + "mov sp, fp\n\t" + "pop {fp, pc}" )
#elif defined __aarch64__