[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