[FFmpeg-cvslog] checkasm/x86: Correctly handle variadic functions

Henrik Gramner git at videolan.org
Sun Sep 27 20:25:13 CEST 2015


ffmpeg | branch: master | Henrik Gramner <henrik at gramner.com> | Wed Sep 23 16:06:02 2015 +0200| [7ca1de5b4f1a369a997c5cf9924b0197606f558d] | committer: Henrik Gramner

checkasm/x86: Correctly handle variadic functions

The System V ABI on x86-64 specifies that the al register contains an upper
bound of the number of arguments passed in vector registers when calling
variadic functions, so we aren't allowed to clobber it.

checkasm_fail_func() is a variadic function so also zero al before calling it.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7ca1de5b4f1a369a997c5cf9924b0197606f558d
---

 tests/checkasm/x86/checkasm.asm |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/tests/checkasm/x86/checkasm.asm b/tests/checkasm/x86/checkasm.asm
index 5f3def9..20012f8 100644
--- a/tests/checkasm/x86/checkasm.asm
+++ b/tests/checkasm/x86/checkasm.asm
@@ -77,8 +77,10 @@ cglobal stack_clobber, 1,2
 
 %if WIN64
     %assign free_regs 7
+    DECLARE_REG_TMP 4
 %else
     %assign free_regs 9
+    DECLARE_REG_TMP 7
 %endif
 
 ;-----------------------------------------------------------------------------
@@ -86,7 +88,7 @@ cglobal stack_clobber, 1,2
 ;-----------------------------------------------------------------------------
 INIT_XMM
 cglobal checked_call, 2,15,16,max_args*8+8
-    mov  r6, r0
+    mov  t0, r0
 
     ; All arguments have been pushed on the stack instead of registers in order to
     ; test for incorrect assumptions that 32-bit ints are zero-extended to 64-bit.
@@ -129,7 +131,7 @@ cglobal checked_call, 2,15,16,max_args*8+8
     mov r %+ i, [n %+ i]
     %assign i i-1
 %endrep
-    call r6
+    call t0
 %assign i 14
 %rep 15-free_regs
     xor r %+ i, [n %+ i]
@@ -156,6 +158,7 @@ cglobal checked_call, 2,15,16,max_args*8+8
     mov  r9, rax
     mov r10, rdx
     lea  r0, [error_message]
+    xor eax, eax
     call fail_func
     mov rdx, r10
     mov rax, r9



More information about the ffmpeg-cvslog mailing list