http://bugs.gentoo.org/show_bug.cgi?id=286911

--- src/mips/ffitarget.h.orig	2009-06-19 19:52:37.000000000 +0200
+++ src/mips/ffitarget.h	2009-06-19 19:52:43.000000000 +0200
@@ -43,7 +43,7 @@
 #  endif
 
 #if !defined(_MIPS_SIM)
--- something is very wrong --
+# error -- something is very wrong --
 #else
 #  if (_MIPS_SIM==_ABIN32 && defined(_ABIN32)) || (_MIPS_SIM==_ABI64 && defined(_ABI64))
 #    define FFI_MIPS_N32
@@ -51,7 +51,7 @@
 #    if (_MIPS_SIM==_ABIO32 && defined(_ABIO32))
 #      define FFI_MIPS_O32
 #    else
--- this is an unsupported platform --
+#     error -- this is an unsupported platform --
 #    endif
 #  endif
 #endif
--- include/ffi.h.in.orig	2009-06-19 19:52:36.000000000 +0200
+++ include/ffi.h.in	2009-06-19 19:52:43.000000000 +0200
@@ -251,6 +251,9 @@
 
 #if FFI_CLOSURES
 
+#ifdef __sgi
+# pragma pack 8
+#endif
 typedef struct {
   char tramp[FFI_TRAMPOLINE_SIZE];
   ffi_cif   *cif;
@@ -260,6 +263,9 @@
 } ffi_closure __attribute__((aligned (8)));
 #else
 } ffi_closure;
+# ifdef __sgi
+#  pragma pack 0
+# endif
 #endif
 
 void *ffi_closure_alloc (size_t size, void **code);
--- src/java_raw_api.c.dist	2009-09-29 11:04:56.517219880 +0100
+++ src/java_raw_api.c	2009-09-29 11:05:56.836581720 +0100
@@ -311,7 +311,7 @@
   ffi_raw_closure *cl = (ffi_raw_closure*)user_data;
 
   ffi_java_ptrarray_to_raw (cif, avalue, raw);
-  (*cl->fun) (cif, rvalue, raw, cl->user_data);
+  (*cl->fun) (cif, rvalue, (ffi_raw*)raw, cl->user_data);
   ffi_java_raw_to_rvalue (cif, rvalue);
 }