dev-libs/libffi: ia64: fix small struct handling, bug #634190
authorSergei Trofimovich <slyfox@gentoo.org>
Sat, 14 Oct 2017 19:51:14 +0000 (20:51 +0100)
committerSergei Trofimovich <slyfox@gentoo.org>
Sat, 14 Oct 2017 19:56:54 +0000 (20:56 +0100)
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

dev-libs/libffi/files/libffi-3.2.1-complex-ia64.patch [new file with mode: 0644]
dev-libs/libffi/libffi-3.2.1.ebuild

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 (file)
index 0000000..fd5c1ea
--- /dev/null
@@ -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
index 1160d49a6b8b2be7db195cb53f8b96d920a9f342..848a9fedbf13a2e07efb8a446b9d290a5c0a43ac 100644 (file)
@@ -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
 }