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.
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 */