Merge commit '7b1ae0e73ab7f7c5eabc70dbe2e579127c6e154f'
* commit '7b1ae0e73ab7f7c5eabc70dbe2e579127c6e154f': checkasm/arm: preserve the stack alignment checkasm_checked_call Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
This commit is contained in:
commit
286d8bae61
@ -42,6 +42,9 @@ endconst
|
|||||||
|
|
||||||
#define ARG_STACK 4*(MAX_ARGS - 2)
|
#define ARG_STACK 4*(MAX_ARGS - 2)
|
||||||
|
|
||||||
|
@ align the used stack space to 8 to preserve the stack alignment
|
||||||
|
#define ARG_STACK_A (((ARG_STACK + pushed + 7) & ~7) - pushed)
|
||||||
|
|
||||||
.macro clobbercheck variant
|
.macro clobbercheck variant
|
||||||
.equ pushed, 4*9
|
.equ pushed, 4*9
|
||||||
function checkasm_checked_call_\variant, export=1
|
function checkasm_checked_call_\variant, export=1
|
||||||
@ -59,10 +62,10 @@ function checkasm_checked_call_\variant, export=1
|
|||||||
.endif
|
.endif
|
||||||
ldm r12, {r4-r11}
|
ldm r12, {r4-r11}
|
||||||
|
|
||||||
sub sp, sp, #ARG_STACK
|
sub sp, sp, #ARG_STACK_A
|
||||||
.equ pos, 0
|
.equ pos, 0
|
||||||
.rept MAX_ARGS-2
|
.rept MAX_ARGS-2
|
||||||
ldr r12, [sp, #ARG_STACK + pushed + 8 + pos]
|
ldr r12, [sp, #ARG_STACK_A + pushed + 8 + pos]
|
||||||
str r12, [sp, #pos]
|
str r12, [sp, #pos]
|
||||||
.equ pos, pos + 4
|
.equ pos, pos + 4
|
||||||
.endr
|
.endr
|
||||||
@ -70,9 +73,9 @@ function checkasm_checked_call_\variant, export=1
|
|||||||
mov r12, r0
|
mov r12, r0
|
||||||
mov r0, r2
|
mov r0, r2
|
||||||
mov r1, r3
|
mov r1, r3
|
||||||
ldrd r2, r3, [sp, #ARG_STACK + pushed]
|
ldrd r2, r3, [sp, #ARG_STACK_A + pushed]
|
||||||
blx r12
|
blx r12
|
||||||
add sp, sp, #ARG_STACK
|
add sp, sp, #ARG_STACK_A
|
||||||
|
|
||||||
push {r0, r1}
|
push {r0, r1}
|
||||||
movrel r12, register_init
|
movrel r12, register_init
|
||||||
|
Loading…
x
Reference in New Issue
Block a user