diff mbox

[Committed] Fix libffi on mips64 with soft-float

Message ID CA+=Sn1nzfzULJy0HjbfG9WyZk4NSS7PH-co9HxshYZRkS5eSJA@mail.gmail.com
State New
Headers show

Commit Message

Andrew Pinski Aug. 26, 2012, 6:27 p.m. UTC
Hi,
  The problem here was before FFI_ASSERT was turned off in 99% of the
time so nobody noticed that soft-float ABIS would fail.  When the
FFI_ASSERT was converted over to return FFI_BAD_ABI instead, n32 and
n64 soft-float abis started to fail.

I committed the following patch as obvious after a bootstrap/test on
mips64-linux-gnu with soft-float turned on.

Thanks,
Andrew Pinski

ChangeLog:
* src/mips/ffi.c (ffi_prep_closure_loc): Allow n32 with soft-float and n64 with
soft-float.
diff mbox

Patch

Index: src/mips/ffi.c
===================================================================
--- src/mips/ffi.c	(revision 190638)
+++ src/mips/ffi.c	(working copy)
@@ -670,9 +670,16 @@  ffi_prep_closure_loc (ffi_closure *closu
   if (cif->abi != FFI_O32 && cif->abi != FFI_O32_SOFT_FLOAT)
     return FFI_BAD_ABI;
   fn = ffi_closure_O32;
-#else /* FFI_MIPS_N32 */
-  if (cif->abi != FFI_N32 && cif->abi != FFI_N64)
+#else
+#if _MIPS_SIM ==_ABIN32
+  if (cif->abi != FFI_N32
+      && cif->abi != FFI_N32_SOFT_FLOAT)
     return FFI_BAD_ABI;
+#else
+  if (cif->abi != FFI_N64
+      && cif->abi != FFI_N64_SOFT_FLOAT)
+    return FFI_BAD_ABI;
+#endif
   fn = ffi_closure_N32;
 #endif /* FFI_MIPS_O32 */