[x264-devel] [PATCH 5/6] checkasm: aarch64: Clobber the stack before calling functions
Martin Storsjö
martin at martin.st
Mon Nov 14 22:54:52 CET 2016
---
tools/checkasm-aarch64.S | 13 +++++++++++++
tools/checkasm.c | 9 ++++++++-
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/tools/checkasm-aarch64.S b/tools/checkasm-aarch64.S
index af4ed31..1eb4546 100644
--- a/tools/checkasm-aarch64.S
+++ b/tools/checkasm-aarch64.S
@@ -56,6 +56,19 @@ error_message:
// max number of args used by any x264 asm function.
#define MAX_ARGS 15
+#define CLOBBER_STACK ((8*MAX_ARGS + 15) & ~15)
+
+function x264_checkasm_stack_clobber, export=1
+ mov x3, sp
+ mov x2, #CLOBBER_STACK
+1:
+ stp x0, x1, [sp, #-16]!
+ subs x2, x2, #16
+ b.gt 1b
+ mov sp, x3
+ ret
+endfunc
+
#define ARG_STACK ((8*(MAX_ARGS - 8) + 15) & ~15)
function x264_checkasm_call, export=1
diff --git a/tools/checkasm.c b/tools/checkasm.c
index 8785cc8..e10665c 100644
--- a/tools/checkasm.c
+++ b/tools/checkasm.c
@@ -258,7 +258,14 @@ void x264_checkasm_stack_clobber( uint64_t clobber, ... );
uint64_t r = (rand() & 0xffff) * 0x0001000100010001ULL; \
x264_checkasm_stack_clobber( r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r ); /* max_args+6 */ \
x264_checkasm_call(( intptr_t(*)())func, &ok, 0, 0, 0, 0, __VA_ARGS__ ); })
-#elif ARCH_X86 || (ARCH_AARCH64 && !defined(__APPLE__)) || ARCH_ARM
+#elif ARCH_AARCH64 && !defined(__APPLE__)
+void x264_checkasm_stack_clobber( uint64_t clobber, ... );
+#define call_a1(func,...) ({ \
+ uint64_t r = (rand() & 0xffff) * 0x0001000100010001ULL; \
+ x264_checkasm_stack_clobber( r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r,r ); /* max_args+8 */ \
+ x264_checkasm_call(( intptr_t(*)())func, &ok, __VA_ARGS__ ); })
+#elif ARCH_AARCH64 && !defined(__APPLE__)
+#elif ARCH_X86 || ARCH_ARM
#define call_a1(func,...) x264_checkasm_call( (intptr_t(*)())func, &ok, __VA_ARGS__ )
#else
#define call_a1 call_c1
--
2.7.4
More information about the x264-devel
mailing list