summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2017-03-23 17:38:20 -0300
committerJames Almer <jamrial@gmail.com>2017-03-23 17:38:20 -0300
commit67b639b496268d1d2b0ec64978f754ab692c44d1 (patch)
tree4c9ef4068c1567fc86cad75dc61fb24fc36a39f4
parenta2d34cc51ba1e3c19928f1c5aedd7a2990593c47 (diff)
parentc91d6a33f872574c95c8784277cf60ffcf6bff4f (diff)
Merge commit 'c91d6a33f872574c95c8784277cf60ffcf6bff4f'
* commit 'c91d6a33f872574c95c8784277cf60ffcf6bff4f': checkasm: aarch64: Add filler args to make sure all parameters are passed on the stack Merged-by: James Almer <jamrial@gmail.com>
-rw-r--r--tests/checkasm/aarch64/checkasm.S16
-rw-r--r--tests/checkasm/checkasm.h5
2 files changed, 9 insertions, 12 deletions
diff --git a/tests/checkasm/aarch64/checkasm.S b/tests/checkasm/aarch64/checkasm.S
index 8e4f8c35e4..03bd983160 100644
--- a/tests/checkasm/aarch64/checkasm.S
+++ b/tests/checkasm/aarch64/checkasm.S
@@ -93,22 +93,18 @@ function checkasm_checked_call, export=1
sub sp, sp, #ARG_STACK
.equ pos, 0
-// the first stacked arg is copied to x7
.rept MAX_ARGS-8
- ldr x9, [x29, #16 + 8 + pos]
+ // Skip the first 8 args, that are loaded into registers
+ ldr x9, [x29, #16 + 8*8 + pos]
str x9, [sp, #pos]
.equ pos, pos + 8
.endr
mov x12, x0
- mov x0, x1
- mov x1, x2
- mov x2, x3
- mov x3, x4
- mov x4, x5
- mov x5, x6
- mov x6, x7
- ldr x7, [x29, #16]
+ ldp x0, x1, [x29, #16]
+ ldp x2, x3, [x29, #32]
+ ldp x4, x5, [x29, #48]
+ ldp x6, x7, [x29, #64]
blr x12
add sp, sp, #ARG_STACK
stp x0, x1, [sp, #-16]!
diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h
index b3fa83a93e..0823666c4e 100644
--- a/tests/checkasm/checkasm.h
+++ b/tests/checkasm/checkasm.h
@@ -141,11 +141,12 @@ extern void (*checkasm_checked_call)(void *func, int dummy, ...);
#elif ARCH_AARCH64 && !defined(__APPLE__)
void checkasm_stack_clobber(uint64_t clobber, ...);
void checkasm_checked_call(void *func, ...);
-#define declare_new(ret, ...) ret (*checked_call)(void *, __VA_ARGS__) = (void *)checkasm_checked_call;
+#define declare_new(ret, ...) ret (*checked_call)(void *, int, int, int, int, int, int, int, __VA_ARGS__)\
+ = (void *)checkasm_checked_call;
#define CLOB (UINT64_C(0xdeadbeefdeadbeef))
#define call_new(...) (checkasm_stack_clobber(CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,\
CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB),\
- checked_call(func_new, __VA_ARGS__))
+ checked_call(func_new, 0, 0, 0, 0, 0, 0, 0, __VA_ARGS__))
#else
#define declare_new(ret, ...)
#define declare_new_emms(cpu_flags, ret, ...)