commit:     75b2c980d16c2b137f21e9f6a0a3f1de6ddd7769
Author:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Sat Oct 14 19:51:14 2017 +0000
Commit:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Sat Oct 14 19:56:54 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=75b2c980

dev-libs/libffi: ia64: fix small struct handling, bug #634190

After FFI_TYPE_COMPLEX was added to libffi ia64 dispatch table
was off-by-one in IA-64 specific handling of return values.

Bug: https://bugs.gentoo.org/634190
Package-Manager: Portage-2.3.10, Repoman-2.3.3

 .../libffi/files/libffi-3.2.1-complex-ia64.patch   | 41 ++++++++++++++++++++++
 dev-libs/libffi/libffi-3.2.1.ebuild                |  1 +
 2 files changed, 42 insertions(+)

diff --git a/dev-libs/libffi/files/libffi-3.2.1-complex-ia64.patch 
b/dev-libs/libffi/files/libffi-3.2.1-complex-ia64.patch
new file mode 100644
index 00000000000..fd5c1ea4b28
--- /dev/null
+++ b/dev-libs/libffi/files/libffi-3.2.1-complex-ia64.patch
@@ -0,0 +1,41 @@
+ia64: fix small struct handling (missing complex type entry)
+
+commit 6e8a4460833594d5af1b4539178025da0077df19
+added FFI_TYPE_COMPLEX value type (comes after FFI_TYPE_POINTER)
+
+ia64 ffi_closure_unix reiles on the ordering of
+types as ia64 has ia64-specific FFI types:
+small struct and others.
+
+As a result all tests handling small structs broke.
+
+The change fixes dispatch table by ignoring FFI_TYPE_COMPLEX.
+This has positive effect of unbreaking most tests:
+
+                 === libffi Summary ===
+ 
+-# of expected passes            1595
+-# of unexpected failures        295
++# of expected passes            1930
++# of unexpected failures        10
+ # of unsupported tests          30
+
+Bug: https://bugs.gentoo.org/634190
+--- a/src/ia64/unix.S
++++ b/src/ia64/unix.S
+@@ -529,6 +529,7 @@ ffi_closure_unix:
+       data8   @pcrel(.Lst_int64)              // FFI_TYPE_SINT64
+       data8   @pcrel(.Lst_void)               // FFI_TYPE_STRUCT
+       data8   @pcrel(.Lst_int64)              // FFI_TYPE_POINTER
++      data8   @pcrel(.Lst_void)               // FFI_TYPE_COMPLEX (not 
implemented)
+       data8   @pcrel(.Lst_small_struct)       // FFI_IA64_TYPE_SMALL_STRUCT
+       data8   @pcrel(.Lst_hfa_float)          // FFI_IA64_TYPE_HFA_FLOAT
+       data8   @pcrel(.Lst_hfa_double)         // FFI_IA64_TYPE_HFA_DOUBLE
+@@ -550,6 +551,7 @@ ffi_closure_unix:
+       data8   @pcrel(.Lld_int)                // FFI_TYPE_SINT64
+       data8   @pcrel(.Lld_void)               // FFI_TYPE_STRUCT
+       data8   @pcrel(.Lld_int)                // FFI_TYPE_POINTER
++      data8   @pcrel(.Lld_void)               // FFI_TYPE_COMPLEX (not 
implemented)
+       data8   @pcrel(.Lld_small_struct)       // FFI_IA64_TYPE_SMALL_STRUCT
+       data8   @pcrel(.Lld_hfa_float)          // FFI_IA64_TYPE_HFA_FLOAT
+       data8   @pcrel(.Lld_hfa_double)         // FFI_IA64_TYPE_HFA_DOUBLE

diff --git a/dev-libs/libffi/libffi-3.2.1.ebuild 
b/dev-libs/libffi/libffi-3.2.1.ebuild
index 1160d49a6b8..848a9fedbf1 100644
--- a/dev-libs/libffi/libffi-3.2.1.ebuild
+++ b/dev-libs/libffi/libffi-3.2.1.ebuild
@@ -40,6 +40,7 @@ src_prepare() {
        epatch "${FILESDIR}"/${PN}-3.2.1-o-tmpfile-eacces.patch #529044
        epatch "${FILESDIR}"/${PN}-3.2.1-complex_alpha.patch
        epatch "${FILESDIR}"/${PN}-3.1-darwin-x32.patch
+       epatch "${FILESDIR}"/${PN}-3.2.1-complex-ia64.patch
        epatch_user
        elibtoolize
 }

Reply via email to