From 1602fcea18879f855f906cf21bb6ee849cbf62c2 Mon Sep 17 00:00:00 2001 From: Mark H Weaver Date: Sun, 3 Nov 2013 18:20:00 -0500 Subject: 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. --- gnu/packages/libffi.scm | 4 +++- gnu/packages/patches/libffi-mips-n32-fix.patch | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/libffi-mips-n32-fix.patch (limited to 'gnu/packages') diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm index e4a2761273..d1a834d9c5 100644 --- a/gnu/packages/libffi.scm +++ b/gnu/packages/libffi.scm @@ -17,6 +17,7 @@ ;;; along with GNU Guix. If not, see . (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)) diff --git a/gnu/packages/patches/libffi-mips-n32-fix.patch b/gnu/packages/patches/libffi-mips-n32-fix.patch new file mode 100644 index 0000000000..87ec48f883 --- /dev/null +++ b/gnu/packages/patches/libffi-mips-n32-fix.patch @@ -0,0 +1,21 @@ +Fix handling of uint32_t arguments on the MIPS N32 ABI. + +Patch by Mark H Weaver . + +--- 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. */ -- cgit v1.2.3