ffi.c (ffi_prep_args_SYSV): Advance intarg_count when a float arguments is passed in memory.

* src/powerpc/ffi.c (ffi_prep_args_SYSV): Advance intarg_count
when a float arguments is passed in memory.
(ffi_closure_helper_SYSV): Mark general registers as used up when
a 64bit or soft-float long double argument is passed in memory.

From-SVN: r155473
This commit is contained in:
Andreas Schwab 2009-12-26 12:40:27 +00:00
parent b8f38e8917
commit 302486f4fb
2 changed files with 184 additions and 174 deletions

View File

@ -1,3 +1,10 @@
2009-12-26 Andreas Schwab <schwab@linux-m68k.org>
* src/powerpc/ffi.c (ffi_prep_args_SYSV): Advance intarg_count
when a float arguments is passed in memory.
(ffi_closure_helper_SYSV): Mark general registers as used up when
a 64bit or soft-float long double argument is passed in memory.
2009-12-25 Matthias Klose <doko@ubuntu.com> 2009-12-25 Matthias Klose <doko@ubuntu.com>
* man/ffi_call.3: Fix #include in examples. * man/ffi_call.3: Fix #include in examples.
@ -10,7 +17,7 @@
IRIX MIPSPro c99. IRIX MIPSPro c99.
* include/ffi_common.h: Added '__sgi' define to non * include/ffi_common.h: Added '__sgi' define to non
'__attribute__((__mode__()))' integer typedefs. '__attribute__((__mode__()))' integer typedefs.
* src/mips/ffi.c (ffi_call, ffi_closure_mips_inner_O32, * src/mips/ffi.c (ffi_call, ffi_closure_mips_inner_O32,
ffi_closure_mips_inner_N32): Added 'defined(_MIPSEB)' to BE check. ffi_closure_mips_inner_N32): Added 'defined(_MIPSEB)' to BE check.
(ffi_closure_mips_inner_O32, ffi_closure_mips_inner_N32): Added (ffi_closure_mips_inner_O32, ffi_closure_mips_inner_N32): Added
FFI_LONGDOUBLE support and alignment(N32 only). FFI_LONGDOUBLE support and alignment(N32 only).
@ -86,7 +93,7 @@
2009-12-04 David Edelsohn <edelsohn@gnu.org> 2009-12-04 David Edelsohn <edelsohn@gnu.org>
* src/powerpc/aix_closure.S: Reorganize 64-bit code to match * src/powerpc/aix_closure.S: Reorganize 64-bit code to match
linux64_closure.S. linux64_closure.S.
2009-12-04 Uros Bizjak <ubizjak@gmail.com> 2009-12-04 Uros Bizjak <ubizjak@gmail.com>
@ -310,33 +317,33 @@
2009-06-11 Timothy Wall <twall@users.sf.net> 2009-06-11 Timothy Wall <twall@users.sf.net>
* Makefile.am, * Makefile.am,
configure.ac, configure.ac,
include/ffi.h.in, include/ffi.h.in,
include/ffi_common.h, include/ffi_common.h,
src/closures.c, src/closures.c,
src/dlmalloc.c, src/dlmalloc.c,
src/x86/ffi.c, src/x86/ffi.c,
src/x86/ffitarget.h, src/x86/ffitarget.h,
src/x86/win64.S (new), src/x86/win64.S (new),
README: Added win64 support (mingw or MSVC) README: Added win64 support (mingw or MSVC)
* Makefile.in, * Makefile.in,
include/Makefile.in, include/Makefile.in,
man/Makefile.in, man/Makefile.in,
testsuite/Makefile.in, testsuite/Makefile.in,
configure, configure,
aclocal.m4: Regenerated aclocal.m4: Regenerated
* ltcf-c.sh: properly escape cygwin/w32 path * ltcf-c.sh: properly escape cygwin/w32 path
* man/ffi_call.3: Clarify size requirements for return value. * man/ffi_call.3: Clarify size requirements for return value.
* src/x86/ffi64.c: Fix filename in comment. * src/x86/ffi64.c: Fix filename in comment.
* src/x86/win32.S: Remove unused extern. * src/x86/win32.S: Remove unused extern.
* testsuite/libffi.call/closure_fn0.c, * testsuite/libffi.call/closure_fn0.c,
testsuite/libffi.call/closure_fn1.c, testsuite/libffi.call/closure_fn1.c,
testsuite/libffi.call/closure_fn2.c, testsuite/libffi.call/closure_fn2.c,
testsuite/libffi.call/closure_fn3.c, testsuite/libffi.call/closure_fn3.c,
testsuite/libffi.call/closure_fn4.c, testsuite/libffi.call/closure_fn4.c,
testsuite/libffi.call/closure_fn5.c, testsuite/libffi.call/closure_fn5.c,
testsuite/libffi.call/closure_fn6.c, testsuite/libffi.call/closure_fn6.c,
testsuite/libffi.call/closure_stdcall.c, testsuite/libffi.call/closure_stdcall.c,
testsuite/libffi.call/cls_12byte.c, testsuite/libffi.call/cls_12byte.c,
testsuite/libffi.call/cls_16byte.c, testsuite/libffi.call/cls_16byte.c,
@ -417,8 +424,8 @@
testsuite/libffi.call/stret_large2.c, testsuite/libffi.call/stret_large2.c,
testsuite/libffi.call/stret_medium.c, testsuite/libffi.call/stret_medium.c,
testsuite/libffi.call/stret_medium2.c, testsuite/libffi.call/stret_medium2.c,
testsuite/libffi.special/unwindtest.cc: use ffi_closure_alloc instead testsuite/libffi.special/unwindtest.cc: use ffi_closure_alloc instead
of checking for MMAP. Use intptr_t instead of long casts. of checking for MMAP. Use intptr_t instead of long casts.
2009-06-11 Kaz Kojima <kkojima@gcc.gnu.org> 2009-06-11 Kaz Kojima <kkojima@gcc.gnu.org>
@ -471,59 +478,59 @@
2008-12-26 Timothy Wall <twall@users.sf.net> 2008-12-26 Timothy Wall <twall@users.sf.net>
* testsuite/libffi.call/cls_longdouble.c, * testsuite/libffi.call/cls_longdouble.c,
testsuite/libffi.call/cls_longdouble_va.c, testsuite/libffi.call/cls_longdouble_va.c,
testsuite/libffi.call/cls_align_longdouble.c, testsuite/libffi.call/cls_align_longdouble.c,
testsuite/libffi.call/cls_align_longdouble_split.c, testsuite/libffi.call/cls_align_longdouble_split.c,
testsuite/libffi.call/cls_align_longdouble_split2.c: mark expected testsuite/libffi.call/cls_align_longdouble_split2.c: mark expected
failures on x86_64 cygwin/mingw. failures on x86_64 cygwin/mingw.
2008-12-22 Timothy Wall <twall@users.sf.net> 2008-12-22 Timothy Wall <twall@users.sf.net>
* testsuite/libffi.call/closure_fn0.c, * testsuite/libffi.call/closure_fn0.c,
testsuite/libffi.call/closure_fn1.c, testsuite/libffi.call/closure_fn1.c,
testsuite/libffi.call/closure_fn2.c, testsuite/libffi.call/closure_fn2.c,
testsuite/libffi.call/closure_fn3.c, testsuite/libffi.call/closure_fn3.c,
testsuite/libffi.call/closure_fn4.c, testsuite/libffi.call/closure_fn4.c,
testsuite/libffi.call/closure_fn5.c, testsuite/libffi.call/closure_fn5.c,
testsuite/libffi.call/closure_fn6.c, testsuite/libffi.call/closure_fn6.c,
testsuite/libffi.call/closure_loc_fn0.c, testsuite/libffi.call/closure_loc_fn0.c,
testsuite/libffi.call/closure_stdcall.c, testsuite/libffi.call/closure_stdcall.c,
testsuite/libffi.call/cls_align_pointer.c, testsuite/libffi.call/cls_align_pointer.c,
testsuite/libffi.call/cls_pointer.c, testsuite/libffi.call/cls_pointer.c,
testsuite/libffi.call/cls_pointer_stack.c: use portable cast from testsuite/libffi.call/cls_pointer_stack.c: use portable cast from
pointer to integer (intptr_t). pointer to integer (intptr_t).
* testsuite/libffi.call/cls_longdouble.c: disable for win64. * testsuite/libffi.call/cls_longdouble.c: disable for win64.
2008-07-24 Anthony Green <green@redhat.com> 2008-07-24 Anthony Green <green@redhat.com>
* testsuite/libffi.call/cls_dbls_struct.c, * testsuite/libffi.call/cls_dbls_struct.c,
testsuite/libffi.call/cls_double_va.c, testsuite/libffi.call/cls_double_va.c,
testsuite/libffi.call/cls_longdouble.c, testsuite/libffi.call/cls_longdouble.c,
testsuite/libffi.call/cls_longdouble_va.c, testsuite/libffi.call/cls_longdouble_va.c,
testsuite/libffi.call/cls_pointer.c, testsuite/libffi.call/cls_pointer.c,
testsuite/libffi.call/cls_pointer_stack.c, testsuite/libffi.call/cls_pointer_stack.c,
testsuite/libffi.call/err_bad_abi.c: Clean up failures from testsuite/libffi.call/err_bad_abi.c: Clean up failures from
compiler warnings. compiler warnings.
2008-03-04 Anthony Green <green@redhat.com> 2008-03-04 Anthony Green <green@redhat.com>
Blake Chaffin Blake Chaffin
hos@tamanegi.org hos@tamanegi.org
* testsuite/libffi.call/cls_align_longdouble_split2.c * testsuite/libffi.call/cls_align_longdouble_split2.c
testsuite/libffi.call/cls_align_longdouble_split.c testsuite/libffi.call/cls_align_longdouble_split.c
testsuite/libffi.call/cls_dbls_struct.c testsuite/libffi.call/cls_dbls_struct.c
testsuite/libffi.call/cls_double_va.c testsuite/libffi.call/cls_double_va.c
testsuite/libffi.call/cls_longdouble.c testsuite/libffi.call/cls_longdouble.c
testsuite/libffi.call/cls_longdouble_va.c testsuite/libffi.call/cls_longdouble_va.c
testsuite/libffi.call/cls_pointer.c testsuite/libffi.call/cls_pointer.c
testsuite/libffi.call/cls_pointer_stack.c testsuite/libffi.call/cls_pointer_stack.c
testsuite/libffi.call/err_bad_abi.c testsuite/libffi.call/err_bad_abi.c
testsuite/libffi.call/err_bad_typedef.c testsuite/libffi.call/err_bad_typedef.c
testsuite/libffi.call/stret_large2.c testsuite/libffi.call/stret_large2.c
testsuite/libffi.call/stret_large.c testsuite/libffi.call/stret_large.c
testsuite/libffi.call/stret_medium2.c testsuite/libffi.call/stret_medium2.c
testsuite/libffi.call/stret_medium.c: New tests from Apple. testsuite/libffi.call/stret_medium.c: New tests from Apple.
2009-06-05 Andrew Haley <aph@redhat.com> 2009-06-05 Andrew Haley <aph@redhat.com>
@ -536,24 +543,24 @@
stdcall changes. stdcall changes.
2008-02-26 Anthony Green <green@redhat.com> 2008-02-26 Anthony Green <green@redhat.com>
Thomas Heller <theller@ctypes.org> Thomas Heller <theller@ctypes.org>
* src/x86/ffi.c (ffi_closure_SYSV_inner): Change C++ comment to C * src/x86/ffi.c (ffi_closure_SYSV_inner): Change C++ comment to C
comment. comment.
2008-02-03 Timothy Wall <twall@users.sf.net> 2008-02-03 Timothy Wall <twall@users.sf.net>
* src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL): Calculate jump return * src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL): Calculate jump return
offset based on code pointer, not data pointer. offset based on code pointer, not data pointer.
2008-01-31 Timothy Wall <twall@users.sf.net> 2008-01-31 Timothy Wall <twall@users.sf.net>
* testsuite/libffi.call/closure_stdcall.c: Add test for stdcall * testsuite/libffi.call/closure_stdcall.c: Add test for stdcall
closures. closures.
* src/x86/ffitarget.h: Increase size of trampoline for stdcall * src/x86/ffitarget.h: Increase size of trampoline for stdcall
closures. closures.
* src/x86/win32.S: Add assembly for stdcall closure. * src/x86/win32.S: Add assembly for stdcall closure.
* src/x86/ffi.c: Initialize stdcall closure trampoline. * src/x86/ffi.c: Initialize stdcall closure trampoline.
2009-06-04 Andrew Haley <aph@redhat.com> 2009-06-04 Andrew Haley <aph@redhat.com>
@ -586,10 +593,10 @@
2008-02-15 David Daney <ddaney@avtrex.com> 2008-02-15 David Daney <ddaney@avtrex.com>
* src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE): * src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE):
Define (conditionally), and use it to include cachectl.h. Define (conditionally), and use it to include cachectl.h.
(ffi_prep_closure_loc): Fix cache flushing. (ffi_prep_closure_loc): Fix cache flushing.
* src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define. * src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define.
2009-06-04 Andrew Haley <aph@redhat.com> 2009-06-04 Andrew Haley <aph@redhat.com>
@ -698,7 +705,7 @@
(ffi_closure_v8): Likewise. (ffi_closure_v8): Likewise.
2008-09-26 Peter O'Gorman <pogma@thewrittenword.com> 2008-09-26 Peter O'Gorman <pogma@thewrittenword.com>
Steve Ellcey <sje@cup.hp.com> Steve Ellcey <sje@cup.hp.com>
* configure: Regenerate for new libtool. * configure: Regenerate for new libtool.
* Makefile.in: Ditto. * Makefile.in: Ditto.
@ -846,7 +853,7 @@
sizeof(ffi_java_raw) for alignment calculations. sizeof(ffi_java_raw) for alignment calculations.
(ffi_java_ptrarray_to_raw): Same. (ffi_java_ptrarray_to_raw): Same.
(ffi_java_rvalue_to_raw): Add special handling for FFI_TYPE_POINTER (ffi_java_rvalue_to_raw): Add special handling for FFI_TYPE_POINTER
if FFI_SIZEOF_JAVA_RAW == 4. if FFI_SIZEOF_JAVA_RAW == 4.
(ffi_java_raw_to_rvalue): Same. (ffi_java_raw_to_rvalue): Same.
(ffi_java_raw_call): Change type of raw to ffi_java_raw. (ffi_java_raw_call): Change type of raw to ffi_java_raw.
(ffi_java_translate_args): Same. (ffi_java_translate_args): Same.
@ -1127,83 +1134,83 @@
2005-12-31 Phil Blundell <pb@reciva.com> 2005-12-31 Phil Blundell <pb@reciva.com>
* src/arm/ffi.c (ffi_prep_incoming_args_SYSV, * src/arm/ffi.c (ffi_prep_incoming_args_SYSV,
ffi_closure_SYSV_inner, ffi_prep_closure): New, add closure support. ffi_closure_SYSV_inner, ffi_prep_closure): New, add closure support.
* src/arm/sysv.S(ffi_closure_SYSV): Likewise. * src/arm/sysv.S(ffi_closure_SYSV): Likewise.
* src/arm/ffitarget.h (FFI_TRAMPOLINE_SIZE): Likewise. * src/arm/ffitarget.h (FFI_TRAMPOLINE_SIZE): Likewise.
(FFI_CLOSURES): Enable closure support. (FFI_CLOSURES): Enable closure support.
2007-07-03 Andrew Haley <aph@hedges.billgatliff.com> 2007-07-03 Andrew Haley <aph@hedges.billgatliff.com>
* testsuite/libffi.call/cls_multi_ushort.c, * testsuite/libffi.call/cls_multi_ushort.c,
testsuite/libffi.call/cls_align_uint16.c, testsuite/libffi.call/cls_align_uint16.c,
testsuite/libffi.call/nested_struct1.c, testsuite/libffi.call/nested_struct1.c,
testsuite/libffi.call/nested_struct3.c, testsuite/libffi.call/nested_struct3.c,
testsuite/libffi.call/cls_7_1_byte.c, testsuite/libffi.call/cls_7_1_byte.c,
testsuite/libffi.call/cls_double.c, testsuite/libffi.call/cls_double.c,
testsuite/libffi.call/nested_struct5.c, testsuite/libffi.call/nested_struct5.c,
testsuite/libffi.call/nested_struct7.c, testsuite/libffi.call/nested_struct7.c,
testsuite/libffi.call/cls_sint.c, testsuite/libffi.call/cls_sint.c,
testsuite/libffi.call/nested_struct9.c, testsuite/libffi.call/nested_struct9.c,
testsuite/libffi.call/cls_20byte1.c, testsuite/libffi.call/cls_20byte1.c,
testsuite/libffi.call/cls_multi_sshortchar.c, testsuite/libffi.call/cls_multi_sshortchar.c,
testsuite/libffi.call/cls_align_sint64.c, testsuite/libffi.call/cls_align_sint64.c,
testsuite/libffi.call/cls_3byte2.c, testsuite/libffi.call/cls_3byte2.c,
testsuite/libffi.call/cls_multi_schar.c, testsuite/libffi.call/cls_multi_schar.c,
testsuite/libffi.call/cls_multi_uchar.c, testsuite/libffi.call/cls_multi_uchar.c,
testsuite/libffi.call/cls_19byte.c, testsuite/libffi.call/cls_19byte.c,
testsuite/libffi.call/cls_9byte1.c, testsuite/libffi.call/cls_9byte1.c,
testsuite/libffi.call/cls_align_float.c, testsuite/libffi.call/cls_align_float.c,
testsuite/libffi.call/closure_fn1.c, testsuite/libffi.call/closure_fn1.c,
testsuite/libffi.call/problem1.c, testsuite/libffi.call/problem1.c,
testsuite/libffi.call/closure_fn3.c, testsuite/libffi.call/closure_fn3.c,
testsuite/libffi.call/cls_sshort.c, testsuite/libffi.call/cls_sshort.c,
testsuite/libffi.call/closure_fn5.c, testsuite/libffi.call/closure_fn5.c,
testsuite/libffi.call/cls_align_double.c, testsuite/libffi.call/cls_align_double.c,
testsuite/libffi.call/cls_2byte.c, testsuite/libffi.call/cls_2byte.c,
testsuite/libffi.call/nested_struct.c, testsuite/libffi.call/nested_struct.c,
testsuite/libffi.call/nested_struct10.c, testsuite/libffi.call/nested_struct10.c,
testsuite/libffi.call/cls_4byte.c, testsuite/libffi.call/cls_4byte.c,
testsuite/libffi.call/cls_6byte.c, testsuite/libffi.call/cls_6byte.c,
testsuite/libffi.call/cls_8byte.c, testsuite/libffi.call/cls_8byte.c,
testsuite/libffi.call/cls_multi_sshort.c, testsuite/libffi.call/cls_multi_sshort.c,
testsuite/libffi.call/cls_align_uint32.c, testsuite/libffi.call/cls_align_uint32.c,
testsuite/libffi.call/cls_align_sint16.c, testsuite/libffi.call/cls_align_sint16.c,
testsuite/libffi.call/cls_float.c, testsuite/libffi.call/cls_float.c,
testsuite/libffi.call/cls_20byte.c, testsuite/libffi.call/cls_20byte.c,
testsuite/libffi.call/cls_5_1_byte.c, testsuite/libffi.call/cls_5_1_byte.c,
testsuite/libffi.call/nested_struct2.c, testsuite/libffi.call/nested_struct2.c,
testsuite/libffi.call/cls_24byte.c, testsuite/libffi.call/cls_24byte.c,
testsuite/libffi.call/nested_struct4.c, testsuite/libffi.call/nested_struct4.c,
testsuite/libffi.call/nested_struct6.c, testsuite/libffi.call/nested_struct6.c,
testsuite/libffi.call/cls_64byte.c, testsuite/libffi.call/cls_64byte.c,
testsuite/libffi.call/nested_struct8.c, testsuite/libffi.call/nested_struct8.c,
testsuite/libffi.call/cls_uint.c, testsuite/libffi.call/cls_uint.c,
testsuite/libffi.call/cls_multi_ushortchar.c, testsuite/libffi.call/cls_multi_ushortchar.c,
testsuite/libffi.call/cls_schar.c, testsuite/libffi.call/cls_schar.c,
testsuite/libffi.call/cls_uchar.c, testsuite/libffi.call/cls_uchar.c,
testsuite/libffi.call/cls_align_uint64.c, testsuite/libffi.call/cls_align_uint64.c,
testsuite/libffi.call/cls_ulonglong.c, testsuite/libffi.call/cls_ulonglong.c,
testsuite/libffi.call/cls_align_longdouble.c, testsuite/libffi.call/cls_align_longdouble.c,
testsuite/libffi.call/cls_1_1byte.c, testsuite/libffi.call/cls_1_1byte.c,
testsuite/libffi.call/cls_12byte.c, testsuite/libffi.call/cls_12byte.c,
testsuite/libffi.call/cls_3_1byte.c, testsuite/libffi.call/cls_3_1byte.c,
testsuite/libffi.call/cls_3byte1.c, testsuite/libffi.call/cls_3byte1.c,
testsuite/libffi.call/cls_4_1byte.c, testsuite/libffi.call/cls_4_1byte.c,
testsuite/libffi.call/cls_6_1_byte.c, testsuite/libffi.call/cls_6_1_byte.c,
testsuite/libffi.call/cls_16byte.c, testsuite/libffi.call/cls_16byte.c,
testsuite/libffi.call/cls_18byte.c, testsuite/libffi.call/cls_18byte.c,
testsuite/libffi.call/closure_fn0.c, testsuite/libffi.call/closure_fn0.c,
testsuite/libffi.call/cls_9byte2.c, testsuite/libffi.call/cls_9byte2.c,
testsuite/libffi.call/closure_fn2.c, testsuite/libffi.call/closure_fn2.c,
testsuite/libffi.call/closure_fn4.c, testsuite/libffi.call/closure_fn4.c,
testsuite/libffi.call/cls_ushort.c, testsuite/libffi.call/cls_ushort.c,
testsuite/libffi.call/closure_fn6.c, testsuite/libffi.call/closure_fn6.c,
testsuite/libffi.call/cls_5byte.c, testsuite/libffi.call/cls_5byte.c,
testsuite/libffi.call/cls_align_pointer.c, testsuite/libffi.call/cls_align_pointer.c,
testsuite/libffi.call/cls_7byte.c, testsuite/libffi.call/cls_7byte.c,
testsuite/libffi.call/cls_align_sint32.c, testsuite/libffi.call/cls_align_sint32.c,
testsuite/libffi.special/unwindtest_ffi_call.cc, testsuite/libffi.special/unwindtest_ffi_call.cc,
testsuite/libffi.special/unwindtest.cc: Enable for ARM. testsuite/libffi.special/unwindtest.cc: Enable for ARM.
2007-07-05 H.J. Lu <hongjiu.lu@intel.com> 2007-07-05 H.J. Lu <hongjiu.lu@intel.com>

View File

@ -185,6 +185,7 @@ ffi_prep_args_SYSV (extended_cif *ecif, unsigned *const stack)
{ {
*next_arg.f = (float) double_tmp; *next_arg.f = (float) double_tmp;
next_arg.u += 1; next_arg.u += 1;
intarg_count++;
} }
else else
*fpr_base.d++ = double_tmp; *fpr_base.d++ = double_tmp;
@ -1149,6 +1150,7 @@ ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue,
pst++; pst++;
avalue[i] = pst; avalue[i] = pst;
pst += 2; pst += 2;
ng = 8;
} }
break; break;
@ -1222,6 +1224,7 @@ ffi_closure_helper_SYSV (ffi_closure *closure, void *rvalue,
{ {
avalue[i] = pst; avalue[i] = pst;
pst += 4; pst += 4;
ng = 8;
} }
break; break;
} }