diff options
author | hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-30 14:36:58 +0000 |
---|---|---|
committer | hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-30 14:36:58 +0000 |
commit | 00eae123d66f54631fc21f9567e9ddc898cf1b37 (patch) | |
tree | dcd9bca2d5eca6dec19c0986de42932ff8ef664d /libffi/src/x86 | |
parent | d2d2630b24dc8d970183d8e3419d8f804b7b9151 (diff) | |
download | gcc-00eae123d66f54631fc21f9567e9ddc898cf1b37.tar.gz |
2008-01-30 H.J. Lu <hongjiu.lu@intel.com>
PR libffi/34612
* src/x86/sysv.S (ffi_closure_SYSV): Pop 4 byte from stack when
returning struct.
* testsuite/libffi.call/call.exp: Add "-O2 -fomit-frame-pointer"
tests.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131964 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libffi/src/x86')
-rw-r--r-- | libffi/src/x86/sysv.S | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libffi/src/x86/sysv.S b/libffi/src/x86/sysv.S index f22c939c0a8..a0daf1dca94 100644 --- a/libffi/src/x86/sysv.S +++ b/libffi/src/x86/sysv.S @@ -210,6 +210,8 @@ ffi_closure_SYSV: je .Lcls_retldouble cmpl $FFI_TYPE_SINT64, %eax je .Lcls_retllong + cmpl $FFI_TYPE_STRUCT, %eax + je .Lcls_retstruct .Lcls_epilogue: movl %ebp, %esp popl %ebp @@ -230,6 +232,10 @@ ffi_closure_SYSV: movl (%ecx), %eax movl 4(%ecx), %edx jmp .Lcls_epilogue +.Lcls_retstruct: + movl %ebp, %esp + popl %ebp + ret $4 .LFE2: .size ffi_closure_SYSV, .-ffi_closure_SYSV |