From 6a7fd3e688e2749b3930c22423decef44deba8e1 Mon Sep 17 00:00:00 2001 From: Huang Qi Date: Wed, 18 Aug 2021 10:21:38 +0800 Subject: [PATCH] Make sp 8 byte aligned in invokeNative on ARM (#697) Make sp 8 byte aligned in invokeNative assembly on ARM. Signed-off-by: Huang Qi --- core/iwasm/common/arch/invokeNative_arm_vfp.s | 2 ++ core/iwasm/common/arch/invokeNative_thumb.s | 2 ++ core/iwasm/common/arch/invokeNative_thumb_vfp.s | 2 ++ 3 files changed, 6 insertions(+) diff --git a/core/iwasm/common/arch/invokeNative_arm_vfp.s b/core/iwasm/common/arch/invokeNative_arm_vfp.s index c7dbb980..78a4bab8 100644 --- a/core/iwasm/common/arch/invokeNative_arm_vfp.s +++ b/core/iwasm/common/arch/invokeNative_arm_vfp.s @@ -22,6 +22,7 @@ _invokeNative: */ stmfd sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 /* make sp 8 byte aligned */ mov ip, r0 /* ip = function ptr */ mov r4, r1 /* r4 = argv */ mov r5, r2 /* r5 = nstacks */ @@ -79,6 +80,7 @@ call_func: mov sp, r6 /* restore sp */ return: + add sp, sp, #4 /* make sp 8 byte aligned */ ldmfd sp!, {r4, r5, r6, r7, lr} bx lr diff --git a/core/iwasm/common/arch/invokeNative_thumb.s b/core/iwasm/common/arch/invokeNative_thumb.s index 30c64e1d..3669fe77 100644 --- a/core/iwasm/common/arch/invokeNative_thumb.s +++ b/core/iwasm/common/arch/invokeNative_thumb.s @@ -23,6 +23,7 @@ _invokeNative: push {r4, r5, r6, r7} push {lr} + sub sp, sp, #4 /* make sp 8 byte aligned */ mov ip, r0 /* ip = function ptr */ mov r4, r1 /* r4 = argv */ mov r5, r2 /* r5 = argc */ @@ -83,6 +84,7 @@ call_func: add sp, sp, r6 /* restore sp */ return: + add sp, sp, #4 /* make sp 8 byte aligned */ pop {r3} pop {r4, r5, r6, r7} mov lr, r3 diff --git a/core/iwasm/common/arch/invokeNative_thumb_vfp.s b/core/iwasm/common/arch/invokeNative_thumb_vfp.s index 2d836fb8..218cd91e 100644 --- a/core/iwasm/common/arch/invokeNative_thumb_vfp.s +++ b/core/iwasm/common/arch/invokeNative_thumb_vfp.s @@ -23,6 +23,7 @@ _invokeNative: push {r4, r5, r6, r7} push {lr} + sub sp, sp, #4 /* make sp 8 byte aligned */ mov ip, r0 /* ip = function ptr */ mov r4, r1 /* r4 = argv */ mov r5, r2 /* r5 = nstacks */ @@ -91,6 +92,7 @@ call_func: mov sp, r7 /* restore sp */ return: + add sp, sp, #4 /* make sp 8 byte aligned */ pop {r3} pop {r4, r5, r6, r7} mov lr, r3