[x264-devel] [PATCH 6/6] checkasm: aarch64: Add filler args to make sure all parameters are passed on the stack

Martin Storsjö martin at martin.st
Mon Nov 14 22:54:53 CET 2016


This, combined with clobbering the stack space prior to the call,
increases the chances of finding cases where 32 bit parameters
are erroneously treated as 64 bit.
---
 tools/checkasm-aarch64.S | 15 ++++++---------
 tools/checkasm.c         |  2 +-
 2 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/tools/checkasm-aarch64.S b/tools/checkasm-aarch64.S
index 1eb4546..7f66ead 100644
--- a/tools/checkasm-aarch64.S
+++ b/tools/checkasm-aarch64.S
@@ -99,21 +99,18 @@ function x264_checkasm_call, export=1
 
     sub         sp,  sp,  #ARG_STACK
 .equ pos, 0
-// first two stacked args are copied to x6, x7
 .rept MAX_ARGS-8
-    ldr         x9, [x29, #16 + 16 + 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,  x2
-    mov         x1,  x3
-    mov         x2,  x4
-    mov         x3,  x5
-    mov         x4,  x6
-    mov         x5,  x7
-    ldp         x6,  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
     ldr         x2,  [sp]
diff --git a/tools/checkasm.c b/tools/checkasm.c
index e10665c..8e3a928 100644
--- a/tools/checkasm.c
+++ b/tools/checkasm.c
@@ -263,7 +263,7 @@ 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__ ); })
+    x264_checkasm_call(( intptr_t(*)())func, &ok, 0, 0, 0, 0, 0, 0, __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__ )
-- 
2.7.4



More information about the x264-devel mailing list