~ruther/guix-local

1602fcea18879f855f906cf21bb6ee849cbf62c2 — Mark H Weaver 12 years ago bf2cc1e
gnu: libffi: fix handling of uint32_t arguments on MIPS N32.

* gnu/packages/patches/libffi-mips-n32-fix.patch: New file.
* gnu/packages/libffi.scm (libffi): Add patch.
* gnu-system.am (dist_patch_DATA): Add patch.
3 files changed, 25 insertions(+), 1 deletions(-)

M gnu-system.am
M gnu/packages/libffi.scm
A gnu/packages/patches/libffi-mips-n32-fix.patch
M gnu-system.am => gnu-system.am +1 -0
@@ 237,6 237,7 @@ dist_patch_DATA =						\
  gnu/packages/patches/guile-relocatable.patch			\
  gnu/packages/patches/hop-bigloo-4.0b.patch			\
  gnu/packages/patches/libevent-dns-tests.patch			\
  gnu/packages/patches/libffi-mips-n32-fix.patch		\
  gnu/packages/patches/libtool-skip-tests.patch			\
  gnu/packages/patches/libtool-skip-tests-for-mips.patch	\
  gnu/packages/patches/m4-gets-undeclared.patch			\

M gnu/packages/libffi.scm => gnu/packages/libffi.scm +3 -1
@@ 17,6 17,7 @@
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages libffi)
  #:use-module (gnu packages)
  #:use-module (guix licenses)
  #:use-module (guix packages)
  #:use-module (guix download)


@@ 46,7 47,8 @@
                             name "-" version ".tar.gz"))
             (sha256
              (base32
               "077ibkf84bvcd6rw1m6jb107br63i2pp301rkmsbgg6300adxp8x"))))
               "077ibkf84bvcd6rw1m6jb107br63i2pp301rkmsbgg6300adxp8x"))
             (patches (list (search-patch "libffi-mips-n32-fix.patch")))))
    (build-system gnu-build-system)
    (arguments `(#:modules ((guix build utils) (guix build gnu-build-system)
                            (ice-9 ftw) (srfi srfi-26))

A gnu/packages/patches/libffi-mips-n32-fix.patch => gnu/packages/patches/libffi-mips-n32-fix.patch +21 -0
@@ 0,0 1,21 @@
Fix handling of uint32_t arguments on the MIPS N32 ABI.

Patch by Mark H Weaver <mhw@netris.org>.

--- libffi/src/mips/ffi.c.orig	2013-03-16 07:19:39.000000000 -0400
+++ libffi/src/mips/ffi.c	2013-10-22 01:11:03.111985247 -0400
@@ -170,7 +170,14 @@
 		break;
 		  
 	      case FFI_TYPE_UINT32:
+#ifdef FFI_MIPS_N32
+		/* The N32 ABI requires that 32-bit integers
+		   be sign-extended to 64-bits, regardless of
+		   whether they are signed or unsigned. */
+		*(ffi_arg *)argp = *(SINT32 *)(* p_argv);
+#else
 		*(ffi_arg *)argp = *(UINT32 *)(* p_argv);
+#endif
 		break;
 
 	      /* This can only happen with 64bit slots.  */