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 }