[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