libffi: upgraded package to upstream

Upgraded dev-libs/libffi to version 3.1-r3 as newer aarch64 wants it.

BUG=None
TEST=`cbuildbot chromiumos-sdk` passes
TEST=`cbuildbot {x86-alex,lumpy,daisy}-release` passes
TEST=`emerge-arm64-generic libffi` works

Change-Id: I2b3914dacc9bef3d37afac4745ffdc4c1b4e842c
Reviewed-on: https://chromium-review.googlesource.com/219085
Commit-Queue: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Olof Johansson <olofj@chromium.org>
diff --git a/dev-libs/libffi/Manifest b/dev-libs/libffi/Manifest
index a1b39fa..e098a56 100644
--- a/dev-libs/libffi/Manifest
+++ b/dev-libs/libffi/Manifest
@@ -1 +1 @@
-DIST libffi-3.0.11.tar.gz 794220 SHA256 70bfb01356360089aa97d3e71e3edf05d195599fd822e922e50d46a0055a6283 SHA512 0049388d16207078a3d6dce97c877f1d9647aa9d908a9372a3f67ca064b70d8c8b23ee458be4a15a6344a5d39ea3e6292be728dfbcc73e1efc0b1db03be874f3 WHIRLPOOL c5ee01a6415b2715a4542d0997e3a7f42cbc97e476589d4e093fcff44315cc83f78a02dc04929c96831309966ac196e6ceb134c8b14cfc02313e139a98e6c11a
+DIST libffi-3.1.tar.gz 937214 SHA256 97feeeadca5e21870fa4433bc953d1b3af3f698d5df8a428f68b73cd60aef6eb SHA512 8994973d75facf5ad928c270e17b1a56e24d1543af75b93731a0048e747df27e4190a736b6dc2dca7d43de1d7e88891220304802c10fcccdcebee9c9ffd3d1b9 WHIRLPOOL 19c08cffd39c998fcd762b1e3767b4fd86915427226833411302bebd2d5bcf93d515e6df4a4cab11327595d3966e46442e457fbe09ae986b58bdfb2bb6adb913
diff --git a/dev-libs/libffi/files/libffi-3.0.11-x86-pic-check.patch b/dev-libs/libffi/files/libffi-3.0.11-x86-pic-check.patch
deleted file mode 100644
index 40f5532..0000000
--- a/dev-libs/libffi/files/libffi-3.0.11-x86-pic-check.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-https://bugs.gentoo.org/417179
-https://github.com/atgreen/libffi/issues/21
-
-From bff052d9cd5be41ba9e47c76114054af487d3c30 Mon Sep 17 00:00:00 2001
-From: Anthony Green <green@moxielogic.com>
-Date: Fri, 11 Jan 2013 10:24:32 -0500
-Subject: [PATCH] 32-bit x86 fix and more
-
----
- ChangeLog          |    8 ++++++++
- README             |    2 ++
- configure          |   43 +++++--------------------------------------
- configure.ac       |    6 +++---
- m4/ax_cc_maxopt.m4 |    3 ++-
- 5 files changed, 20 insertions(+), 42 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 5ca32fd..32ec7c5 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -334,10 +334,10 @@ fi
- if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then
-     AC_CACHE_CHECK([assembler supports pc related relocs],
- 	libffi_cv_as_x86_pcrel, [
--	libffi_cv_as_x86_pcrel=yes
-+	libffi_cv_as_x86_pcrel=no
- 	echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
--	if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then
--	    libffi_cv_as_x86_pcrel=no
-+	if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
-+	    libffi_cv_as_x86_pcrel=yes
- 	fi
- 	])
-     if test "x$libffi_cv_as_x86_pcrel" = xyes; then
-diff --git a/m4/ax_cc_maxopt.m4 b/m4/ax_cc_maxopt.m4
-index f5f7517..62e3b53 100644
---- a/m4/ax_cc_maxopt.m4
-+++ b/m4/ax_cc_maxopt.m4
-@@ -141,7 +141,8 @@ if test "$ac_test_CFLAGS" != "set"; then
-      CFLAGS="-O3 -fomit-frame-pointer"
- 
-      # -malign-double for x86 systems
--     AX_CHECK_COMPILE_FLAG(-malign-double, CFLAGS="$CFLAGS -malign-double")
-+     # LIBFFI -- DON'T DO THIS - CHANGES ABI
-+     # AX_CHECK_COMPILE_FLAG(-malign-double, CFLAGS="$CFLAGS -malign-double")
- 
-      #  -fstrict-aliasing for gcc-2.95+
-      AX_CHECK_COMPILE_FLAG(-fstrict-aliasing,
-diff --git a/configure b/configure
-index 95d950b..41bde69 100755
---- a/configure
-+++ b/configure
-@@ -12426,41 +12426,8 @@ $as_echo "$icc_archflag" >&6; }
-      CFLAGS="-O3 -fomit-frame-pointer"
- 
-      # -malign-double for x86 systems
--     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5
--$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; }
--if ${ax_cv_check_cflags___malign_double+:} false; then :
--  $as_echo_n "(cached) " >&6
--else
--
--  ax_check_save_flags=$CFLAGS
--  CFLAGS="$CFLAGS  -malign-double"
--  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
--/* end confdefs.h.  */
--
--int
--main ()
--{
--
--  ;
--  return 0;
--}
--_ACEOF
--if ac_fn_c_try_compile "$LINENO"; then :
--  ax_cv_check_cflags___malign_double=yes
--else
--  ax_cv_check_cflags___malign_double=no
--fi
--rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--  CFLAGS=$ax_check_save_flags
--fi
--{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___malign_double" >&5
--$as_echo "$ax_cv_check_cflags___malign_double" >&6; }
--if test x"$ax_cv_check_cflags___malign_double" = xyes; then :
--  CFLAGS="$CFLAGS -malign-double"
--else
--  :
--fi
--
-+     # LIBFFI -- DON'T DO THIS - CHANGES ABI
-+     # AX_CHECK_COMPILE_FLAG(-malign-double, CFLAGS="$CFLAGS -malign-double")
- 
-      #  -fstrict-aliasing for gcc-2.95+
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5
-@@ -14480,10 +14447,10 @@ if ${libffi_cv_as_x86_pcrel+:} false; then :
-   $as_echo_n "(cached) " >&6
- else
- 
--	libffi_cv_as_x86_pcrel=yes
-+	libffi_cv_as_x86_pcrel=no
- 	echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
--	if $CC $CFLAGS -c conftest.s 2>&1 | $EGREP -i 'illegal|warning' > /dev/null; then
--	    libffi_cv_as_x86_pcrel=no
-+	if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
-+	    libffi_cv_as_x86_pcrel=yes
- 	fi
- 
- fi
--- 
-1.7.10
-
diff --git a/dev-libs/libffi/files/libffi-3.0.13-emutramp_pax_proc.patch b/dev-libs/libffi/files/libffi-3.0.13-emutramp_pax_proc.patch
new file mode 100644
index 0000000..c27bd9b
--- /dev/null
+++ b/dev-libs/libffi/files/libffi-3.0.13-emutramp_pax_proc.patch
@@ -0,0 +1,37 @@
+2013-05-22  Magnus Granberg  <zorry@gentoo.org>
+
+	#457194
+	* src/closuer.c (emutramp_enabled_check): Check with /proc.
+
+--- a/src/closures.c	2013-03-17 23:27:11.000000000 +0100
++++ b/src/closures.c	2013-04-29 23:26:02.279022022 +0200
+@@ -181,10 +181,26 @@ static int emutramp_enabled = -1;
+ static int
+ emutramp_enabled_check (void)
+ {
+-  if (getenv ("FFI_DISABLE_EMUTRAMP") == NULL)
+-    return 1;
+-  else
++  char *buf = NULL;
++  size_t len = 0;
++  FILE *f;
++  int ret;
++  f = fopen ("/proc/self/status", "r");
++  if (f == NULL)
+     return 0;
++  ret = 0;
++
++  while (getline (&buf, &len, f) != -1)
++    if (!strncmp (buf, "PaX:", 4))
++      {
++        char emutramp;
++        if (sscanf (buf, "%*s %*c%c", &emutramp) == 1)
++          ret = (emutramp == 'E');
++        break;
++      }
++  free (buf);
++  fclose (f);
++  return ret;
+ }
+ 
+ #define is_emutramp_enabled() (emutramp_enabled >= 0 ? emutramp_enabled \
diff --git a/dev-libs/libffi/files/libffi-3.1-execstack.patch b/dev-libs/libffi/files/libffi-3.1-execstack.patch
new file mode 100644
index 0000000..6884a47
--- /dev/null
+++ b/dev-libs/libffi/files/libffi-3.1-execstack.patch
@@ -0,0 +1,12 @@
+http://bugs.gentoo.org/511634
+http://sourceware.org/ml/libffi-discuss/2014/msg00058.html
+
+--- src/x86/win32.S
++++ src/x86/win32.S
+@@ -1304,3 +1304,6 @@
+ 
+ #endif /* !_MSC_VER */
+ 
++#if defined __ELF__ && defined __linux__
++	.section        .note.GNU-stack,"",@progbits
++#endif
diff --git a/dev-libs/libffi/files/libffi-3.1-typing_error.patch b/dev-libs/libffi/files/libffi-3.1-typing_error.patch
new file mode 100644
index 0000000..fc24006
--- /dev/null
+++ b/dev-libs/libffi/files/libffi-3.1-typing_error.patch
@@ -0,0 +1,14 @@
+http://bugs.gentoo.org/511752
+http://sourceware.org/ml/libffi-discuss/2014/msg00059.html
+
+--- include/ffi.h.in
++++ include/ffi.h.in
+@@ -221,7 +221,7 @@ typedef struct {
+ #endif
+ } ffi_cif;
+ 
+-#if HAVE_LONG_DOUBLE_VARIANT
++#if @HAVE_LONG_DOUBLE_VARIANT@
+ /* Used to adjust size/alignment of ffi types.  */
+ void ffi_prep_types (ffi_abi abi);
+ # endif
diff --git a/dev-libs/libffi/libffi-3.0.11.ebuild b/dev-libs/libffi/libffi-3.0.11.ebuild
deleted file mode 100644
index c6fce4e..0000000
--- a/dev-libs/libffi/libffi-3.0.11.ebuild
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright 1999-2013 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/dev-libs/libffi/libffi-3.0.11.ebuild,v 1.20 2013/03/28 23:48:12 vapier Exp $
-
-EAPI=4
-
-MY_P=${P/_/-}
-
-inherit eutils libtool multilib toolchain-funcs
-
-DESCRIPTION="a portable, high level programming interface to various calling conventions."
-HOMEPAGE="http://sourceware.org/libffi/"
-SRC_URI="ftp://sourceware.org/pub/${PN}/${MY_P}.tar.gz"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="*"
-IUSE="debug static-libs test"
-
-RDEPEND=""
-DEPEND="test? ( dev-util/dejagnu )"
-
-S=${WORKDIR}/${MY_P}
-
-DOCS="ChangeLog* README"
-
-pkg_setup() {
-	# Check for orphaned libffi, see http://bugs.gentoo.org/354903 for example
-	if [[ ${ROOT} == "/" && ${EPREFIX} == "" ]] && ! has_version ${CATEGORY}/${PN}; then
-		local base="${T}"/conftest
-		echo 'int main() { }' > "${base}".c
-		$(tc-getCC) -o "${base}" "${base}".c -lffi >&/dev/null
-		if [ $? -eq 0 ]; then
-			eerror "The linker reported linking against -lffi to be working while it shouldn't have."
-			eerror "This is wrong and you should find and delete the old copy of libffi before continuing."
-			die "The system is in inconsistent state with unknown libffi installed."
-		fi
-	fi
-}
-
-src_prepare() {
-	epatch "${FILESDIR}"/${P}-x86-pic-check.patch #417179
-	sed -i 's:@toolexeclibdir@:$(libdir):g' Makefile.in || die #462814
-	epatch_user
-	elibtoolize
-}
-
-src_configure() {
-	use userland_BSD && export HOST="${CHOST}"
-	econf \
-		$(use_enable static-libs static) \
-		$(use_enable debug)
-}
-
-src_install() {
-	default
-	rm -f "${ED}"/usr/lib*/lib*.la
-}
-
-pkg_preinst() {
-	preserve_old_lib /usr/$(get_libdir)/${PN}$(get_libname 5)
-}
-
-pkg_postinst() {
-	preserve_old_lib_notify /usr/$(get_libdir)/${PN}$(get_libname 5)
-}
diff --git a/dev-libs/libffi/libffi-3.1-r3.ebuild b/dev-libs/libffi/libffi-3.1-r3.ebuild
new file mode 100644
index 0000000..d90ba72
--- /dev/null
+++ b/dev-libs/libffi/libffi-3.1-r3.ebuild
@@ -0,0 +1,63 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-libs/libffi/libffi-3.1-r3.ebuild,v 1.2 2014/08/10 20:35:34 slyfox Exp $
+
+EAPI=5
+inherit eutils libtool multilib multilib-minimal toolchain-funcs
+
+DESCRIPTION="a portable, high level programming interface to various calling conventions"
+HOMEPAGE="http://sourceware.org/libffi/"
+SRC_URI="ftp://sourceware.org/pub/${PN}/${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="*"
+IUSE="debug pax_kernel static-libs test"
+
+RDEPEND="abi_x86_32? ( !<=app-emulation/emul-linux-x86-baselibs-20130224-r1
+		!app-emulation/emul-linux-x86-baselibs[-abi_x86_32(-)] )"
+DEPEND="test? ( dev-util/dejagnu )"
+
+DOCS="ChangeLog* README"
+
+ECONF_SOURCE=${S}
+
+pkg_setup() {
+	# Check for orphaned libffi, see http://bugs.gentoo.org/354903 for example
+	if [[ ${ROOT} == "/" && ${EPREFIX} == "" ]] && ! has_version ${CATEGORY}/${PN}; then
+		local base="${T}"/conftest
+		echo 'int main() { }' > "${base}".c
+		$(tc-getCC) -o "${base}" "${base}".c -lffi >&/dev/null
+		if [ $? -eq 0 ]; then
+			eerror "The linker reported linking against -lffi to be working while it shouldn't have."
+			eerror "This is wrong and you should find and delete the old copy of libffi before continuing."
+			die "The system is in inconsistent state with unknown libffi installed."
+		fi
+	fi
+}
+
+src_prepare() {
+	epatch \
+		"${FILESDIR}"/${P}-execstack.patch \
+		"${FILESDIR}"/${P}-typing_error.patch
+
+	sed -i -e 's:@toolexeclibdir@:$(libdir):g' Makefile.in || die #462814
+	# http://sourceware.org/ml/libffi-discuss/2014/msg00060.html
+	sed -i -e 's:@toolexeclibdir@:${libdir}:' libffi.pc.in || die #511726
+
+	epatch_user
+	elibtoolize
+}
+
+multilib_src_configure() {
+	use userland_BSD && export HOST="${CHOST}"
+	econf \
+		$(use_enable static-libs static) \
+		$(use_enable pax_kernel pax_emutramp) \
+		$(use_enable debug)
+}
+
+multilib_src_install_all() {
+	prune_libtool_files
+	einstalldocs
+}
diff --git a/metadata/md5-cache/dev-libs/libffi-3.0.11 b/metadata/md5-cache/dev-libs/libffi-3.0.11
deleted file mode 100644
index d677027..0000000
--- a/metadata/md5-cache/dev-libs/libffi-3.0.11
+++ /dev/null
@@ -1,12 +0,0 @@
-DEFINED_PHASES=configure install postinst preinst prepare setup
-DEPEND=test? ( dev-util/dejagnu )
-DESCRIPTION=a portable, high level programming interface to various calling conventions.
-EAPI=4
-HOMEPAGE=http://sourceware.org/libffi/
-IUSE=debug static-libs test
-KEYWORDS=*
-LICENSE=MIT
-SLOT=0
-SRC_URI=ftp://sourceware.org/pub/libffi/libffi-3.0.11.tar.gz
-_eclasses_=eutils	a108f00cccac414097bcbbbb5de01762	libtool	eba09ed440f2692f73024ff3621a1f4b	multilib	3bf24e6abb9b76d9f6c20600f0b716bf	toolchain-funcs	48b38a216afb92db6314d6c3187abea3
-_md5_=be8534096b02567030e6ec5934335ded
diff --git a/metadata/md5-cache/dev-libs/libffi-3.1-r3 b/metadata/md5-cache/dev-libs/libffi-3.1-r3
new file mode 100644
index 0000000..86caf81
--- /dev/null
+++ b/metadata/md5-cache/dev-libs/libffi-3.1-r3
@@ -0,0 +1,13 @@
+DEFINED_PHASES=compile configure install prepare setup test
+DEPEND=test? ( dev-util/dejagnu )
+DESCRIPTION=a portable, high level programming interface to various calling conventions
+EAPI=5
+HOMEPAGE=http://sourceware.org/libffi/
+IUSE=debug pax_kernel static-libs test abi_x86_32 abi_x86_64 abi_x86_x32 abi_mips_n32 abi_mips_n64 abi_mips_o32 abi_ppc_32 abi_ppc_64 abi_s390_32 abi_s390_64
+KEYWORDS=*
+LICENSE=MIT
+RDEPEND=abi_x86_32? ( !<=app-emulation/emul-linux-x86-baselibs-20130224-r1 !app-emulation/emul-linux-x86-baselibs[-abi_x86_32(-)] )
+SLOT=0
+SRC_URI=ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz
+_eclasses_=eutils	a108f00cccac414097bcbbbb5de01762	libtool	eba09ed440f2692f73024ff3621a1f4b	multibuild	46527a4656956da3d58acff72c9b59b1	multilib	3bf24e6abb9b76d9f6c20600f0b716bf	multilib-build	9eb4b5fb858228316d8bb32ada51f6a5	multilib-minimal	5bbdc77877c1aa3c6bd89ca3f9196d11	multiprocessing	d7f2985a2c76c365ee20269db5261414	toolchain-funcs	48b38a216afb92db6314d6c3187abea3
+_md5_=605ccdf0de7b0ba65f20df7942410f82