aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libffi/ChangeLog5
-rw-r--r--libffi/src/sparc/ffi.c5
2 files changed, 10 insertions, 0 deletions
diff --git a/libffi/ChangeLog b/libffi/ChangeLog
index 8f28614..517ac4ef 100644
--- a/libffi/ChangeLog
+++ b/libffi/ChangeLog
@@ -1,5 +1,10 @@
2009-12-11 Eric Botcazou <ebotcazou@adacore.com>
+ * src/sparc/ffi.c (ffi_closure_sparc_inner_v9): Properly align 'long
+ double' arguments.
+
+2009-12-11 Eric Botcazou <ebotcazou@adacore.com>
+
* testsuite/libffi.call/ffitest.h: Define PRIuPTR on Solaris < 10.
2009-12-10 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
diff --git a/libffi/src/sparc/ffi.c b/libffi/src/sparc/ffi.c
index 3b73f0c..1d01f59 100644
--- a/libffi/src/sparc/ffi.c
+++ b/libffi/src/sparc/ffi.c
@@ -599,6 +599,11 @@ ffi_closure_sparc_inner_v9(ffi_closure *closure,
/* Right-justify. */
argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG;
+ /* Align on a 16-byte boundary. */
+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+ if (arg_types[i]->type == FFI_TYPE_LONGDOUBLE && (argn % 2) != 0)
+ argn++;
+#endif
if (i < fp_slot_max
&& (arg_types[i]->type == FFI_TYPE_FLOAT
|| arg_types[i]->type == FFI_TYPE_DOUBLE