[Patch] libffi: Add MIPS64 support.

David Daney ddaney@avtrex.com
Thu Aug 9 05:01:00 GMT 2007


This patch adds full MIPS64 support to libffi.  Previously libffi had 
disabled MIPS64 and the code that was there failed many test cases.

In addition to cleaning up the existing code and fixing some failing 
corner cases, I added support for ffi closures and throwing of 
exceptions through libffi.  Most of the changes only touch the n32 and 
n64 ABIs which had previously been disabled.  The one exception was to 
move a parameter to a different register($12) in the o32 closure code so 
that the trampoline generation code could be shared with n32.

Tested on x86_64-pc-linux-gnu, mips64-linux{o32, n32, n64} with no 
failures in the libffi testsuite.

OK to Commit?

2007-08-08  David Daney  <ddaney@avtrex.com>

    * configure.ac: Don't treat mips64 as a special case.
    * Makefile.am (nodist_libffi_la_SOURCES): Add n32.S.
    * configure: Regenerate
    * Makefile.in: Ditto.
    * fficonfig.h.in: Ditto.
    * src/mips/ffitarget.h (REG_L, REG_S, SUBU, ADDU, SRL, LI): Indent.
    (LA, EH_FRAME_ALIGN, FDE_ADDR_BYTES): New preprocessor macros.
    (FFI_DEFAULT_ABI): Set for n64 case.
    (FFI_CLOSURES, FFI_TRAMPOLINE_SIZE): Define for n32 and n64 cases.
    * src/mips/n32.S (ffi_call_N32): Add debug macros and labels for FDE.
    (ffi_closure_N32): New function.
    (.eh_frame): New section
    * src/mips/o32.S: Clean up comments.
    (ffi_closure_O32): Pass ffi_closure parameter in $12.
    * src/mips/ffi.c: Use FFI_MIPS_N32 instead of
    _MIPS_SIM == _ABIN32 throughout.
    (FFI_MIPS_STOP_HERE): New, use in place of
    ffi_stop_here.
    (ffi_prep_args): Use unsigned long to hold pointer values.  Rewrite
    to support n32/n64 ABIs.
    (calc_n32_struct_flags): Rewrite.
    (calc_n32_return_struct_flags): Remove unused variable.  Reverse
    position of flag bits.
    (ffi_prep_cif_machdep): Rewrite n32 portion.
    (ffi_call): Enable for n64.  Add special handling for small structure
    return values.
    (ffi_prep_closure_loc): Add n32 and n64 support.
    (ffi_closure_mips_inner_O32): Add cast to silence warning.
    (copy_struct_N32, ffi_closure_mips_inner_N32): New functions.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: libffi-mips64.diff
Type: text/x-patch
Size: 30759 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/java-patches/attachments/20070809/6863fb00/attachment.bin>


More information about the Java-patches mailing list